"""Provides a flask route that receives webhooks from WordPress (expecting
|
|
`post_content`, `post_name`, and `post_url`), attempts to convert into BBcode,
|
|
then posts it to a `forum.hardware.fr` topic.
|
|
|
|
HFR credentials are stored in a separate `credentials.json` JSON file. See
|
|
`hfr.py` for details on how to generate the `user_hash`. `pre_title` can be
|
|
anything, just add as many `\n`s as you wish at the end of the string.
|
|
|
|
{
|
|
"user": "",
|
|
"user_hash": "",
|
|
"posturl": "",
|
|
"pre_title": ""
|
|
}
|
|
"""
|
|
|
|
import logging
|
|
import urllib.parse
|
|
import json
|
|
from flask import Flask, request
|
|
from converter import HTMLtoBBcode
|
|
from hfr import post_HFR
|
|
|
|
app = Flask(__name__)
|
|
CREDENTIALS_FILE = 'credentials.json'
|
|
parser = HTMLtoBBcode()
|
|
|
|
with open(CREDENTIALS_FILE, 'r') as fp:
|
|
config = json.load(fp)
|
|
|
|
@app.route('/')
|
|
def webhook_home():
|
|
return "<h1>Hello world</h1>"
|
|
|
|
@app.route('/wordpress_webhook', methods=['POST'])
|
|
def webhook_handler():
|
|
"""Function doing all the work."""
|
|
logger.info('got called, {}'.format(request))
|
|
|
|
webhook_data = urllib.parse.parse_qs(request.get_data(as_text=True))
|
|
logger.info(webhook_data)
|
|
|
|
parser.feed(webhook_data['post_content'][0])
|
|
content = parser.output
|
|
|
|
title = webhook_data['post_name'][0].replace('-', ' ')
|
|
wordpress_url = webhook_data['post_url'][0]
|
|
title_BB = '[url={url}][b]{title}[/b][/url]\n\n'.format(
|
|
url=wordpress_url,
|
|
title=title)
|
|
|
|
post_BB = config['pre_title'] + title_BB + content
|
|
|
|
logger.info(post_BB)
|
|
|
|
#outcome = post_HFR(config['user'],
|
|
# config['user_hash'],
|
|
# config['posturl'],
|
|
# post_BB)
|
|
|
|
#logger.info(outcome)
|
|
#logger.info(outcome.text)
|
|
|
|
return ''
|
|
|
|
|
|
def prepare_logger(logger_name=__name__):
|
|
"""Simple logger preparation function
|
|
"""
|
|
logger = logging.getLogger(logger_name)
|
|
logger.setLevel(logging.INFO)
|
|
handler = logging.StreamHandler()
|
|
formatter = logging.Formatter(
|
|
'{asctime} {name} {levelname:8s} {message}',
|
|
style='{')
|
|
handler.setFormatter(formatter)
|
|
logger.addHandler(handler)
|
|
|
|
return logger
|
|
|
|
|
|
logger = prepare_logger()
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host='0.0.0.0', port=54321, debug=True)
|