Ticket #131: remember-me-r3260.diff

File remember-me-r3260.diff, 2.7 kB (added by jasminlapalme@mac.com, 9 months ago)

Patch for remember-me for r3260 and Trac 0.11

  • acct_mgr/web_ui.py

    old new  
    1111 
    1212import random 
    1313import string 
     14import time 
    1415 
    1516from trac import perm, util 
    1617from trac.core import * 
     
    372373            return 'login.html', data, None 
    373374        return auth.LoginModule.process_request(self, req) 
    374375 
     376        def _get_name_for_cookie(self, req, cookie): 
     377                name = auth.LoginModule._get_name_for_cookie(self, req, cookie) 
     378                if name and not req.incookie.has_key('trac_auth_session'): 
     379                        self.env.log.debug('Updating auth cookie %s for user %s' % 
     380                                                                (cookie.value, name)) 
     381                        db = self.env.get_db_cnx() 
     382                        cursor = db.cursor() 
     383                        cursor.execute('UPDATE auth_cookie SET time=%s WHERE cookie=%s', 
     384                                                        (int(time.time()), cookie.value)) 
     385                        req.outcookie['trac_auth'] = cookie.value 
     386                        req.outcookie['trac_auth']['path'] = self.env.href() 
     387                        req.outcookie['trac_auth']['expires'] = 86400 * 30 
     388                        req.outcookie['trac_auth_session'] = '1' 
     389                        req.outcookie['trac_auth_session']['path'] = self.env.href() 
     390                return name 
     391 
    375392    def _do_login(self, req): 
    376393        if not req.remote_user: 
    377394            req.redirect(self.env.abs_href()) 
    378         return auth.LoginModule._do_login(self, req) 
     395        res = auth.LoginModule._do_login(self, req) 
     396        if req.args.get('rememberme', '0') == '1': 
     397                req.outcookie['trac_auth']['expires'] = 86400 * 30 
     398        return res 
    379399 
     400        def _do_logout(self, req): 
     401                """Log the user out. 
     402                 
     403                Simply deletes the corresponding record from the auth_cookie table. 
     404                """ 
     405                if req.authname == 'anonymous': 
     406                        # Not logged in 
     407                        return 
     408 
     409                # While deleting this cookie we also take the opportunity to delete 
     410                # cookies older than 30 days 
     411                db = self.env.get_db_cnx() 
     412                cursor = db.cursor() 
     413                cursor.execute("DELETE FROM auth_cookie WHERE name=%s OR time < %s", 
     414                                                (req.authname, int(time.time()) - 86400 * 30)) 
     415                db.commit() 
     416                self._expire_cookie(req) 
     417 
    380418    def _remote_user(self, req): 
    381419        user = req.args.get('user') 
    382420        password = req.args.get('password') 
  • acct_mgr/templates/login.html

    old new  
    3636          <label for="password">Password:</label> 
    3737          <input type="password" id="password" name="password" class="textwidget" size="20" /> 
    3838        </div> 
     39        <div> 
     40          <input type="checkbox" id="rememberme" name="rememberme" value="1" /> 
     41          <label for="rememberme">Remember me</label> 
     42        </div> 
    3943        <input type="submit" value="Login" /> 
    4044 
    4145        <p py:if="reset_password_enabled">