1
# IVLE - Informatics Virtual Learning Environment
2
# Copyright (C) 2007-2008 The University of Melbourne
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
# GNU General Public License for more details.
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
# Provides a User class which stores the login details of a particular IVLE
23
# user. Objects of this class are expected to be stored in the request
28
# Similar to db.login_fields_list but contains a different set of fields.
29
# The User object does not contain all the fields.
30
user_fields_required = frozenset((
31
"login", "fullname", "role", "state", "unixid"
34
"login", "state", "unixid", "email", "nick", "fullname",
35
"role", "studentid", "acct_exp", "pass_exp"
37
# Fields not included: passhash, last_login
39
class UserException(Exception):
44
Stores the login details of a particular IVLE user.
45
Its fields correspond to (most of) the fields of the "login" table of the
47
All fields are always present, but some may be None.
49
__slots__ = user_fields_list
50
def __init__(self, **kwargs):
51
# XXX Will ignore unknown fields instead of erroring
52
if "rolenm" in kwargs and "role" not in kwargs:
53
kwargs['role'] = common.caps.Role(kwargs['rolenm'])
55
for r in user_fields_list:
57
self.__setattr__(r, kwargs[r])
58
elif r in user_fields_required:
59
# Required argument, not specified
60
raise TypeError("User: Required field %s missing" % repr(r))
65
self.nick = kwargs['fullname']
67
raise TypeError("User: Required field "
70
self.__setattr__(r, None)
72
items = ["%s=%s" % (r, repr(self.__getattribute__(r)))
73
for r in user_fields_list]
74
return "User(" + ', '.join(items) + ")"
76
def hasCap(self, capability):
77
"""Given a capability (which is a Role object), returns True if this
78
User has that capability, False otherwise.
80
return self.role.hasCap(capability)
82
def pass_expired(self):
83
"""Determines whether the pass_exp field indicates that
84
login should be denied.
86
fieldval = self.pass_exp
87
return fieldval is not None and time.localtime() > fieldval
88
def acct_expired(self):
89
"""Determines whether the acct_exp field indicates that
90
login should be denied.
92
fieldval = self.acct_exp
93
return fieldval is not None and time.localtime() > fieldval