changeset 191:b68b2246e5a6

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.
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 22 May 2010 01:47:07 +0200
parents d8eb7ee27b4c
children f191f99f59c9
files pylons_app/controllers/admin.py pylons_app/controllers/branches.py pylons_app/controllers/error.py pylons_app/controllers/files.py pylons_app/controllers/graph.py pylons_app/controllers/hg.py pylons_app/controllers/repos.py pylons_app/controllers/shortlog.py pylons_app/controllers/summary.py pylons_app/controllers/tags.py pylons_app/controllers/users.py
diffstat 11 files changed, 74 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- 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'
--- 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)
--- 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')
--- 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)
     
--- 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
--- 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')
--- 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"""
--- 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()
--- 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')
--- 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()
--- 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"""