60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
import flask
|
|
import flask.ext.login as flask_login
|
|
import requests
|
|
|
|
|
|
api = flask.Blueprint('api', __name__)
|
|
|
|
|
|
@api.route('/publish', methods=['POST'])
|
|
def publish():
|
|
action = flask.request.form.get('action')
|
|
target = flask.request.form.get('target')
|
|
content = flask.request.form.get('content')
|
|
syndicate_to = flask.request.form.getlist('syndicate-to[]')
|
|
|
|
data = {
|
|
'h': 'entry',
|
|
'syndicate-to[]': syndicate_to,
|
|
'access_token': flask_login.current_user.access_token,
|
|
}
|
|
|
|
if action == 'like':
|
|
data['like-of'] = target
|
|
elif action == 'repost':
|
|
data['repost-of'] = target
|
|
else:
|
|
data['in-reply-to'] = target
|
|
data['content'] = content
|
|
|
|
resp = requests.post(
|
|
flask_login.current_user.micropub_endpoint, data=data, headers={
|
|
'Authorization': 'Bearer {}'.format(
|
|
flask_login.current_user.access_token),
|
|
})
|
|
|
|
return flask.jsonify({
|
|
'code': resp.status_code,
|
|
'content': resp.text,
|
|
'content-type': resp.headers.get('content-type'),
|
|
'location': resp.headers.get('location'),
|
|
})
|
|
|
|
|
|
@api.route('/_forward', methods=['GET', 'POST'])
|
|
def forward_request():
|
|
if flask.request.method == 'GET':
|
|
args = flask.request.args.copy()
|
|
url = args.pop('_url')
|
|
result = requests.get(url, params=args)
|
|
else:
|
|
data = flask.request.form.copy()
|
|
url = data.pop('_url')
|
|
result = requests.post(url, data=data)
|
|
|
|
return flask.jsonify({
|
|
'code': result.status_code,
|
|
'content': result.text,
|
|
'content-type': result.headers.get('content-type'),
|
|
'location': result.headers.get('location'),
|
|
})
|