-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathUser.py
More file actions
124 lines (92 loc) · 3.26 KB
/
Copy pathUser.py
File metadata and controls
124 lines (92 loc) · 3.26 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
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
"""The basic User class."""
from time import time
from MiscUtils.Funcs import uniqueId
class User:
"""The base class for a UserKit User."""
# region Init
def __init__(self, manager=None, name=None, password=None):
self._creationTime = time()
self._manager = None
self._name = None
self._password = None
self._isActive = False
self._externalId = None
if name is not None:
self.setName(name)
if manager is not None:
self.setManager(manager)
if password is not None:
self.setPassword(password)
def __str__(self):
return self.name()
# endregion Init
# region Attributes
def manager(self):
return self._manager
def setManager(self, manager):
"""Set the manager, which can only be done once."""
if self._manager is not None:
raise KeyError('Manager has already been set')
from .UserManager import UserManager
if not isinstance(manager, UserManager):
raise TypeError(f'{manager} is not a UserManager object')
if manager.userForName(self.name(), None) is not None:
raise KeyError(f'There is already a user named {self._name!r}.')
self._manager = manager
def serialNum(self):
return self._serialNum
def setSerialNum(self, serialNum):
self._serialNum = serialNum
def externalId(self):
if self._externalId is None:
self._externalId = uniqueId(self)
return self._externalId
def name(self):
return self._name
def setName(self, name):
"""Set the name, which can only be done once."""
if self._name is not None:
raise KeyError('name has already been set')
self._name = name
def password(self):
return self._password
def setPassword(self, password):
self._password = password
def isActive(self):
return self._isActive
def creationTime(self):
return self._creationTime
def lastAccessTime(self):
return self._lastAccessTime
def lastLoginTime(self):
return self._lastLoginTime
# endregion Attributes
# region Log in and out
def login(self, password, fromMgr=0):
"""Return self if the login is successful and None otherwise."""
if not fromMgr:
# Our manager needs to know about this.
# So make sure we go through him.
return self.manager().login(self, password)
if password == self.password():
self._isActive = True
self._lastLoginTime = self._lastAccessTime = time()
return self
if self._isActive:
# We were already logged in, but we tried again and
# this time it failed. Logout:
self.logout()
return None
def logout(self, fromMgr=False):
if fromMgr:
self._isActive = False
self._lastLogoutTime = time()
else:
# Our manager needs to know about this.
# So make sure we go through him.
self.manager().logout(self)
# region Log in and out
# region Notifications
def wasAccessed(self):
self._lastAccessTime = time()
# endregion Notifications