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:
90
91
# We just got ourselves some user details from an external
91
92
# source. Put them in the DB.
92
93
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:
97
"Your account is disabled. Please contact an "
98
"administrator if you believe this to be in error.")
100
95
return auth_result
102
97
raise AuthError("Internal error: "
131
126
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.
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))