This commit is contained in:
codl 2022-03-04 14:07:56 +01:00 committed by GitHub
commit 178e41059b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 42 additions and 1 deletions

View File

@ -1,10 +1,11 @@
from app import app, db, imgproxy
from libforget.auth import require_auth_api, get_viewer
from flask import jsonify, redirect, make_response, request, Response
from model import Account
from model import Account, Post
import libforget.settings
import libforget.json
import random
from werkzeug.exceptions import BadRequest
@app.route('/api/health_check') # deprecated 2021-03-12
@app.route('/api/status_check')
@ -86,3 +87,43 @@ def known_instances():
resp = Response('', 204)
resp.set_cookie('forget_known_instances', '', max_age=0)
return resp
class MalformedStatusList(werkzeug.exceptions.BadRequest):
pass
@app.route('/api/import_statuses', method=('POST',))
@require_auth_api
def import_statuses():
"""
accepts json in the form
[ {id, favourite, has_media, direct, is_reblog}, ... ]
"""
statuses = request.json
viewer = get_viewer()
if not isinstance(statuses, list):
raise MalformedStatusList()
expected_keys = ('id', 'favourite', 'has_media', 'direct', 'is_reblog')
boolean_keys = ('favourite', 'has_media', 'direct', 'is_reblog')
with db.session.no_autoflush:
for post in statuses:
if not isinstance(post, dict) or set(post.keys()) != expected_keys:
raise MalformedStatusList()
for key in boolean_keys:
post[key] = post[key] == 'true'
post['author_id'] = viewer.id
if viewer.service == 'twitter':
post['id'] = "twitter:{}".format(post['id'])
elif viewer.service == 'mastodon':
post['id'] = "mastodon:{}:{}".format(
viewer.mastdon_instance,
post['id'])
db.session.merge(Post(**post))
db.session.commit()