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:
91
90
# We just got ourselves some user details from an external
92
91
# source. Put them in the DB.
93
92
store.add(auth_result)
94
# Don't allow login if it is expired or disabled.
95
if auth_result.state == 'disabled' or auth_result.account_expired:
96
raise AuthError("Account is not valid.")
97
100
raise AuthError("Internal error: "
126
129
raise AuthError()
128
# Allow imports to get files from this directory.
129
# Get the directory that this module (authenticate) is in
130
authpath = os.path.split(sys.modules[__name__].__file__)[0]
132
sys.path.append(authpath)
134
# Create a global variable "auth_modules", a list of (name, function object)s.
135
# This list consists of simple_db_auth, plus the "auth" functions of all the
136
# plugin auth modules.
138
auth_modules = [("simple_db_auth", simple_db_auth)]
139
for modname in ivle.conf.auth_modules.split(','):
141
mod = __import__(modname)
143
raise AuthError("Internal error: Can't import auth module %s"
146
# If auth_modules is "", we may get an empty string - ignore
150
except AttributeError:
151
raise AuthError("Internal error: Auth module %s has no 'auth' "
152
"function" % repr(modname))
153
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.