-
Notifications
You must be signed in to change notification settings - Fork 84
/
Copy pathaccounts.py
79 lines (61 loc) · 2.33 KB
/
accounts.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
# -*- coding: utf-8 -*-
from __future__ import absolute_import
import shelve
import os
import web
import uuid
import hashlib
import json
from datetime import datetime
_curdir = os.path.dirname(__file__)
_session = shelve.open(os.path.join(_curdir, 'session'))
_accounts = shelve.open(os.path.join(_curdir, 'accounts'))
def _save_session(username):
sessionid = str(uuid.uuid1())
web.setcookie('sessionid', sessionid, 60 * 60 * 24 * 365)
_session[sessionid] = web.storage(username=username, createtime=datetime.now())
class login(object):
def POST(self, username, password):
password = hashlib.sha1(password).hexdigest()
if username in _accounts: # 账户已存在
account = _accounts[username]
if account.password != password: # 登录失败
return json.dumps(dict(code=401, message='password invalid'))
else: # 登录成功
_save_session(username)
return json.dumps(dict(code=200, message='login ok'))
else: # 账户不存在,自动注册
_accounts[username] = web.Storage(password=password)
_save_session(username)
return json.dumps(dict(code=200, message='register ok'))
class logout(object):
def POST(self):
sessionid = web.cookies('sessionid')
if not sessionid:
return json.dumps(dict(code=400, message='invalid session'))
web.setcookie('sessionid', sessionid, -1)
del _session[sessionid]
return json.dumps(dict(code=200, message='logout ok'))
class userinfo(object):
def GET(self):
sessionid = web.cookies('sessionid')
if not sessionid:
return json.dumps(dict(code=400, message='invalid session'))
username = _session[sessionid]
account = _accounts[username].copy()
del account['password']
return json.dumps(dict(code=200, message='ok', data=account))
def POST(self):
sessionid = web.cookies('sessionid')
if not sessionid:
return json.dumps(dict(code=400, message='invalid session'))
username = _session[sessionid]
account = _accounts[username]
account.update(web.data())
urls = ["/login", login,
"/logout", logout,
"/userinfo", userinfo
]
def __del__():
_session.close()
_accounts.close()