46
46
from ivle.auth import AuthError
48
47
import ivle.database
50
def authenticate(store, login, password):
49
def authenticate(config, store, login, password):
51
50
"""Determines whether a particular login/password combination is
52
51
valid for the given database. The password is in cleartext.
74
73
user = ivle.database.User.get_by_login(store, login)
76
for modname, m in auth_modules:
75
for modname, m in get_auth_modules(config):
77
76
# May raise an AuthError - allow to propagate
78
77
auth_result = m(store, login, password, user)
79
78
if auth_result is None:
130
129
raise AuthError()
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))
131
def get_auth_modules(config):
132
"""Get the auth modules defined in the configuration.
134
Returns a list of (name, function object)s. This list consists of
135
simple_db_auth, plus the "auth" functions of all the plugin auth modules.
139
# Allow imports to get files from this directory.
140
# Get the directory that this module (authenticate) is in
141
authpath = os.path.split(sys.modules[__name__].__file__)[0]
143
sys.path.append(authpath)
145
auth_modules = [("simple_db_auth", simple_db_auth)]
146
for modname in config['auth']['modules']:
148
mod = __import__(modname)
150
raise AuthError("Internal error: Can't import auth module %s"
153
# If auth_modules is "", we may get an empty string - ignore
157
except AttributeError:
158
raise AuthError("Internal error: Auth module %s has no 'auth' "
159
"function" % repr(modname))
160
auth_modules.append((modname, authfunc))
162
# Restore the old path, without this directory in it.