# HG changeset patch # User Marcin Kuzminski # Date 1274485627 -7200 # Node ID b68b2246e5a67b0a72e6ae4228999d9b28484509 # Parent d8eb7ee27b4cd8b2ab72588d6ec7e15842afa33f Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user. Removed login form from admin. diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/admin.py --- a/pylons_app/controllers/admin.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/admin.py Sat May 22 01:47:07 2010 +0200 @@ -4,70 +4,36 @@ from pylons import request, response, session, tmpl_context as c, url, app_globals as g from pylons.controllers.util import abort, redirect from pylons_app.lib.base import BaseController, render -from pylons_app.lib import auth -from pylons_app.model.forms import LoginForm -import formencode -import formencode.htmlfill as htmlfill from pylons_app.model import meta -from pylons_app.model.db import Users, UserLogs +from pylons_app.model.db import UserLogs from webhelpers.paginate import Page from pylons_app.lib.utils import check_repo, invalidate_cache +from pylons_app.lib.auth import LoginRequired log = logging.getLogger(__name__) class AdminController(BaseController): - + + @LoginRequired() def __before__(self): - c.admin_user = session.get('admin_user', False) - c.admin_username = session.get('admin_username') + user = session['hg_app_user'] + c.admin_user = user.is_admin + c.admin_username = user.username + super(AdminController, self).__before__() def index(self): - # Return a rendered template - if request.POST: - #import Login Form validator class - login_form = LoginForm() - - try: - c.form_result = login_form.to_python(dict(request.params)) - if auth.admin_auth(c.form_result['username'], c.form_result['password']): - session['admin_user'] = True - session['admin_username'] = c.form_result['username'] - session.save() - return redirect(url('admin_home')) - else: - raise formencode.Invalid('Login Error', None, None, - error_dict={'username':'invalid login', - 'password':'invalid password'}) - - except formencode.Invalid, error: - c.form_result = error.value - c.form_errors = error.error_dict or {} - html = render('admin/admin.html') - - return htmlfill.render( - html, - defaults=c.form_result, - encoding="UTF-8" - ) - if c.admin_user: - sa = meta.Session - - users_log = sa.query(UserLogs)\ - .order_by(UserLogs.action_date.desc()) - p = int(request.params.get('page', 1)) - c.users_log = Page(users_log, page=p, items_per_page=10) - c.log_data = render('admin/admin_log.html') - if request.params.get('partial'): - return c.log_data + sa = meta.Session + + users_log = sa.query(UserLogs)\ + .order_by(UserLogs.action_date.desc()) + p = int(request.params.get('page', 1)) + c.users_log = Page(users_log, page=p, items_per_page=10) + c.log_data = render('admin/admin_log.html') + if request.params.get('partial'): + return c.log_data return render('admin/admin.html') - def hgrc(self, dirname): - filename = os.path.join(dirname, '.hg', 'hgrc') - return filename - def add_repo(self, new_repo): - - #extra check it can be add since it's the command if new_repo == '_admin': c.msg = 'DENIED' diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/branches.py --- a/pylons_app/controllers/branches.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/branches.py Sat May 22 01:47:07 2010 +0200 @@ -6,14 +6,16 @@ from pylons_app.lib.base import BaseController, render from pylons_app.lib.utils import get_repo_slug from pylons_app.model.hg_model import HgModel +from pylons_app.lib.auth import LoginRequired log = logging.getLogger(__name__) class BranchesController(BaseController): + + @LoginRequired() def __before__(self): - c.repos_prefix = config['repos_name'] - c.repo_name = get_repo_slug(request) - + super(BranchesController, self).__before__() + def index(self): hg_model = HgModel() c.repo_info = hg_model.get_repo(c.repo_name) diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/error.py --- a/pylons_app/controllers/error.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/error.py Sat May 22 01:47:07 2010 +0200 @@ -20,12 +20,6 @@ This behaviour can be altered by changing the parameters to the ErrorDocuments middleware in your config/middleware.py file. """ -# - def __before__(self): - c.repos_prefix = config['repos_name'] - - c.repo_name = request.environ['pylons.original_request']\ - .environ.get('PATH_INFO').split('/')[1] def document(self): resp = request.environ.get('pylons.original_response') diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/files.py --- a/pylons_app/controllers/files.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/files.py Sat May 22 01:47:07 2010 +0200 @@ -8,13 +8,15 @@ from pylons_app.model.hg_model import HgModel from vcs.utils import diffs as differ from vcs.exceptions import RepositoryError, ChangesetError +from pylons_app.lib.auth import LoginRequired log = logging.getLogger(__name__) class FilesController(BaseController): + + @LoginRequired() def __before__(self): - c.repos_prefix = config['repos_name'] - c.repo_name = get_repo_slug(request) + super(FilesController, self).__before__() def index(self, repo_name, revision, f_path): hg_model = HgModel() @@ -70,6 +72,17 @@ % f_path.split('/')[-1] return file_node.content + def annotate(self, repo_name, revision, f_path): + hg_model = HgModel() + c.repo = hg_model.get_repo(c.repo_name) + cs = c.repo.get_changeset(revision) + c.file = cs.get_node(f_path) + c.file_msg = cs.get_file_message(f_path) + c.cur_rev = cs.raw_id + c.f_path = f_path + c.annotate = cs.get_file_annotate(f_path) + return render('files/files_annotate.html') + def archivefile(self, repo_name, revision, fileformat): return '%s %s %s' % (repo_name, revision, fileformat) diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/graph.py --- a/pylons_app/controllers/graph.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/graph.py Sat May 22 01:47:07 2010 +0200 @@ -1,25 +1,27 @@ -import logging +from mercurial.graphmod import revisions as graph_rev, colored, CHANGESET +from mercurial.node import short from pylons import request, response, session, tmpl_context as c, url, config, \ app_globals as g from pylons.controllers.util import abort, redirect +from pylons_app.lib.auth import LoginRequired from pylons_app.lib.base import BaseController, render +from pylons_app.lib.filters import age as _age, person from pylons_app.lib.utils import get_repo_slug from pylons_app.model.hg_model import HgModel +from simplejson import dumps +from webhelpers.paginate import Page +import logging -from mercurial.graphmod import revisions as graph_rev, colored, CHANGESET -from pylons_app.lib.filters import age as _age, person -from simplejson import dumps -from mercurial.node import short -from webhelpers.paginate import Page log = logging.getLogger(__name__) class GraphController(BaseController): + + @LoginRequired() def __before__(self): - c.repos_prefix = config['repos_name'] - c.repo_name = get_repo_slug(request) + super(GraphController, self).__before__() def index(self): # Return a rendered template diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/hg.py --- a/pylons_app/controllers/hg.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/hg.py Sat May 22 01:47:07 2010 +0200 @@ -6,13 +6,14 @@ from pylons_app.lib.base import BaseController, render from pylons_app.lib.utils import get_repo_slug from pylons_app.model.hg_model import HgModel +from pylons_app.lib.auth import LoginRequired log = logging.getLogger(__name__) class HgController(BaseController): + @LoginRequired() def __before__(self): - c.repos_prefix = config['repos_name'] - c.repo_name = get_repo_slug(request) + super(HgController, self).__before__() def index(self): c.current_sort = request.GET.get('sort', 'name') diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/repos.py --- a/pylons_app/controllers/repos.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/repos.py Sat May 22 01:47:07 2010 +0200 @@ -5,7 +5,6 @@ from pylons_app.lib import auth from pylons_app.lib.base import BaseController, render from pylons_app.model.db import Users, UserLogs -from pylons_app.lib.auth import authenticate from pylons_app.model.hg_model import HgModel from operator import itemgetter import shutil @@ -18,10 +17,10 @@ # file has a resource setup: # map.resource('repo', 'repos') - @authenticate def __before__(self): c.admin_user = session.get('admin_user') c.admin_username = session.get('admin_username') + super(ReposController, self).__before__() def index(self, format='html'): """GET /repos: All items in the collection""" diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/shortlog.py --- a/pylons_app/controllers/shortlog.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/shortlog.py Sat May 22 01:47:07 2010 +0200 @@ -7,13 +7,15 @@ from pylons_app.lib.utils import get_repo_slug from pylons_app.model.hg_model import HgModel from webhelpers.paginate import Page +from pylons_app.lib.auth import LoginRequired log = logging.getLogger(__name__) class ShortlogController(BaseController): + + @LoginRequired() def __before__(self): - c.repos_prefix = config['repos_name'] - c.repo_name = get_repo_slug(request) + super(ShortlogController, self).__before__() def index(self): hg_model = HgModel() diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/summary.py --- a/pylons_app/controllers/summary.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/summary.py Sat May 22 01:47:07 2010 +0200 @@ -1,17 +1,20 @@ -import logging - -from pylons import tmpl_context as c, app_globals as g, session, request, config, url +from pylons import tmpl_context as c, app_globals as g, session, request, config, \ + url from pylons.controllers.util import abort, redirect - +from pylons_app.lib.auth import LoginRequired from pylons_app.lib.base import BaseController, render from pylons_app.lib.utils import get_repo_slug from pylons_app.model.hg_model import HgModel +import logging + + log = logging.getLogger(__name__) class SummaryController(BaseController): + + @LoginRequired() def __before__(self): - c.repos_prefix = config['repos_name'] - c.repo_name = get_repo_slug(request) + super(SummaryController, self).__before__() def index(self): hg_model = HgModel() @@ -19,13 +22,14 @@ c.repo_changesets = c.repo_info.get_changesets(10) e = request.environ - uri = r'%(protocol)s://%(user)s@%(host)s/%(repo_name)s' % { + #BUG: protocol doesnt show https + uri = u'%(protocol)s://%(user)s@%(host)s/%(repo_name)s' % { 'protocol': e.get('wsgi.url_scheme'), - 'user':e.get('REMOTE_USER'), + 'user':str(c.hg_app_user.username), 'host':e.get('HTTP_HOST'), 'repo_name':c.repo_name, } - c.clone_repo_url = url(uri) + c.clone_repo_url = uri c.repo_tags = c.repo_info.tags[:10] c.repo_branches = c.repo_info.branches[:10] - return render('/summary.html') + return render('summary/summary.html') diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/tags.py --- a/pylons_app/controllers/tags.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/tags.py Sat May 22 01:47:07 2010 +0200 @@ -6,13 +6,15 @@ from pylons_app.lib.base import BaseController, render from pylons_app.lib.utils import get_repo_slug from pylons_app.model.hg_model import HgModel +from pylons_app.lib.auth import LoginRequired log = logging.getLogger(__name__) class TagsController(BaseController): + + @LoginRequired() def __before__(self): - c.repos_prefix = config['repos_name'] - c.repo_name = get_repo_slug(request) + super(TagsController, self).__before__() def index(self): hg_model = HgModel() diff -r d8eb7ee27b4c -r b68b2246e5a6 pylons_app/controllers/users.py --- a/pylons_app/controllers/users.py Sat May 22 01:43:42 2010 +0200 +++ b/pylons_app/controllers/users.py Sat May 22 01:47:07 2010 +0200 @@ -6,7 +6,6 @@ from pylons_app.lib.base import BaseController, render from formencode import htmlfill from pylons_app.model.db import Users, UserLogs -from pylons_app.lib.auth import authenticate import crypt log = logging.getLogger(__name__) @@ -17,10 +16,10 @@ # file has a resource setup: # map.resource('user', 'users') - @authenticate def __before__(self): c.admin_user = session.get('admin_user') c.admin_username = session.get('admin_username') + super(UsersController, self).__before__() def index(self, format='html'): """GET /users: All items in the collection"""