Skip to content
This repository was archived by the owner on Apr 9, 2020. It is now read-only.

Commit 4ccac14

Browse files
takidogabc873693
authored andcommitted
修復cahce login 的問題#74 (#75)
* Fix cache login do not use cache cookie * Remove extra code ,make clarify * Add some comment Why use"red_auth" not "red" ? Because "red" return data is bytes , I think get data from redis should be able to use without any decode or encode action.
1 parent cc0f15c commit 4ccac14

File tree

2 files changed

+25
-18
lines changed

2 files changed

+25
-18
lines changed

src/kuas_api/kuas/cache.py

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import requests
88
from werkzeug.contrib.cache import SimpleCache
99

10-
1110
import kuas_api.kuas.ap as ap
1211
import kuas_api.kuas.leave as leave
1312
import kuas_api.kuas.parse as parse
@@ -31,12 +30,16 @@
3130
AP_GUEST_PASSWORD = "123"
3231

3332
s_cache = SimpleCache()
34-
red = redis.StrictRedis.from_url(url= os.environ['REDIS_URL'],db=2)
33+
red = redis.StrictRedis.from_url(url=os.environ['REDIS_URL'], db=2)
3534
SECRET_KEY = red.get("SECRET_KEY") if red.exists(
3635
"SECRET_KEY") else str(os.urandom(32))
36+
# Only use in cache.login , get encoded data from redis.
37+
# get data from redis should be able use without any decode or encode action.
38+
red_auth = redis.StrictRedis.from_url(
39+
url=os.environ['REDIS_URL'], db=2, charset="utf-8", decode_responses=True)
3740

3841

39-
def dump_session_cookies(session,is_login):
42+
def dump_session_cookies(session, is_login):
4043
"""Dumps cookies to list
4144
"""
4245

@@ -47,13 +50,17 @@ def dump_session_cookies(session,is_login):
4750
'domain': c.domain,
4851
'value': c.value})
4952

50-
return {'is_login': is_login, 'cookies':cookies}
53+
return {'is_login': is_login, 'cookies': cookies}
5154

5255

5356
def login(username, password):
5457
session = requests.Session()
5558
is_login = {}
5659

60+
if red_auth.exists(username):
61+
user_redis_cookies = red_auth.get(username)
62+
return json.loads(user_redis_cookies)
63+
5764
# AP Login
5865
try:
5966
is_login["ap"] = ap.login(session, username, password)
@@ -72,15 +79,15 @@ def login(username, password):
7279
is_login["leave"] = leave.login(session, username, password)
7380
except:
7481
is_login["leave"] = False
75-
if is_login["ap"]:
76-
return dump_session_cookies(session,is_login)
82+
if is_login["ap"]:
83+
return dump_session_cookies(session, is_login)
7784
else:
78-
return False
85+
return False
7986

8087

8188
def ap_query(session, qid=None, args=None,
8289
username=None, expire=AP_QUERY_EXPIRE):
83-
ap_query_key_tag = str(username) + str(args) + str(SECRET_KEY)
90+
ap_query_key_tag = str(username) + str(args) + str(SECRET_KEY)
8491
ap_query_key = qid + \
8592
hashlib.sha512(
8693
bytes(ap_query_key_tag, "utf-8")).hexdigest()
@@ -95,6 +102,7 @@ def ap_query(session, qid=None, args=None,
95102

96103
return ap_query_content
97104

105+
98106
def leave_query(session, year="102", semester="2"):
99107
return leave.getList(session, year, semester)
100108

@@ -194,31 +202,30 @@ def get_semester_list():
194202
"""
195203

196204
s = requests.Session()
197-
ap.login(s,AP_GUEST_ACCOUNT, AP_GUEST_PASSWORD)
205+
ap.login(s, AP_GUEST_ACCOUNT, AP_GUEST_PASSWORD)
198206

199207
content = ap_query(s, "ag304_01")
200-
if len(content)<3000:
208+
if len(content) < 3000:
201209
return False
202210
root = etree.HTML(content)
203211

204212
#options = root.xpath("id('yms_yms')/option")
205213
try:
206214
options = map(lambda x: {"value": x.values()[0].replace("#", ","),
207-
"selected": 1 if "selected" in x.values() else 0,
208-
"text": x.text},
209-
root.xpath("id('yms_yms')/option")
210-
)
215+
"selected": 1 if "selected" in x.values() else 0,
216+
"text": x.text},
217+
root.xpath("id('yms_yms')/option")
218+
)
211219
except:
212220
return False
213-
221+
214222
options = list(options)
215223

216224
return options
217225

218226

219-
220227
if __name__ == "__main__":
221228
s = requests.Session()
222229
is_login = login(s, "guest", "123")
223230

224-
print(is_login)
231+
print(is_login)

src/kuas_api/modules/stateless_auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def generate_auth_token(username, cookies, expiration=600):
7070
"""
7171
s = Serializer(DIRTY_SECRET_KEY, expires_in=expiration)
7272

73-
red.set(username, json.dumps(cookies))
73+
red.set(username, json.dumps(cookies), ex=600)
7474

7575
return s.dumps({"sid": username})
7676

0 commit comments

Comments
 (0)