from aiohttp import web
import aiohttp_security
import security
def init_app(app):
routes = web.RouteTableDef()
@routes.get('/in')
async def get_login(request):
status = request.query.get('status', '401')
if status == '401':
message = "Please enter the password.
userpass for regular access,
adminpass for elevated permissions."
elif status == '403':
message = "Elevated permissions required.
adminpass for elevated permissions."
else:
message = "This shouldn't happen."
response = request.config_dict['templates']["login.html"].safe_substitute({
'title': 'Log in to try the demo',
'message': message,
'url': request.query.get('url', '/')
})
return web.Response(text=response, content_type="text/html")
@routes.post('/in')
async def post_login(request):
postdata = await request.post()
url = postdata.get('url', '/')
identity = security.try_password(postdata["password"])
if identity:
redirect_response = web.HTTPFound(url)
await aiohttp_security.remember(request, redirect_response, identity)
raise redirect_response
else:
response = request.config_dict['templates']["login.html"].safe_substitute({
'title': 'Log in to try the demo',
'message': "Incorrect password.
userpass for regular access,
adminpass for elevated permissions.",
'url': url
})
return web.Response(text=response, content_type="text/html")
@routes.get('/out')
async def get_logout(request):
redirect_response = web.HTTPFound('/')
await aiohttp_security.forget(request, redirect_response)
raise redirect_response
app.add_routes(routes)