X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=conf%2Fauth%2Fmysql_login.py;h=95b3aa660c4e93fe9cb1a2aac0e24bf499ce4278;hb=f029e903020a60684cc2fb236829818d798da757;hp=6dae938a843b42cc192870762082b81b7cce6dd1;hpb=42eb30c80234225d5ab5c543097a974014f3add7;p=matthijs%2Fprojects%2Fwipi.git diff --git a/conf/auth/mysql_login.py b/conf/auth/mysql_login.py index 6dae938..95b3aa6 100644 --- a/conf/auth/mysql_login.py +++ b/conf/auth/mysql_login.py @@ -9,12 +9,19 @@ import MySQLdb import md5 from MoinMoin import user +from MoinMoin.auth import BaseAuth, ContinueLogin -class mysql_login: - - def __init__(self, dbhost=None, dbuser=None, dbpass=None, dbname=None, dbport=None, method='mysql', verbose=False): +class mysql_login(BaseAuth): + logout_possible = True + login_inputs = ['username', 'password'] + + def __init__(self, name='mysql', dbhost=None, dbuser=None, dbpass=None, dbname=None, dbport=None, verbose=False, hint=None): """ Authenticate using credentials from a mysql database + + The name parameter should be unique among all authentication methods. + + The hint parameter is a snippet of HTML that is displayed below the login form. """ self.verbose = verbose self.dbhost = dbhost @@ -22,7 +29,8 @@ class mysql_login: self.dbpass = dbpass self.dbname = dbname self.dbport = dbport - self.method = method + self.name = name + self.hint = hint def check_login(self, request, username, password): """ Checks the given username password combination. Returns the @@ -85,45 +93,47 @@ class mysql_login: return conn - def __call__(self, request, **kw): + def login(self, request, user_obj, **kw): try: - username = kw.get('name') + username = kw.get('username') password = kw.get('password') - login = kw.get('login') - user_obj = kw.get('user_obj') - if self.verbose: request.log("mysql_login: got name=%r login=%r" % (username, login)) - - # Only handle login - if not login: - return user_obj, True + if self.verbose: request.log("mysql_login: Trying to log in, username=%r " % (username)) + + # simply continue if something else already logged in + # successfully + if user_obj and user_obj.valid: + return ContinueLogin(user_obj) - # Deny empty passwords - if not password: - return None, False + # Deny empty username or passwords + if not username or not password: + return ContinueLogin(user_obj) email = self.check_login(request, username, password) # Login incorrect if (not email): if self.verbose: request.log("mysql_login: authentication failed for %s" % (username)) - return None, True + return ContinueLogin(user_obj) if self.verbose: request.log("mysql_login: authenticated %s (email %s)" % (username, email)) - u = user.User(request, auth_username=username, auth_method=self.method, auth_attribs=('password', 'email', )) + u = user.User(request, auth_username=username, auth_method=self.name, auth_attribs=('name', 'password', 'email')) u.email = email #u.remember_me = 0 # 0 enforces cookie_lifetime config param u.create_or_update(True) - request.log(u.__repr__()) - return u, True # moin_session has to set the cookie + return ContinueLogin(u) except: import sys import traceback info = sys.exc_info() request.log("mysql_login: authentication failed due to unexpected exception, traceback follows...") request.log(''.join(traceback.format_exception(*info))) - return None, False + return ContinueLogin(user_obj) + + def login_hint(self, request): + """ Return a snippet of HTML that is displayed with the login form. """ + return self.hint # vim: set sw=4 expandtab sts=4:vim