minimalism
This commit is contained in:
parent
646508b65e
commit
bf9346b122
64 changed files with 205 additions and 7153 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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"
|
||||
|
|
@ -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"
|
||||
|
|
@ -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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue