46
46
from ivle.auth import AuthError
47
48
import ivle.database
49
def authenticate(config, store, login, password):
50
def authenticate(store, login, password):
50
51
"""Determines whether a particular login/password combination is
51
52
valid for the given database. The password is in cleartext.
73
74
user = ivle.database.User.get_by_login(store, login)
75
for modname, m in get_auth_modules(config):
76
for modname, m in auth_modules:
76
77
# May raise an AuthError - allow to propagate
77
78
auth_result = m(store, login, password, user)
78
79
if auth_result is None:
94
95
# Don't allow login if it is expired or disabled.
95
96
if auth_result.state == 'disabled' or auth_result.account_expired:
97
"Your account is disabled. Please contact an "
98
"administrator if you believe this to be in error.")
97
raise AuthError("Account is not valid.")
100
99
return auth_result
131
130
raise AuthError()
133
def get_auth_modules(config):
134
"""Get the auth modules defined in the configuration.
136
Returns a list of (name, function object)s. This list consists of
137
simple_db_auth, plus the "auth" functions of all the plugin auth modules.
141
# Allow imports to get files from this directory.
142
# Get the directory that this module (authenticate) is in
143
authpath = os.path.split(sys.modules[__name__].__file__)[0]
145
sys.path.append(authpath)
147
auth_modules = [("simple_db_auth", simple_db_auth)]
148
for modname in config['auth']['modules']:
150
mod = __import__(modname)
152
raise AuthError("Internal error: Can't import auth module %s"
155
# If auth_modules is "", we may get an empty string - ignore
159
except AttributeError:
160
raise AuthError("Internal error: Auth module %s has no 'auth' "
161
"function" % repr(modname))
162
auth_modules.append((modname, authfunc))
164
# Restore the old path, without this directory in it.
132
# Allow imports to get files from this directory.
133
# Get the directory that this module (authenticate) is in
134
authpath = os.path.split(sys.modules[__name__].__file__)[0]
136
sys.path.append(authpath)
138
# Create a global variable "auth_modules", a list of (name, function object)s.
139
# This list consists of simple_db_auth, plus the "auth" functions of all the
140
# plugin auth modules.
142
auth_modules = [("simple_db_auth", simple_db_auth)]
143
for modname in ivle.conf.auth_modules.split(','):
145
mod = __import__(modname)
147
raise AuthError("Internal error: Can't import auth module %s"
150
# If auth_modules is "", we may get an empty string - ignore
154
except AttributeError:
155
raise AuthError("Internal error: Auth module %s has no 'auth' "
156
"function" % repr(modname))
157
auth_modules.append((modname, authfunc))