minimalism

This commit is contained in:
Yax 2018-09-02 11:42:24 +02:00
parent 646508b65e
commit bf9346b122
64 changed files with 205 additions and 7153 deletions

View file

@ -2,46 +2,70 @@
# -*- coding: utf-8 -*-
import logging
from flask import request, jsonify, abort, redirect
from datetime import datetime
from flask import request, abort, redirect
from core import app
from models.site import Site
from models.comment import Comment
from helpers.hashing import md5
from core import processor
logger = logging.getLogger(__name__)
@app.route("/newcomment", methods=['POST'])
@app.route("/newcomment", methods=["POST"])
def new_form_comment():
try:
data = request.form
# add client IP if provided by HTTP proxy
clientip = ''
if 'X-Forwarded-For' in request.headers:
clientip = request.headers['X-Forwarded-For']
# log
ip = ""
if "X-Forwarded-For" in request.headers:
ip = request.headers["X-Forwarded-For"]
# log
logger.info(data)
# validate token: retrieve site entity
token = data.get('token', '')
token = data.get("token", "")
site = Site.select().where(Site.token == token).get()
if site is None:
logger.warn('Unknown site %s' % token)
logger.warn("Unknown site %s" % token)
abort(400)
# honeypot for spammers
captcha = data.get('captcha', '')
captcha = data.get("captcha", "")
if captcha:
logger.warn('discard spam: data %s' % data)
logger.warn("discard spam: data %s" % data)
abort(400)
processor.enqueue({'request': 'new_comment', 'data': data, 'clientip': clientip})
url = data.get("url", "")
author_name = data.get("author", "").strip()
author_gravatar = data.get("email", "").strip()
author_site = data.get("site", "").to_lower().strip()
if author_site and author_site[:4] != "http":
author_site = "http://" + author_site
message = data.get("message", "")
created = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# add a row to Comment table
comment = Comment(
site=site,
url=url,
author_name=author_name,
author_site=author_site,
author_gravatar=author_gravatar,
content=message,
created=created,
notified=None,
published=None,
ip=ip,
)
comment.save()
except:
logger.exception("new comment failure")
abort(400)
return redirect('/redirect/', code=302)
return redirect("/redirect/", code=302)

View file

@ -1,25 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from flask import request, abort
from core import app
from core import processor
logger = logging.getLogger(__name__)
@app.route("/inbox", methods=['POST'])
def new_mail():
try:
data = request.get_json()
logger.debug(data)
processor.enqueue({'request': 'new_mail', 'data': data})
except:
logger.exception("new mail failure")
abort(400)
return "OK"

View file

@ -1,29 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from flask import request, abort
from core import app
from core import processor
logger = logging.getLogger(__name__)
@app.route("/unsubscribe", methods=['GET'])
def unsubscribe():
try:
data = {
'token': request.args.get('token', ''),
'url': request.args.get('url', ''),
'email': request.args.get('email', '')
}
logger.debug(data)
processor.enqueue({'request': 'unsubscribe', 'data': data})
except:
logger.exception("unsubscribe failure")
abort(400)
return "OK"

View file

@ -1,78 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from conf import config
from flask import request, jsonify, abort
from core import app
from models.site import Site
from models.comment import Comment
from helpers.hashing import md5
from core import processor
logger = logging.getLogger(__name__)
@app.route("/report", methods=['GET'])
def report():
try:
token = request.args.get('token', '')
secret = request.args.get('secret', '')
if secret != config.security['secret']:
logger.warn('Unauthorized request')
abort(401)
site = Site.select().where(Site.token == token).get()
if site is None:
logger.warn('Unknown site %s' % token)
abort(404)
processor.enqueue({'request': 'report', 'data': token})
except:
logger.exception("report failure")
abort(500)
return "OK"
@app.route("/accept", methods=['GET'])
def accept_comment():
try:
id = request.args.get('comment', '')
secret = request.args.get('secret', '')
if secret != config.security['secret']:
logger.warn('Unauthorized request')
abort(401)
processor.enqueue({'request': 'late_accept', 'data': id})
except:
logger.exception("accept failure")
abort(500)
return "PUBLISHED"
@app.route("/reject", methods=['GET'])
def reject_comment():
try:
id = request.args.get('comment', '')
secret = request.args.get('secret', '')
if secret != config.security['secret']:
logger.warn('Unauthorized request')
abort(401)
processor.enqueue({'request': 'late_reject', 'data': id})
except:
logger.exception("reject failure")
abort(500)
return "REJECTED"

View file

@ -1,49 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pika
from conf import config
from threading import Thread
import logging
import json
from core import processor
from util import rabbit
logger = logging.getLogger(__name__)
class MailConsumer(rabbit.Consumer):
def process(self, channel, method, properties, body):
try:
topic = method.routing_key
data = json.loads(body)
if topic == 'mail.message':
if "STACOSYS" in data['subject']:
logger.info('new message => {}'.format(data))
processor.enqueue({'request': 'new_mail', 'data': data})
else:
logger.info('ignore message => {}'.format(data))
else:
logger.warn('unsupported message [topic={}]'.format(topic))
except:
logger.exception('cannot process message')
def start():
logger.info('start rmqclient')
credentials = pika.PlainCredentials(
config.rabbitmq['username'], config.rabbitmq['password'])
parameters = pika.ConnectionParameters(
host=config.rabbitmq['host'],
port=config.rabbitmq['port'],
credentials=credentials,
virtual_host=config.rabbitmq['vhost']
)
connection = rabbit.Connection(parameters)
c = MailConsumer(connection, config.rabbitmq['exchange'], 'mail.message')
c.start()