Show More
@@ -4,70 +4,36 b' import os' | |||||
4 | from pylons import request, response, session, tmpl_context as c, url, app_globals as g |
|
4 | from pylons import request, response, session, tmpl_context as c, url, app_globals as g | |
5 | from pylons.controllers.util import abort, redirect |
|
5 | from pylons.controllers.util import abort, redirect | |
6 | from pylons_app.lib.base import BaseController, render |
|
6 | from pylons_app.lib.base import BaseController, render | |
7 | from pylons_app.lib import auth |
|
|||
8 | from pylons_app.model.forms import LoginForm |
|
|||
9 | import formencode |
|
|||
10 | import formencode.htmlfill as htmlfill |
|
|||
11 | from pylons_app.model import meta |
|
7 | from pylons_app.model import meta | |
12 |
from pylons_app.model.db import |
|
8 | from pylons_app.model.db import UserLogs | |
13 | from webhelpers.paginate import Page |
|
9 | from webhelpers.paginate import Page | |
14 | from pylons_app.lib.utils import check_repo, invalidate_cache |
|
10 | from pylons_app.lib.utils import check_repo, invalidate_cache | |
|
11 | from pylons_app.lib.auth import LoginRequired | |||
15 |
|
12 | |||
16 | log = logging.getLogger(__name__) |
|
13 | log = logging.getLogger(__name__) | |
17 |
|
14 | |||
18 | class AdminController(BaseController): |
|
15 | class AdminController(BaseController): | |
19 |
|
16 | |||
|
17 | @LoginRequired() | |||
20 | def __before__(self): |
|
18 | def __before__(self): | |
21 |
|
|
19 | user = session['hg_app_user'] | |
22 |
c.admin_user |
|
20 | c.admin_user = user.is_admin | |
|
21 | c.admin_username = user.username | |||
|
22 | super(AdminController, self).__before__() | |||
23 |
|
23 | |||
24 | def index(self): |
|
24 | def index(self): | |
25 | # Return a rendered template |
|
25 | sa = meta.Session | |
26 | if request.POST: |
|
26 | ||
27 | #import Login Form validator class |
|
27 | users_log = sa.query(UserLogs)\ | |
28 | login_form = LoginForm() |
|
28 | .order_by(UserLogs.action_date.desc()) | |
29 |
|
29 | p = int(request.params.get('page', 1)) | ||
30 | try: |
|
30 | c.users_log = Page(users_log, page=p, items_per_page=10) | |
31 | c.form_result = login_form.to_python(dict(request.params)) |
|
31 | c.log_data = render('admin/admin_log.html') | |
32 | if auth.admin_auth(c.form_result['username'], c.form_result['password']): |
|
32 | if request.params.get('partial'): | |
33 | session['admin_user'] = True |
|
33 | return c.log_data | |
34 | session['admin_username'] = c.form_result['username'] |
|
|||
35 | session.save() |
|
|||
36 | return redirect(url('admin_home')) |
|
|||
37 | else: |
|
|||
38 | raise formencode.Invalid('Login Error', None, None, |
|
|||
39 | error_dict={'username':'invalid login', |
|
|||
40 | 'password':'invalid password'}) |
|
|||
41 |
|
||||
42 | except formencode.Invalid, error: |
|
|||
43 | c.form_result = error.value |
|
|||
44 | c.form_errors = error.error_dict or {} |
|
|||
45 | html = render('admin/admin.html') |
|
|||
46 |
|
||||
47 | return htmlfill.render( |
|
|||
48 | html, |
|
|||
49 | defaults=c.form_result, |
|
|||
50 | encoding="UTF-8" |
|
|||
51 | ) |
|
|||
52 | if c.admin_user: |
|
|||
53 | sa = meta.Session |
|
|||
54 |
|
||||
55 | users_log = sa.query(UserLogs)\ |
|
|||
56 | .order_by(UserLogs.action_date.desc()) |
|
|||
57 | p = int(request.params.get('page', 1)) |
|
|||
58 | c.users_log = Page(users_log, page=p, items_per_page=10) |
|
|||
59 | c.log_data = render('admin/admin_log.html') |
|
|||
60 | if request.params.get('partial'): |
|
|||
61 | return c.log_data |
|
|||
62 | return render('admin/admin.html') |
|
34 | return render('admin/admin.html') | |
63 |
|
35 | |||
64 | def hgrc(self, dirname): |
|
|||
65 | filename = os.path.join(dirname, '.hg', 'hgrc') |
|
|||
66 | return filename |
|
|||
67 |
|
||||
68 | def add_repo(self, new_repo): |
|
36 | def add_repo(self, new_repo): | |
69 |
|
||||
70 |
|
||||
71 | #extra check it can be add since it's the command |
|
37 | #extra check it can be add since it's the command | |
72 | if new_repo == '_admin': |
|
38 | if new_repo == '_admin': | |
73 | c.msg = 'DENIED' |
|
39 | c.msg = 'DENIED' |
@@ -6,14 +6,16 b' from pylons.controllers.util import abor' | |||||
6 | from pylons_app.lib.base import BaseController, render |
|
6 | from pylons_app.lib.base import BaseController, render | |
7 | from pylons_app.lib.utils import get_repo_slug |
|
7 | from pylons_app.lib.utils import get_repo_slug | |
8 | from pylons_app.model.hg_model import HgModel |
|
8 | from pylons_app.model.hg_model import HgModel | |
|
9 | from pylons_app.lib.auth import LoginRequired | |||
9 | log = logging.getLogger(__name__) |
|
10 | log = logging.getLogger(__name__) | |
10 |
|
11 | |||
11 |
|
12 | |||
12 | class BranchesController(BaseController): |
|
13 | class BranchesController(BaseController): | |
|
14 | ||||
|
15 | @LoginRequired() | |||
13 | def __before__(self): |
|
16 | def __before__(self): | |
14 | c.repos_prefix = config['repos_name'] |
|
17 | super(BranchesController, self).__before__() | |
15 | c.repo_name = get_repo_slug(request) |
|
18 | ||
16 |
|
||||
17 | def index(self): |
|
19 | def index(self): | |
18 | hg_model = HgModel() |
|
20 | hg_model = HgModel() | |
19 | c.repo_info = hg_model.get_repo(c.repo_name) |
|
21 | c.repo_info = hg_model.get_repo(c.repo_name) |
@@ -20,12 +20,6 b' class ErrorController(BaseController):' | |||||
20 | This behaviour can be altered by changing the parameters to the |
|
20 | This behaviour can be altered by changing the parameters to the | |
21 | ErrorDocuments middleware in your config/middleware.py file. |
|
21 | ErrorDocuments middleware in your config/middleware.py file. | |
22 | """ |
|
22 | """ | |
23 | # |
|
|||
24 | def __before__(self): |
|
|||
25 | c.repos_prefix = config['repos_name'] |
|
|||
26 |
|
||||
27 | c.repo_name = request.environ['pylons.original_request']\ |
|
|||
28 | .environ.get('PATH_INFO').split('/')[1] |
|
|||
29 |
|
23 | |||
30 | def document(self): |
|
24 | def document(self): | |
31 | resp = request.environ.get('pylons.original_response') |
|
25 | resp = request.environ.get('pylons.original_response') |
@@ -8,13 +8,15 b' from pylons_app.lib.utils import get_rep' | |||||
8 | from pylons_app.model.hg_model import HgModel |
|
8 | from pylons_app.model.hg_model import HgModel | |
9 | from vcs.utils import diffs as differ |
|
9 | from vcs.utils import diffs as differ | |
10 | from vcs.exceptions import RepositoryError, ChangesetError |
|
10 | from vcs.exceptions import RepositoryError, ChangesetError | |
|
11 | from pylons_app.lib.auth import LoginRequired | |||
11 |
|
12 | |||
12 | log = logging.getLogger(__name__) |
|
13 | log = logging.getLogger(__name__) | |
13 |
|
14 | |||
14 | class FilesController(BaseController): |
|
15 | class FilesController(BaseController): | |
|
16 | ||||
|
17 | @LoginRequired() | |||
15 | def __before__(self): |
|
18 | def __before__(self): | |
16 | c.repos_prefix = config['repos_name'] |
|
19 | super(FilesController, self).__before__() | |
17 | c.repo_name = get_repo_slug(request) |
|
|||
18 |
|
20 | |||
19 | def index(self, repo_name, revision, f_path): |
|
21 | def index(self, repo_name, revision, f_path): | |
20 | hg_model = HgModel() |
|
22 | hg_model = HgModel() | |
@@ -70,6 +72,17 b' class FilesController(BaseController):' | |||||
70 | % f_path.split('/')[-1] |
|
72 | % f_path.split('/')[-1] | |
71 | return file_node.content |
|
73 | return file_node.content | |
72 |
|
74 | |||
|
75 | def annotate(self, repo_name, revision, f_path): | |||
|
76 | hg_model = HgModel() | |||
|
77 | c.repo = hg_model.get_repo(c.repo_name) | |||
|
78 | cs = c.repo.get_changeset(revision) | |||
|
79 | c.file = cs.get_node(f_path) | |||
|
80 | c.file_msg = cs.get_file_message(f_path) | |||
|
81 | c.cur_rev = cs.raw_id | |||
|
82 | c.f_path = f_path | |||
|
83 | c.annotate = cs.get_file_annotate(f_path) | |||
|
84 | return render('files/files_annotate.html') | |||
|
85 | ||||
73 | def archivefile(self, repo_name, revision, fileformat): |
|
86 | def archivefile(self, repo_name, revision, fileformat): | |
74 | return '%s %s %s' % (repo_name, revision, fileformat) |
|
87 | return '%s %s %s' % (repo_name, revision, fileformat) | |
75 |
|
88 |
@@ -1,25 +1,27 b'' | |||||
1 | import logging |
|
1 | from mercurial.graphmod import revisions as graph_rev, colored, CHANGESET | |
|
2 | from mercurial.node import short | |||
2 | from pylons import request, response, session, tmpl_context as c, url, config, \ |
|
3 | from pylons import request, response, session, tmpl_context as c, url, config, \ | |
3 | app_globals as g |
|
4 | app_globals as g | |
4 | from pylons.controllers.util import abort, redirect |
|
5 | from pylons.controllers.util import abort, redirect | |
|
6 | from pylons_app.lib.auth import LoginRequired | |||
5 | from pylons_app.lib.base import BaseController, render |
|
7 | from pylons_app.lib.base import BaseController, render | |
|
8 | from pylons_app.lib.filters import age as _age, person | |||
6 | from pylons_app.lib.utils import get_repo_slug |
|
9 | from pylons_app.lib.utils import get_repo_slug | |
7 | from pylons_app.model.hg_model import HgModel |
|
10 | from pylons_app.model.hg_model import HgModel | |
|
11 | from simplejson import dumps | |||
|
12 | from webhelpers.paginate import Page | |||
|
13 | import logging | |||
8 |
|
14 | |||
9 | from mercurial.graphmod import revisions as graph_rev, colored, CHANGESET |
|
|||
10 | from pylons_app.lib.filters import age as _age, person |
|
|||
11 | from simplejson import dumps |
|
|||
12 | from mercurial.node import short |
|
|||
13 | from webhelpers.paginate import Page |
|
|||
14 |
|
15 | |||
15 |
|
16 | |||
16 |
|
17 | |||
17 | log = logging.getLogger(__name__) |
|
18 | log = logging.getLogger(__name__) | |
18 |
|
19 | |||
19 | class GraphController(BaseController): |
|
20 | class GraphController(BaseController): | |
|
21 | ||||
|
22 | @LoginRequired() | |||
20 | def __before__(self): |
|
23 | def __before__(self): | |
21 | c.repos_prefix = config['repos_name'] |
|
24 | super(GraphController, self).__before__() | |
22 | c.repo_name = get_repo_slug(request) |
|
|||
23 |
|
25 | |||
24 | def index(self): |
|
26 | def index(self): | |
25 | # Return a rendered template |
|
27 | # Return a rendered template |
@@ -6,13 +6,14 b' from pylons import tmpl_context as c, re' | |||||
6 | from pylons_app.lib.base import BaseController, render |
|
6 | from pylons_app.lib.base import BaseController, render | |
7 | from pylons_app.lib.utils import get_repo_slug |
|
7 | from pylons_app.lib.utils import get_repo_slug | |
8 | from pylons_app.model.hg_model import HgModel |
|
8 | from pylons_app.model.hg_model import HgModel | |
|
9 | from pylons_app.lib.auth import LoginRequired | |||
9 | log = logging.getLogger(__name__) |
|
10 | log = logging.getLogger(__name__) | |
10 |
|
11 | |||
11 | class HgController(BaseController): |
|
12 | class HgController(BaseController): | |
12 |
|
13 | |||
|
14 | @LoginRequired() | |||
13 | def __before__(self): |
|
15 | def __before__(self): | |
14 | c.repos_prefix = config['repos_name'] |
|
16 | super(HgController, self).__before__() | |
15 | c.repo_name = get_repo_slug(request) |
|
|||
16 |
|
17 | |||
17 | def index(self): |
|
18 | def index(self): | |
18 | c.current_sort = request.GET.get('sort', 'name') |
|
19 | c.current_sort = request.GET.get('sort', 'name') |
@@ -5,7 +5,6 b' from pylons.controllers.util import abor' | |||||
5 | from pylons_app.lib import auth |
|
5 | from pylons_app.lib import auth | |
6 | from pylons_app.lib.base import BaseController, render |
|
6 | from pylons_app.lib.base import BaseController, render | |
7 | from pylons_app.model.db import Users, UserLogs |
|
7 | from pylons_app.model.db import Users, UserLogs | |
8 | from pylons_app.lib.auth import authenticate |
|
|||
9 | from pylons_app.model.hg_model import HgModel |
|
8 | from pylons_app.model.hg_model import HgModel | |
10 | from operator import itemgetter |
|
9 | from operator import itemgetter | |
11 | import shutil |
|
10 | import shutil | |
@@ -18,10 +17,10 b' class ReposController(BaseController):' | |||||
18 | # file has a resource setup: |
|
17 | # file has a resource setup: | |
19 | # map.resource('repo', 'repos') |
|
18 | # map.resource('repo', 'repos') | |
20 |
|
19 | |||
21 | @authenticate |
|
|||
22 | def __before__(self): |
|
20 | def __before__(self): | |
23 | c.admin_user = session.get('admin_user') |
|
21 | c.admin_user = session.get('admin_user') | |
24 | c.admin_username = session.get('admin_username') |
|
22 | c.admin_username = session.get('admin_username') | |
|
23 | super(ReposController, self).__before__() | |||
25 |
|
24 | |||
26 | def index(self, format='html'): |
|
25 | def index(self, format='html'): | |
27 | """GET /repos: All items in the collection""" |
|
26 | """GET /repos: All items in the collection""" |
@@ -7,13 +7,15 b' from pylons_app.lib.base import BaseCont' | |||||
7 | from pylons_app.lib.utils import get_repo_slug |
|
7 | from pylons_app.lib.utils import get_repo_slug | |
8 | from pylons_app.model.hg_model import HgModel |
|
8 | from pylons_app.model.hg_model import HgModel | |
9 | from webhelpers.paginate import Page |
|
9 | from webhelpers.paginate import Page | |
|
10 | from pylons_app.lib.auth import LoginRequired | |||
10 |
|
11 | |||
11 | log = logging.getLogger(__name__) |
|
12 | log = logging.getLogger(__name__) | |
12 |
|
13 | |||
13 | class ShortlogController(BaseController): |
|
14 | class ShortlogController(BaseController): | |
|
15 | ||||
|
16 | @LoginRequired() | |||
14 | def __before__(self): |
|
17 | def __before__(self): | |
15 | c.repos_prefix = config['repos_name'] |
|
18 | super(ShortlogController, self).__before__() | |
16 | c.repo_name = get_repo_slug(request) |
|
|||
17 |
|
19 | |||
18 | def index(self): |
|
20 | def index(self): | |
19 | hg_model = HgModel() |
|
21 | hg_model = HgModel() |
@@ -1,17 +1,20 b'' | |||||
1 | import logging |
|
1 | from pylons import tmpl_context as c, app_globals as g, session, request, config, \ | |
2 |
|
2 | url | ||
3 | from pylons import tmpl_context as c, app_globals as g, session, request, config, url |
|
|||
4 | from pylons.controllers.util import abort, redirect |
|
3 | from pylons.controllers.util import abort, redirect | |
5 |
|
4 | from pylons_app.lib.auth import LoginRequired | ||
6 | from pylons_app.lib.base import BaseController, render |
|
5 | from pylons_app.lib.base import BaseController, render | |
7 | from pylons_app.lib.utils import get_repo_slug |
|
6 | from pylons_app.lib.utils import get_repo_slug | |
8 | from pylons_app.model.hg_model import HgModel |
|
7 | from pylons_app.model.hg_model import HgModel | |
|
8 | import logging | |||
|
9 | ||||
|
10 | ||||
9 | log = logging.getLogger(__name__) |
|
11 | log = logging.getLogger(__name__) | |
10 |
|
12 | |||
11 | class SummaryController(BaseController): |
|
13 | class SummaryController(BaseController): | |
|
14 | ||||
|
15 | @LoginRequired() | |||
12 | def __before__(self): |
|
16 | def __before__(self): | |
13 | c.repos_prefix = config['repos_name'] |
|
17 | super(SummaryController, self).__before__() | |
14 | c.repo_name = get_repo_slug(request) |
|
|||
15 |
|
18 | |||
16 | def index(self): |
|
19 | def index(self): | |
17 | hg_model = HgModel() |
|
20 | hg_model = HgModel() | |
@@ -19,13 +22,14 b' class SummaryController(BaseController):' | |||||
19 | c.repo_changesets = c.repo_info.get_changesets(10) |
|
22 | c.repo_changesets = c.repo_info.get_changesets(10) | |
20 |
|
23 | |||
21 | e = request.environ |
|
24 | e = request.environ | |
22 | uri = r'%(protocol)s://%(user)s@%(host)s/%(repo_name)s' % { |
|
25 | #BUG: protocol doesnt show https | |
|
26 | uri = u'%(protocol)s://%(user)s@%(host)s/%(repo_name)s' % { | |||
23 | 'protocol': e.get('wsgi.url_scheme'), |
|
27 | 'protocol': e.get('wsgi.url_scheme'), | |
24 |
'user': |
|
28 | 'user':str(c.hg_app_user.username), | |
25 | 'host':e.get('HTTP_HOST'), |
|
29 | 'host':e.get('HTTP_HOST'), | |
26 | 'repo_name':c.repo_name, |
|
30 | 'repo_name':c.repo_name, | |
27 | } |
|
31 | } | |
28 |
c.clone_repo_url = |
|
32 | c.clone_repo_url = uri | |
29 | c.repo_tags = c.repo_info.tags[:10] |
|
33 | c.repo_tags = c.repo_info.tags[:10] | |
30 | c.repo_branches = c.repo_info.branches[:10] |
|
34 | c.repo_branches = c.repo_info.branches[:10] | |
31 | return render('/summary.html') |
|
35 | return render('summary/summary.html') |
@@ -6,13 +6,15 b' from pylons.controllers.util import abor' | |||||
6 | from pylons_app.lib.base import BaseController, render |
|
6 | from pylons_app.lib.base import BaseController, render | |
7 | from pylons_app.lib.utils import get_repo_slug |
|
7 | from pylons_app.lib.utils import get_repo_slug | |
8 | from pylons_app.model.hg_model import HgModel |
|
8 | from pylons_app.model.hg_model import HgModel | |
|
9 | from pylons_app.lib.auth import LoginRequired | |||
9 | log = logging.getLogger(__name__) |
|
10 | log = logging.getLogger(__name__) | |
10 |
|
11 | |||
11 |
|
12 | |||
12 | class TagsController(BaseController): |
|
13 | class TagsController(BaseController): | |
|
14 | ||||
|
15 | @LoginRequired() | |||
13 | def __before__(self): |
|
16 | def __before__(self): | |
14 | c.repos_prefix = config['repos_name'] |
|
17 | super(TagsController, self).__before__() | |
15 | c.repo_name = get_repo_slug(request) |
|
|||
16 |
|
18 | |||
17 | def index(self): |
|
19 | def index(self): | |
18 | hg_model = HgModel() |
|
20 | hg_model = HgModel() |
@@ -6,7 +6,6 b' from pylons.controllers.util import abor' | |||||
6 | from pylons_app.lib.base import BaseController, render |
|
6 | from pylons_app.lib.base import BaseController, render | |
7 | from formencode import htmlfill |
|
7 | from formencode import htmlfill | |
8 | from pylons_app.model.db import Users, UserLogs |
|
8 | from pylons_app.model.db import Users, UserLogs | |
9 | from pylons_app.lib.auth import authenticate |
|
|||
10 | import crypt |
|
9 | import crypt | |
11 |
|
10 | |||
12 | log = logging.getLogger(__name__) |
|
11 | log = logging.getLogger(__name__) | |
@@ -17,10 +16,10 b' class UsersController(BaseController):' | |||||
17 | # file has a resource setup: |
|
16 | # file has a resource setup: | |
18 | # map.resource('user', 'users') |
|
17 | # map.resource('user', 'users') | |
19 |
|
18 | |||
20 | @authenticate |
|
|||
21 | def __before__(self): |
|
19 | def __before__(self): | |
22 | c.admin_user = session.get('admin_user') |
|
20 | c.admin_user = session.get('admin_user') | |
23 | c.admin_username = session.get('admin_username') |
|
21 | c.admin_username = session.get('admin_username') | |
|
22 | super(UsersController, self).__before__() | |||
24 |
|
23 | |||
25 | def index(self, format='html'): |
|
24 | def index(self, format='html'): | |
26 | """GET /users: All items in the collection""" |
|
25 | """GET /users: All items in the collection""" |
General Comments 0
You need to be logged in to leave comments.
Login now