93 lines
2.4 KiB
Python
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
|
|
|