changeset 2912:976e2b032650 beta

patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 09 Oct 2012 19:26:30 +0200
parents b14850a72bc2
children bfffaa9aff58
files rhodecode/lib/base.py
diffstat 1 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/base.py	Tue Oct 09 01:32:07 2012 +0200
+++ b/rhodecode/lib/base.py	Tue Oct 09 19:26:30 2012 +0200
@@ -8,8 +8,7 @@
 
 from paste.auth.basic import AuthBasicAuthenticator
 from paste.httpexceptions import HTTPUnauthorized, HTTPForbidden
-from webob.exc import HTTPClientError
-from paste.httpheaders import WWW_AUTHENTICATE
+from paste.httpheaders import WWW_AUTHENTICATE, AUTHORIZATION
 
 from pylons import config, tmpl_context as c, request, session, url
 from pylons.controllers import WSGIController
@@ -74,6 +73,23 @@
             return HTTPForbidden(headers=head)
         return HTTPUnauthorized(headers=head)
 
+    def authenticate(self, environ):
+        authorization = AUTHORIZATION(environ)
+        if not authorization:
+            return self.build_authentication()
+        (authmeth, auth) = authorization.split(' ', 1)
+        if 'basic' != authmeth.lower():
+            return self.build_authentication()
+        auth = auth.strip().decode('base64')
+        _parts = auth.split(':', 1)
+        if len(_parts) == 2:
+            username, password = _parts
+            if self.authfunc(environ, username, password):
+                return username
+        return self.build_authentication()
+
+    __call__ = authenticate
+
 
 class BaseVCSController(object):