|
@@ -63,49 +63,51 @@ SELECT content FROM upload_temp WHERE rowid = ? LIMIT 1;
|
|
|
return data
|
|
|
|
|
|
|
|
|
-@route('/goto/preview', method=['GET'])
|
|
|
-def get_goto_preview():
|
|
|
- link = request.params.link
|
|
|
+@route('/<route:re:(clip|goto|upload|code)>/meta', method=['POST'])
|
|
|
+def get_meta(route):
|
|
|
response.content_type = 'application/json'
|
|
|
- if not link:
|
|
|
- return dumps(None)
|
|
|
- try:
|
|
|
- page = link_preview(link, parser="lxml")
|
|
|
- return dumps({
|
|
|
- 'title': page.title,
|
|
|
- 'img': page.absolute_image,
|
|
|
- 'domain': page.site_name,
|
|
|
- 'link': link,
|
|
|
- })
|
|
|
- except:
|
|
|
- return dumps(None)
|
|
|
-
|
|
|
-@route('/code/preview', method=['POST'])
|
|
|
-def get_code_preview():
|
|
|
- body = load(request.body)
|
|
|
- if not body:
|
|
|
- abort(404, 'Empty request')
|
|
|
-
|
|
|
- response.content_type = 'text/plain'
|
|
|
- if body['format'] == 'QR_CODE':
|
|
|
- return b64encode(get_qr_code(body['content'], err_lvl=body['errorCorrectionLevel']))
|
|
|
- return b64encode(get_bar_code(body))
|
|
|
-
|
|
|
-
|
|
|
-@route('/<route:re:(clip|goto|upload|code)>/hash', method=['POST'])
|
|
|
-def get_hash(route):
|
|
|
body = load(request.body)
|
|
|
- data = body['data']
|
|
|
- person = body.get('person', None)
|
|
|
+ person = route
|
|
|
if route == 'upload':
|
|
|
- data = parse_upload_placeholder(data)
|
|
|
+ data = parse_upload_placeholder(body['data'])
|
|
|
elif route == 'code':
|
|
|
- data = dumps(loads(body['data']), sort_keys=True).encode('utf-8')
|
|
|
+ data = dumps(body['data'], sort_keys=True).encode('utf-8')
|
|
|
else:
|
|
|
- data = data.encode('utf-8')
|
|
|
+ data = body['data'].encode('utf-8')
|
|
|
|
|
|
_bytes = blake(data, person = person and person.encode('utf-8'))
|
|
|
- return bytes_to_base32(_bytes)
|
|
|
+ hash = bytes_to_base32(_bytes)
|
|
|
+ fallback = f'https://shandan.one/{route}/{hash}'
|
|
|
+
|
|
|
+ preview = None
|
|
|
+ if route == 'goto':
|
|
|
+ link = data.decode('utf-8')
|
|
|
+ try:
|
|
|
+ page = link_preview(link, parser="lxml")
|
|
|
+ preview = {
|
|
|
+ 'title': page.title,
|
|
|
+ 'img': page.absolute_image,
|
|
|
+ 'domain': page.site_name,
|
|
|
+ 'link': link,
|
|
|
+ }
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+ elif route == 'code':
|
|
|
+ if body['data']['format'] == 'QR_CODE':
|
|
|
+ preview = b64encode(get_qr_code(body['data']['content'], err_lvl=body['data']['errorCorrectionLevel']))
|
|
|
+ else:
|
|
|
+ preview = b64encode(get_bar_code(body['data']))
|
|
|
+ preview = preview.decode('utf-8')
|
|
|
+
|
|
|
+ qr = None
|
|
|
+ if route != 'code':
|
|
|
+ qr = get_qr_code(data, fallback = fallback).decode('utf-8')
|
|
|
+
|
|
|
+ return dumps({
|
|
|
+ 'hash': hash,
|
|
|
+ 'qr': qr,
|
|
|
+ 'preview': preview,
|
|
|
+ })
|
|
|
|
|
|
@route('/<route:re:(clip|goto|upload)>/normalize', method=['GET'])
|
|
|
def normalize(route):
|
|
@@ -116,19 +118,6 @@ def normalize(route):
|
|
|
'o': normalize_base32(_hash) if _hash else None,
|
|
|
})
|
|
|
|
|
|
-@route('/<route:re:(clip|goto|upload)>/qr', method=['POST'])
|
|
|
-def get_qr(route):
|
|
|
- body = load(request.body)
|
|
|
- data = body['data']
|
|
|
- fallback = body.get('fallback', None)
|
|
|
- if route == 'upload':
|
|
|
- data = parse_upload_placeholder(data)
|
|
|
- else:
|
|
|
- data = data.encode('utf-8')
|
|
|
-
|
|
|
- response.content_type = 'image/svg+xml'
|
|
|
- return get_qr_code(data, fallback = fallback).decode('utf-8')
|
|
|
-
|
|
|
@route('/static/<filename:path>')
|
|
|
def send_static(filename):
|
|
|
return static_file(filename, root='rest/static')
|