def requires_login(fn):
async def check_login(request, *args, **kwargs):
session_cookie = request.cookies.get('session')
if session_cookie:
async with app.pool.acquire() as con:
admin = await con.fetchrow("SELECT admins.toshi_id FROM admins "
"JOIN sessions ON admins.toshi_id = sessions.toshi_id "
"WHERE sessions.session_id = $1",
session_cookie)
if admin:
url = '{}/v1/user/{}'.format(ID_SERVICE_LOGIN_URL, admin['toshi_id'])
resp = await app.http.get(url)
if resp.status == 200:
admin = await resp.json()
if admin['custom']['avatar'].startswith('/'):
admin['custom']['avatar'] = "{}{}".format(ID_SERVICE_LOGIN_URL, admin['custom']['avatar'])
else:
admin = None
else:
admin = None
if not admin:
return redirect("/login?redirect={}".format(request.path))
# keep the config object as the first argument
if len(args) and isinstance(args[0], Config):
args = (args[0], admin, *args[1:])
else:
args = (admin, *args)
rval = await fn(request, *args, **kwargs)
return rval
return check_login
评论列表
文章目录