web-app-demos/apps/account/app.py
2025-03-17 16:11:01 -06:00

48 lines
No EOL
1.6 KiB
Python

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.<br><code>userpass</code> for regular access,<br><code>adminpass</code> for elevated permissions."
elif status == '403':
message = "Elevated permissions required.<br><code>adminpass</code> 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.<br><code>userpass</code> for regular access,<br><code>adminpass</code> 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)