X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/chopwood/blobdiff_plain/a2916c0635fec5b45ad742904db9f5769b48f53d..eaac44f3ca7ffee0dd428830aa40e0917df122fc:/httpauth.py?ds=inline diff --git a/httpauth.py b/httpauth.py index 22648dd..13ba0d1 100644 --- a/httpauth.py +++ b/httpauth.py @@ -175,6 +175,7 @@ LOGIN_REASONS = { 'EXPIRED': 'session timed out', 'BADTAG': 'incorrect tag', 'NOUSER': 'unknown user name', + 'LOGOUT': 'explicitly logged out', None: None } @@ -201,6 +202,9 @@ def check_auth(token, nonce = None): global NONCE + ## If the token has been explicitly clobbered, then we're logged out. + if token == 'logged-out': raise AuthenticationFailed, 'LOGOUT' + ## Parse the token. bits = token.split('.', 3) if len(bits) != 4: raise AuthenticationFailed, 'BADTOKEN' @@ -227,6 +231,16 @@ def check_auth(token, nonce = None): ## Done. return user +def bake_cookie(value): + """ + Return a properly baked authentication-token cookie with the given VALUE. + """ + return CGI.cookie('chpwd-token', value, + httponly = True, + secure = CGI.SSLP, + path = CFG.SCRIPT_NAME, + max_age = (CFG.SECRETLIFE - CFG.SECRETFRESH)) + ###-------------------------------------------------------------------------- ### Authentication commands. @@ -257,11 +271,7 @@ def cmd_auth(u, pw): CGI.redirect(CGI.action('login', why = 'AUTHFAIL')) else: t = mint_token(u) - CGI.redirect(CGI.action('list'), - set_cookie = CGI.cookie('chpwd-token', t, - httponly = True, - path = CFG.SCRIPT_NAME, - max_age = (CFG.SECRETLIFE - - CFG.SECRETFRESH))) + CGI.redirect(CGI.action('list', u), + set_cookie = bake_cookie(t)) ###----- That's all, folks --------------------------------------------------