paws/paws/views.py
2020-01-15 08:56:27 -05:00

93 lines
2.4 KiB
Python

import aiohttp
import random
from aiohttp_jinja2 import render_template as render
from urllib.parse import quote_plus, unquote_plus
from .database import pawsdb, trans, query, where
from .functions import error
from .oauth import create_app, login
async def get_login(request):
parms = request.rel_url.query
redir = parms.get('redir')
numid = random.randint(1*1000000, 10*1000000-1)
return render('pages/login.html', request, {'redir': redir, 'numid': numid})
async def post_login(request):
data = await request.post()
domain = data.get('domain')
redir = data.get('redir')
numid = data.get('numid')
if domain in ['', None]:
return render('pages/login.html', request, {'msg': 'Missing domain'})
appid, appsecret, redir_url = create_app(domain)
with trans(pawsdb.users) as tr:
tr.insert({
'handle': data['numid'],
'domain': data['domain'],
'icon': None,
'appid': appid,
'appsecret': appsecret,
'token': None
})
response = aiohttp.web.HTTPFound(redir_url)
response.set_cookie('paws_numid', numid, max_age=60*60*24*14, path='/paws')
if redir not in ['', None]:
response.set_cookie('paws_redir', redir, max_age=60*60*24*14, path='/paws')
return response
async def get_auth(request):
parms = request.rel_url.query
cookies = request.cookies
redir = cookies.get('paws_redir')
numid = cookies.get('paws_numid')
code = parms.get('code')
if None in [numid, code]:
response = render('pages/error.html', request, {'msg': 'Missing temporary userid or auth code', 'code': 500}, status=500)
user = pawsdb.users.get(query.handle == str(numid))
token, userinfo = login(user, code)
with trans(pawsdb.users) as tr:
tr.update({'handle': userinfo['username'], 'icon': userinfo['avatar_static'], 'token': token}, where('handle') == numid)
print(user)
response = aiohttp.web.HTTPFound(redir)
response.set_cookie('paws_token', token, max_age=60*60*24*14)
response.del_cookie('paws_redir', path='/paws')
response.del_cookie('paws_numid', path='/paws')
return response
async def get_logout(request):
token = request.cookies.get('paws_token')
with trans(pawsdb.users) as tr:
tr.remove(where('token') == token)
response = render('pages/login.html', request, {'msg': 'Logged out'})
response.del_cookie('token')
return response
async def get_style(request):
response = render('color.css', request, {})
response.headers['Content-Type'] = 'text/css'
return response