-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathsession_auth.py
More file actions
71 lines (64 loc) · 2.03 KB
/
session_auth.py
File metadata and controls
71 lines (64 loc) · 2.03 KB
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
#!/usr/bin/env python3
"""
Definition of class SessionAuth
"""
import base64
from uuid import uuid4
from typing import TypeVar
from .auth import Auth
from models.user import User
class SessionAuth(Auth):
""" Implement Session Authorization protocol methods
"""
user_id_by_session_id = {}
def create_session(self, user_id: str = None) -> str:
"""
Creates a Session ID for a user with id user_id
Args:
user_id (str): user's user id
Return:
None is user_id is None or not a string
Session ID in string format
"""
if user_id is None or not isinstance(user_id, str):
return None
id = uuid4()
self.user_id_by_session_id[str(id)] = user_id
return str(id)
def user_id_for_session_id(self, session_id: str = None) -> str:
"""
Returns a user ID based on a session ID
Args:
session_id (str): session ID
Return:
user id or None if session_id is None or not a string
"""
if session_id is None or not isinstance(session_id, str):
return None
return self.user_id_by_session_id.get(session_id)
def current_user(self, request=None):
"""
Return a user instance based on a cookie value
Args:
request : request object containing cookie
Return:
User instance
"""
session_cookie = self.session_cookie(request)
user_id = self.user_id_for_session_id(session_cookie)
user = User.get(user_id)
return user
def destroy_session(self, request=None):
"""
Deletes a user session
"""
if request is None:
return False
session_cookie = self.session_cookie(request)
if session_cookie is None:
return False
user_id = self.user_id_for_session_id(session_cookie)
if user_id is None:
return False
del self.user_id_by_session_id[session_cookie]
return True