Changeset 838

Show
Ignore:
Timestamp:
06/08/06 15:39:07 (2 years ago)
Author:
brad
Message:

DbAuthPlugin:

DbAuthPlugin upgrade to 0.10, added CentralDatabaseManager? for connections other than SQLite, and trac.ini options to fit to disparate db schemas

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • dbauthplugin/0.10/dbauth/auth.py

    r819 r838  
    3232    """ 
    3333 
    34     implements(IAuthenticator, INavigationContributor, ITemplateProvider, IRequestHandler) 
     34    implements(IAuthenticator, INavigationContributor, ITemplateProvider,  
     35               IRequestHandler) 
    3536 
    3637    def __init__(self): 
    3738        self.envname = get_envname(self.env) 
    38          
     39        self.users = {                         # should we have defaults here? 
     40           "table":self.env.config.get('dbauth', 'users_table'), 
     41           "envname": self.env.config.get('dbauth','users_envname_field'), 
     42           "username": self.env.config.get('dbauth','users_username_field'), 
     43           "password": self.env.config.get('dbauth','users_password_field'), 
     44           "email": self.env.config.get('dbauth','users_email_field')} 
     45        self.cookies = {                         # should we have defaults here? 
     46           "table":self.env.config.get('dbauth', 'cookies_table'), 
     47           "envname": self.env.config.get('dbauth','cookies_envname_field'), 
     48           "cookie": self.env.config.get('dbauth','cookies_cookie_field'), 
     49           "username": self.env.config.get('dbauth','cookies_username_field'), 
     50           "ipnr": self.env.config.get('dbauth','cookies_ipnr_field'), 
     51           "unixtime": self.env.config.get('dbauth','cookies_unixtime_field')} 
     52 
     53 
    3954    # IAuthenticator methods 
    4055 
     
    113128        db = get_db(self.env) 
    114129        cursor = db.cursor() 
    115         sql = """SELECT username 
    116                  FROM trac_users 
    117                  WHERE username= %s and password = %s 
    118                    AND (envname = %s or envname='all')""" 
     130        sql = "SELECT %s " \ 
     131               "FROM %s " \ 
     132               "WHERE username= %%s and password = %%s " \ 
     133               "  AND (envname = %%s or envname='all')" % \ 
     134               (self.users['username'], self.users['table']) 
    119135        cursor.execute(sql, (uid, pwd, self.envname)) 
    120136        row = cursor.fetchone()         
     
    135151        db = get_db(self.env) 
    136152        cursor = db.cursor() 
    137         cursor.execute("INSERT INTO trac_cookies " 
    138                        "(envname, cookie, username, ipnr, unixtime) " 
    139                        "VALUES (%s, %s, %s, %s, %s)", (self.envname, cookie, remote_user, 
    140                        req.remote_addr, int(time.time()))) 
     153        sql = "INSERT INTO %s " \ 
     154              "(%s, %s, %s, %s, %s) " \ 
     155              "VALUES (%%s, %%s, %%s, %%s, %%s)" % \ 
     156              (self.cookies['table'], self.cookies['envname'],  
     157               self.cookies['cookie'], self.cookies['username'],  
     158               self.cookies['ipnr'], self.cookies['unixtime']) 
     159        cursor.execute(sql, (self.envname, cookie, remote_user,  
     160                        req.remote_addr, int(time.time()))) 
    141161        db.commit() 
    142162 
     
    157177        db = get_db(self.env) 
    158178        cursor = db.cursor() 
    159         cursor.execute("DELETE FROM trac_cookies " 
    160                        "WHERE username=%s " 
    161                        "  AND envname=%s", 
    162                        (req.authname, self.envname)) 
     179        sql = "DELETE FROM %s " \ 
     180              "WHERE %s=%%s " \ 
     181              "  AND %s=%%s" % \ 
     182              (self.cookies['table'], self.cookies['username'], 
     183               self.cookies['envname']) 
     184        cursor.execute(sql, (req.authname, self.envname)) 
    163185        db.commit() 
    164186        self._expire_cookie(req) 
     
    175197        db = get_db(self.env) 
    176198        cursor = db.cursor() 
    177         cursor.execute("SELECT username FROM trac_cookies " 
    178                        "WHERE cookie=%s AND envname=%s", 
    179                            (cookie.value,self.envname)) 
     199        sql = "SELECT %s " \ 
     200               "FROM %s " \ 
     201               "WHERE %s=%%s " \ 
     202               "  AND %s=%%s" % \ 
     203               (self.cookies['username'], self.cookies['table'], 
     204                self.cookies['cookie'], self.cookies['envname']) 
     205        cursor.execute(sql, (cookie.value,self.envname))  
    180206        row = cursor.fetchone() 
    181207        if not row: 
  • dbauthplugin/0.10/dbauth/env.py

    r835 r838  
    1616 
    1717 
    18 from trac.db.sqlite_backend import * 
     18from trac.db import * 
    1919 
    2020def get_db(env): 
    2121    """Return a database connection""" 
    22     path = env.config.get('dbauth', 'database') 
    23     return SQLiteConnection(path) 
     22    return CentralDatabaseManager(env).get_connection() 
    2423 
    2524def get_envname(env): 
    2625    envroot = env.config.get('dbauth', 'envroot') 
    27     if envroot and envroot[-1] != "/": 
    28         envroot += "/" 
    29     else: 
     26    try: 
     27        if envroot[-1] != "/": 
     28            envroot += "/" 
     29    except: 
    3030        raise TracError("No 'envroot' set in global trac.ini") 
    3131    envname = env.path.replace(envroot, "") 
     
    3333 
    3434     
     35class CentralDatabaseManager(DatabaseManager): 
     36    connection_uri = Option('dbauth', 'database', 'sqlite:db/trac.db', 
     37        """Database connection 
     38        [wiki:TracEnvironment#DatabaseConnectionStrings string] for this 
     39        project""") 
     40     
  • dbauthplugin/0.10/dbauth/perm.py

    r819 r838  
    2828    implements(IPermissionGroupProvider) 
    2929 
     30    def __init__(self): 
     31        self.perms = {                         # should we have defaults here? 
     32           "table":self.env.config.get('dbauth', 'perms_table'), 
     33           "envname": self.env.config.get('dbauth','perms_envname_field'), 
     34           "username": self.env.config.get('dbauth','perms_username_field'), 
     35           "groupname": self.env.config.get('dbauth','perms_groupname_field')} 
     36 
    3037    def get_permission_groups(self, username): 
    3138        groups = ['anonymous'] 
     
    3744        cursor = db.cursor() 
    3845         
    39         cursor.execute("SELECT groupname " 
    40                        "FROM trac_permissions " 
    41                        "WHERE (envname=%s or envname='all') " 
    42                        "  AND username=%s " 
    43                        "GROUP BY groupname " 
    44                        "ORDER BY groupname", (envname,username)) 
     46        sql = "SELECT %s " \ 
     47              "FROM %s " \ 
     48              "WHERE (%s=%%s or %s='all') " \ 
     49              "  AND %s=%%s " \ 
     50              "GROUP BY %s " \ 
     51              "ORDER BY %s" % \ 
     52              (self.perms['groupname'], self.perms['table'], 
     53               self.perms['envname']. self.perms['envname'].  
     54               self.perms['username']. self.perms['groupname'].  
     55               self.perms['groupname'] ) 
     56        cursor.execute(sql, (envname,username)) 
    4557                        
    4658        # groupnames = cursor.fetchall() 
  • dbauthplugin/0.10/dbauth/userdir.py

    r819 r838  
    2525    def __init__(self): 
    2626        self.envname = get_envname(self.env) 
     27        self.perms = {                         # should we have defaults here? 
     28           "table":self.env.config.get('dbauth', 'perms_table'), 
     29           "envname": self.env.config.get('dbauth','perms_envname_field'), 
     30           "username": self.env.config.get('dbauth','perms_username_field'), 
     31           "groupname": self.env.config.get('dbauth','perms_groupname_field')} 
    2732         
    2833    # IUserDirectory methods 
     
    3136        cnx = get_db(self.env) 
    3237        cursor = cnx.cursor() 
    33         cursor.execute("SELECT username " 
    34                        "FROM trac_permissions "  
    35                        "WHERE (envname=%s or envname='all') " 
    36                        "ORDER BY username", (self.envname,)) 
    37          
     38        sql = "SELECT %s " \ 
     39              "FROM %s " \ 
     40              "WHERE (%s=%%s or %s='all') " \ 
     41              "ORDER BY %s" % \ 
     42              (self.perms['username'], self.perms['table'], 
     43               self.perms['envname'], self.perms['envname'],  
     44               self.perms['username'], ) 
     45        cursor.execute(sql, (self.envname,)) 
    3846        for username in cursor: 
    39             yield username,'','' 
     47            yield username,'',''  # FIXME: don't we have email addresses in tables now? 
    4048        cnx.close() 
    4149 
     
    4351        db = get_db(self.env) 
    4452        cursor = db.cursor() 
    45         cursor.execute("SELECT username " 
    46                        "FROM trac_permissions " 
    47                        "WHERE (envname=%s or envname='all') " 
    48                        "ORDER BY username", (self.envname,)) 
    49          
     53        sql = "SELECT %s " \ 
     54              "FROM %s " \ 
     55              "WHERE (%s=%%s or %s='all') " \ 
     56              "ORDER BY %s" % \ 
     57              (self.perms['username'], self.perms['table'], 
     58               self.perms['envname'], self.perms['envname'],  
     59               self.perms['username'], ) 
     60        cursor.execute(sql, (self.envname,)) 
    5061        for username in cursor: 
    5162            yield username[0]