Newer
Older
from sanic import Blueprint
from sanic import response
async def domain_list(request):
"""Returns a dictionary with domain IDs mapped to domain names"""
domain_info = await request.app.db.fetch("""
SELECT domain_id, domain
FROM domains
""")
return dict(domain_info)
@bp.get('/api/list')
async def list_handler(request):
domains = await domain_list(request)
SELECT file_id, filename, file_size, fspath, domain
FROM shortens
WHERE uploader = $1
AND deleted = false
ORDER BY shorten_id DESC
""", user_id)
filenames = dict([(ufile["filename"],
{"snowflake": ufile["file_id"],
"size": ufile["file_size"],
"url": f"https://{domains[ufile['domain']]}/i/"
f"{os.path.basename(ufile['fspath'])}"}
) for ufile in user_files])
shortens = dict([(ushorten["filename"],
{"snowflake": ushorten["shorten_id"],
"url": f"https://{domains[ushorten['domain']]}/s/"
f"{ushorten['filename']}"}
) for ushorten in user_shortens])
'shortens': shortens
async def delete_handler(request):
"""Invalidate a file."""
# TODO: Reduce code repetition between this and /api/shortendelete
user_id = await token_check(request)
file_name = str(request.json['filename'])
exec_out = await request.app.db.execute("""
UPDATE files
SET deleted = true
WHERE uploader = $1
AND filename = $2
raise NotFound('You have no files with this name.')
await purge_cf(request.app, file_name, FileNameType.FILE)
return response.json({
'success': True
})
@bp.delete('/api/shortendelete')
async def shortendelete_handler(request):
"""Invalidate a shorten."""
user_id = await token_check(request)
file_name = str(request.json['filename'])
exec_out = await request.app.db.execute("""
UPDATE shortens
SET deleted = true
WHERE uploader = $1
AND filename = $2
AND deleted = false
""", user_id, file_name)
# By doing this, we're cutting down DB calls by half
# and it still checks for user
if exec_out == "UPDATE 0":
raise NotFound('You have no shortens with this name.')
await purge_cf(request.app, file_name, FileNameType.SHORTEN)