##// END OF EJS Templates
Added LoginRequired decorator, empty User data container, hash functions
Added LoginRequired decorator, empty User data container, hash functions

File last commit:

r185:3380ca40 default
r190:d8eb7ee2 default
Show More
simplehg.py
86 lines | 3.1 KiB | text/x-python | PythonLexer
simplehg update
r178 #!/usr/bin/env python
# encoding: utf-8
#
# Copyright (c) 2010 marcink. All rights reserved.
#
"""
Created on 2010-04-28
@author: marcink
SimpleHG middleware for handling mercurial protocol request (push/clone etc.)
It's implemented with basic auth function
"""
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
simplehg update
r178 from pylons_app.lib.utils import is_mercurial
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
added version generation to pylons_app and showed it into template. Propagated baseController with some data for acces into each controller. Fixed simplehg middleware to get proper name of application
r185 realm = '%s %s' % (config['hg_app_name'], 'mercurial repository')
Changed auth basic handler only for mercurial request.
r177 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