~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/auth/authenticate.py

  • Committer: William Grant
  • Date: 2012-06-28 01:52:02 UTC
  • Revision ID: me@williamgrant.id.au-20120628015202-f6ru7o367gt6nvgz
Hah

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
import os
45
45
 
46
46
from ivle.auth import AuthError
47
 
import ivle.conf
48
47
import ivle.database
49
48
 
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.
53
52
 
73
72
 
74
73
    user = ivle.database.User.get_by_login(store, login)
75
74
 
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:
94
93
 
95
94
            # Don't allow login if it is expired or disabled.
96
95
            if auth_result.state == 'disabled' or auth_result.account_expired:
97
 
                raise AuthError("Account is not valid.")
 
96
                raise AuthError(
 
97
                    "Your account is disabled. Please contact an "
 
98
                    "administrator if you believe this to be in error.")
98
99
 
99
100
            return auth_result
100
101
        else:
129
130
    else:
130
131
        raise AuthError()
131
132
 
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]
135
 
# Add it to sys.path
136
 
sys.path.append(authpath)
137
 
 
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.
141
 
 
142
 
auth_modules = [("simple_db_auth", simple_db_auth)]
143
 
for modname in ivle.conf.auth_modules.split(','):
144
 
    try:
145
 
        mod = __import__(modname)
146
 
    except ImportError:
147
 
        raise AuthError("Internal error: Can't import auth module %s"
148
 
            % repr(modname))
149
 
    except ValueError:
150
 
        # If auth_modules is "", we may get an empty string - ignore
151
 
        continue
152
 
    try:
153
 
        authfunc = mod.auth
154
 
    except AttributeError:
155
 
        raise AuthError("Internal error: Auth module %s has no 'auth' "
156
 
            "function" % repr(modname))
157
 
    auth_modules.append((modname, authfunc))
 
133
def get_auth_modules(config):
 
134
    """Get the auth modules defined in the configuration.
 
135
 
 
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.
 
138
    """
 
139
 
 
140
    oldpath = sys.path
 
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]
 
144
    # Add it to sys.path
 
145
    sys.path.append(authpath)
 
146
 
 
147
    auth_modules = [("simple_db_auth", simple_db_auth)]
 
148
    for modname in config['auth']['modules']:
 
149
        try:
 
150
            mod = __import__(modname)
 
151
        except ImportError:
 
152
            raise AuthError("Internal error: Can't import auth module %s"
 
153
                % repr(modname))
 
154
        except ValueError:
 
155
            # If auth_modules is "", we may get an empty string - ignore
 
156
            continue
 
157
        try:
 
158
            authfunc = mod.auth
 
159
        except AttributeError:
 
160
            raise AuthError("Internal error: Auth module %s has no 'auth' "
 
161
                "function" % repr(modname))
 
162
        auth_modules.append((modname, authfunc))
 
163
 
 
164
    # Restore the old path, without this directory in it.
 
165
    sys.path = oldpath
 
166
    return auth_modules