##// END OF EJS Templates
Changed auth basic handler only for mercurial request.
Changed auth basic handler only for mercurial request.

File last commit:

r177:93bd77e1 default
r177:93bd77e1 default
Show More
simplehg.py
85 lines | 3.2 KiB | text/x-python | PythonLexer
simplehg, cleanup
r111 from mercurial.hgweb import hgweb
from mercurial.hgweb.request import wsgiapplication
Changed auth basic handler only for mercurial request.
r177 from paste.auth.basic import AuthBasicAuthenticator
from paste.httpheaders import REMOTE_USER, AUTH_TYPE
Removed unneeded PATH_INFO manipulation, and added 404 codes on bad repositories paths
r124 from pylons.controllers.util import abort
Changed auth basic handler only for mercurial request.
r177 from pylons_app.lib.auth import authfunc
from pylons_app.lib.utils import make_ui, invalidate_cache
Removed unneeded PATH_INFO manipulation, and added 404 codes on bad repositories paths
r124 from webob.exc import HTTPNotFound
Changed auth basic handler only for mercurial request.
r177 import os
simplehg, cleanup
r111 class SimpleHg(object):
def __init__(self, application, config):
self.application = application
self.config = config
Changed auth basic handler only for mercurial request.
r177 #authenticate this mercurial request using
realm = '%s %s' % (config['repos_name'], 'mercurial repository')
self.authenticate = AuthBasicAuthenticator(realm, authfunc)
simplehg, cleanup
r111
def __call__(self, environ, start_response):
if not is_mercurial(environ):
return self.application(environ, start_response)
else:
Changed auth basic handler only for mercurial request.
r177 #===================================================================
# AUTHENTICATE THIS MERCURIAL REQUEST
#===================================================================
username = REMOTE_USER(environ)
if not username:
result = self.authenticate(environ)
if isinstance(result, str):
AUTH_TYPE.update(environ, 'basic')
REMOTE_USER.update(environ, result)
else:
return result.wsgi_application(environ, start_response)
Removed unneeded PATH_INFO manipulation, and added 404 codes on bad repositories paths
r124 try:
repo_name = environ['PATH_INFO'].split('/')[1]
except:
return HTTPNotFound()(environ, start_response)
#since we wrap into hgweb, just reset the path
Implemented simplehg middleware,moved make_ui functions to lib.utils
r114 environ['PATH_INFO'] = '/'
self.baseui = make_ui()
Added universal cache invalidator for two cached functions....
r171 self.basepath = self.baseui.configitems('paths')[0][1]\
.replace('*', '')
Implemented simplehg middleware,moved make_ui functions to lib.utils
r114 self.repo_path = os.path.join(self.basepath, repo_name)
Removed unneeded PATH_INFO manipulation, and added 404 codes on bad repositories paths
r124 try:
app = wsgiapplication(self._make_app)
except Exception as e:
return HTTPNotFound()(environ, start_response)
Added universal cache invalidator for two cached functions....
r171
"""we know that some change was made to repositories and we should
invalidate the cache to see the changes right away"""
invalidate_cache('full_changelog', repo_name)
Implemented simplehg middleware,moved make_ui functions to lib.utils
r114 return app(environ, start_response)
simplehg, cleanup
r111
Implemented simplehg middleware,moved make_ui functions to lib.utils
r114 def _make_app(self):
hgserve = hgweb(self.repo_path)
return self.load_web_settings(hgserve)
simplehg, cleanup
r111
Implemented simplehg middleware,moved make_ui functions to lib.utils
r114 def load_web_settings(self, hgserve):
repoui = make_ui(os.path.join(self.repo_path, '.hg', 'hgrc'), False)
#set the global ui for hgserve
hgserve.repo.ui = self.baseui
if repoui:
#set the repository based config
hgserve.repo.ui = repoui
return hgserve
Changed auth basic handler only for mercurial request.
r177
Implemented simplehg middleware,moved make_ui functions to lib.utils
r114
simplehg, cleanup
r111 def is_mercurial(environ):
"""
Returns True if request's target is mercurial server - header
``HTTP_ACCEPT`` of such request would start with ``application/mercurial``.
"""
http_accept = environ.get('HTTP_ACCEPT')
if http_accept and http_accept.startswith('application/mercurial'):
return True
return False
Implemented simplehg middleware,moved make_ui functions to lib.utils
r114