-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathviews.py
105 lines (90 loc) · 3.43 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import aiosqlite
from sanic.response import redirect, text
# from sanja import render
from jinja2_sanic import template, render_template
from auth import (create_user,
ImproperNicknameError,
NicknameDuplicateError,
NicknameTooLongError,
getUserByNaverId)
@template("index.html.j2")
async def index(request):
if request.ctx.session.get("logged_in"):
return {"logged_in": True}
else:
return {"logged_in": False}
@template('callback.html.j2')
async def callback(request):
return {}
async def login(request):
client = request.app.oauth_client
access_token = request.args.get('access_token').split('.')[1]
url = 'https://openapi.naver.com/v1/nid/me'
headers = {
'Authorization': 'Bearer ' + access_token
}
async with client.get(url, headers=headers) as r:
result = await r.json()
if result['resultcode']!='00':
return text('로그인에 실패했습니다.')
naverId = result['response']['id']
user = await getUserByNaverId(naverId)
if user is None:
return redirect(f'/register?access_token={access_token}')
request.ctx.session['nickname'] = user[2]
request.ctx.session['is_superuser'] = user[3]
request.ctx.session['disabled'] = user[4]
request.ctx.session['logged_in'] = True
return redirect('/game')
@template("register.html.j2")
async def register_get(request):
if request.args.get("register_failed"):
reason = request.args.get("reason")
data = {
"register_failed": True,
"reason": reason,
}
return data
return {}
async def register_post(request):
client = request.app.oauth_client
nickname = request.form.get('nickname')
access_token = request.form.get('access_token')
url = 'https://openapi.naver.com/v1/nid/me'
headers = {
'Authorization': 'Bearer ' + access_token,
}
async with client.get(url, headers=headers) as r:
result = await r.json()
if result['resultcode']!='00':
return redirect('/register?register_failed=True&reason=access_token_not_valid')
naverId = result['response']['id']
try:
await create_user(naverId, nickname)
user = await getUserByNaverId(naverId)
request.ctx.session['nickname'] = user[2]
request.ctx.session['is_superuser'] = user[3]
request.ctx.session['disabled'] = user[4]
request.ctx.session['logged_in'] = True
return redirect("/game")
except (ImproperNicknameError, NicknameDuplicateError, NicknameTooLongError) as e:
return redirect(f'/register?register_failed=True&reason={e.__class__.__name__}&access_token={access_token}')
@template('main.html.j2')
async def main(request):
return {}
@template("archive_index.html.j2")
async def archive_index(request):
async with aiosqlite.connect("sql/records.db") as DB:
cursor = await DB.execute("SELECT name FROM sqlite_master WHERE type='table';")
logs = await cursor.fetchall()
return {"logs": logs, "enumerate": enumerate,}
@template("archive.html.j2")
async def archive(request, gamelog_id):
if not gamelog_id.isalnum(): return
async with aiosqlite.connect("sql/records.db") as DB:
cursor = await DB.execute(f"SELECT * FROM {gamelog_id};")
log = await cursor.fetchall()
return {"log": log}
@template("about.html.j2")
async def about(request):
return {}