Files
stacosys/app/interface/api.py
T

89 lines
2.5 KiB
Python
Raw Normal View History

2015-05-02 13:43:38 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
2017-07-16 17:35:38 +02:00
from flask import request, jsonify, abort
from core import app
from models.site import Site
from models.comment import Comment
from core import processor
2015-05-02 13:43:38 +02:00
logger = logging.getLogger(__name__)
2015-05-09 20:25:35 +02:00
@app.route("/comments", methods=['GET'])
2017-07-16 17:35:38 +02:00
def query_comments():
2015-05-02 20:24:56 +02:00
comments = []
2015-05-03 18:31:15 +02:00
try:
2015-05-09 20:25:35 +02:00
token = request.args.get('token', '')
url = request.args.get('url', '')
2015-05-02 20:24:56 +02:00
2015-05-03 18:31:15 +02:00
logger.info('retrieve comments for token %s, url %s' % (token, url))
for comment in Comment.select(Comment).join(Site).where(
2015-05-18 13:23:24 +02:00
(Comment.url == url) &
(Comment.published.is_null(False)) &
(Site.token == token)).order_by(+Comment.published):
2015-05-03 18:31:15 +02:00
d = {}
d['author'] = comment.author_name
d['content'] = comment.content
if comment.author_site:
d['site'] = comment.author_site
2017-12-03 13:40:24 +01:00
d['avatar'] = comment.author_gravatar
2015-05-03 18:31:15 +02:00
d['date'] = comment.published.strftime("%Y-%m-%d %H:%M:%S")
2016-05-09 13:10:11 +02:00
logger.debug(d)
2015-05-03 18:31:15 +02:00
comments.append(d)
2017-07-16 17:35:38 +02:00
r = jsonify({'data': comments})
r.status_code = 200
2015-05-03 18:31:15 +02:00
except:
logger.warn('bad request')
2017-07-16 17:35:38 +02:00
r = jsonify({'data': []})
r.status_code = 400
2015-05-02 20:24:56 +02:00
return r
2015-05-09 20:25:35 +02:00
2017-07-16 17:35:38 +02:00
@app.route("/comments/count", methods=['GET'])
def get_comments_count():
2015-05-09 20:25:35 +02:00
try:
token = request.args.get('token', '')
url = request.args.get('url', '')
2017-07-16 17:35:38 +02:00
count = Comment.select(Comment).join(Site).where(
(Comment.url == url) &
(Comment.published.is_null(False)) &
(Site.token == token)).count()
r = jsonify({'count': count})
r.status_code = 200
2015-05-09 20:25:35 +02:00
except:
2017-07-16 17:35:38 +02:00
r = jsonify({'count': 0})
r.status_code = 200
2015-05-09 20:25:35 +02:00
return r
2015-05-10 12:44:04 +02:00
2017-07-09 11:42:36 +02:00
@app.route("/comments", methods=['POST'])
2017-07-16 17:35:38 +02:00
def new_comment():
2015-05-10 12:44:04 +02:00
try:
2017-07-16 17:35:38 +02:00
data = request.get_json()
logger.info(data)
2015-05-10 12:44:04 +02:00
# validate token: retrieve site entity
token = data.get('token', '')
site = Site.select().where(Site.token == token).get()
if site is None:
logger.warn('Unknown site %s' % token)
2017-07-16 17:35:38 +02:00
abort(400)
2015-05-10 12:44:04 +02:00
# honeypot for spammers
captcha = data.get('captcha', '')
2015-05-10 12:44:04 +02:00
if captcha:
logger.warn('discard spam: data %s' % data)
2017-07-16 17:35:38 +02:00
abort(400)
processor.enqueue({'request': 'new_comment', 'data': data})
2015-05-10 12:44:04 +02:00
except:
logger.exception("new comment failure")
2017-07-16 17:35:38 +02:00
abort(400)
2015-05-10 12:44:04 +02:00
2017-07-16 17:35:38 +02:00
return "OK"