annotate rhodecode/lib/base.py @ 4147:1c8f818787b3 rhodecode-2.2.5-gpl

old style: show the full link box on summary page - no overlap or truncation
author Mads Kiilerich <madski@unity3d.com>
date Wed, 02 Jul 2014 19:03:23 -0400
parents ffd45b185016
children 7e5f8c12a3fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
1 # -*- coding: utf-8 -*-
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
2 # This program is free software: you can redistribute it and/or modify
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
3 # it under the terms of the GNU General Public License as published by
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
4 # the Free Software Foundation, either version 3 of the License, or
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
5 # (at your option) any later version.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
6 #
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
7 # This program is distributed in the hope that it will be useful,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
10 # GNU General Public License for more details.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
11 #
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
12 # You should have received a copy of the GNU General Public License
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
13 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
14
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
15 """
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
16 rhodecode.lib.base
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
17 ~~~~~~~~~~~~~~~~~~
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
18
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
19 The base Controller API
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
20 Provides the BaseController class for subclassing. And usage in different
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
21 controllers
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
22
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
23 :created_on: Oct 06, 2010
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
24 :author: marcink
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
25 :copyright: (c) 2013 RhodeCode GmbH.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
26 :license: GPLv3, see LICENSE for more details.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
27 """
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
28
1373
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
29 import logging
1601
6f06daeed294 Added Request time tracking
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
30 import time
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
31 import traceback
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
32
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
33 from paste.auth.basic import AuthBasicAuthenticator
2132
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
34 from paste.httpexceptions import HTTPUnauthorized, HTTPForbidden
2912
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
35 from paste.httpheaders import WWW_AUTHENTICATE, AUTHORIZATION
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
36
1373
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
37 from pylons import config, tmpl_context as c, request, session, url
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
38 from pylons.controllers import WSGIController
1373
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
39 from pylons.controllers.util import redirect
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
40 from pylons.templating import render_mako as render # don't remove this import
1304
5a96551ee9c0 gui-improvments
Marcin Kuzminski <marcin@python-works.com>
parents: 1282
diff changeset
41
1718
f78bee8eec78 reduce cookie size for better support of client side sessions
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
42 from rhodecode import __version__, BACKENDS
f78bee8eec78 reduce cookie size for better support of client side sessions
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
43
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
44 from rhodecode.lib.utils2 import str2bool, safe_unicode, AttributeDict,\
3087
a797ada9d2ad added option to ini file to define lightweight dashboard items per page before pagination
Marcin Kuzminski <marcin@python-works.com>
parents: 2958
diff changeset
45 safe_str, safe_int
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
46 from rhodecode.lib import auth_modules
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
47 from rhodecode.lib.auth import AuthUser, HasPermissionAnyMiddleware, CookieStoreWrapper
3693
6843cabe9925 removed duplicated logic of how we invalidate caches for repos
Marcin Kuzminski <marcin@python-works.com>
parents: 3669
diff changeset
48 from rhodecode.lib.utils import get_repo_slug
4074
3b136af34329 Added pre-create user hook.
Marcin Kuzminski <marcin@python-works.com>
parents: 4045
diff changeset
49 from rhodecode.lib.exceptions import UserCreationError
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
50 from rhodecode.model import meta
1718
f78bee8eec78 reduce cookie size for better support of client side sessions
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
51
2955
9c85d884315b don't use config for visual settings. It totally doesn't work on multi instance mode
Marcin Kuzminski <marcin@python-works.com>
parents: 2952
diff changeset
52 from rhodecode.model.db import Repository, RhodeCodeUi, User, RhodeCodeSetting
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1630
diff changeset
53 from rhodecode.model.notification import NotificationModel
1718
f78bee8eec78 reduce cookie size for better support of client side sessions
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
54 from rhodecode.model.scm import ScmModel
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
55 from rhodecode.model.meta import Session
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 659
diff changeset
56
1373
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
57 log = logging.getLogger(__name__)
1307
c1516b35f91d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1304
diff changeset
58
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
59
3669
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
60 def _filter_proxy(ip):
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
61 """
3987
b58ed6d608cc Use space after , in lists
Mads Kiilerich <madski@unity3d.com>
parents: 3960
diff changeset
62 HEADERS can have multiple ips inside the left-most being the original
3669
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
63 client, and each successive proxy that passed the request adding the IP
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
64 address where it received the request from.
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
65
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
66 :param ip:
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
67 """
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
68 if ',' in ip:
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
69 _ips = ip.split(',')
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
70 _first_ip = _ips[0].strip()
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
71 log.debug('Got multiple IPs %s, using %s' % (','.join(_ips), _first_ip))
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
72 return _first_ip
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
73 return ip
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
74
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
75
2374
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
76 def _get_ip_addr(environ):
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
77 proxy_key = 'HTTP_X_REAL_IP'
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
78 proxy_key2 = 'HTTP_X_FORWARDED_FOR'
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
79 def_key = 'REMOTE_ADDR'
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
80
3153
8046d1979674 fix multiple ips addresses in X_FORWARDER_FOR header
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
81 ip = environ.get(proxy_key)
2486
6f537e3da9c4 add IP into base logging, and change a little IP extraction login, if some header is passed as empty
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
82 if ip:
3669
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
83 return _filter_proxy(ip)
2486
6f537e3da9c4 add IP into base logging, and change a little IP extraction login, if some header is passed as empty
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
84
3153
8046d1979674 fix multiple ips addresses in X_FORWARDER_FOR header
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
85 ip = environ.get(proxy_key2)
2486
6f537e3da9c4 add IP into base logging, and change a little IP extraction login, if some header is passed as empty
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
86 if ip:
3669
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
87 return _filter_proxy(ip)
2486
6f537e3da9c4 add IP into base logging, and change a little IP extraction login, if some header is passed as empty
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
88
6f537e3da9c4 add IP into base logging, and change a little IP extraction login, if some header is passed as empty
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
89 ip = environ.get(def_key, '0.0.0.0')
3669
b66fd6de093c fixed multiple IP addresses in each of extracted IP.
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
90 return _filter_proxy(ip)
2374
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
91
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
92
2490
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
93 def _get_access_path(environ):
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
94 path = environ.get('PATH_INFO')
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
95 org_req = environ.get('pylons.original_request')
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
96 if org_req:
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
97 path = org_req.environ.get('PATH_INFO')
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
98 return path
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
99
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
100
2132
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
101 class BasicAuth(AuthBasicAuthenticator):
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
102
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
103 def __init__(self, realm, authfunc, auth_http_code=None):
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
104 self.realm = realm
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
105 self.authfunc = authfunc
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
106 self._rc_auth_http_code = auth_http_code
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
107
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
108 def build_authentication(self):
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
109 head = WWW_AUTHENTICATE.tuples('Basic realm="%s"' % self.realm)
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
110 if self._rc_auth_http_code and self._rc_auth_http_code == '403':
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
111 # return 403 if alternative http return code is specified in
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
112 # RhodeCode config
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
113 return HTTPForbidden(headers=head)
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
114 return HTTPUnauthorized(headers=head)
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
115
2912
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
116 def authenticate(self, environ):
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
117 authorization = AUTHORIZATION(environ)
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
118 if not authorization:
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
119 return self.build_authentication()
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
120 (authmeth, auth) = authorization.split(' ', 1)
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
121 if 'basic' != authmeth.lower():
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
122 return self.build_authentication()
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
123 auth = auth.strip().decode('base64')
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
124 _parts = auth.split(':', 1)
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
125 if len(_parts) == 2:
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
126 username, password = _parts
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
127 if self.authfunc(username, password, environ):
2912
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
128 return username
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
129 return self.build_authentication()
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
130
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
131 __call__ = authenticate
976e2b032650 patched basic auth function to overcome git issues with proxy that doesn't send both username and password. ref #586
Marcin Kuzminski <marcin@python-works.com>
parents: 2752
diff changeset
132
2132
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
133
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
134 class BaseVCSController(object):
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
135
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
136 def __init__(self, application, config):
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
137 self.application = application
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
138 self.config = config
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
139 # base path of repo locations
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
140 self.basepath = self.config['base_path']
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
141 #authenticate this VCS request using authfunc
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
142 self.authenticate = BasicAuth('', auth_modules.authenticate,
2132
9f5582151d53 Alternative HTTP response codes when client failed to Authenticate correctly
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
143 config.get('auth_ret_code'))
3125
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3087
diff changeset
144 self.ip_addr = '0.0.0.0'
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
145
1978
164199e476e9 code garden, pep8
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
146 def _handle_request(self, environ, start_response):
164199e476e9 code garden, pep8
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
147 raise NotImplementedError()
164199e476e9 code garden, pep8
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
148
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
149 def _get_by_id(self, repo_name):
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
150 """
4089
a5888ca796b5 Fixed spelling of get's to gets
Marcin Kuzminski <marcin@python-works.com>
parents: 4074
diff changeset
151 Gets a special pattern _<ID> from clone url and tries to replace it
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
152 with a repository_name for support of _<ID> non changable urls
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
153
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
154 :param repo_name:
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
155 """
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
156
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
157 data = repo_name.split('/')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
158 if len(data) >= 2:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
159 from rhodecode.lib.utils import get_repo_by_id
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
160 by_id_match = get_repo_by_id(repo_name)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
161 if by_id_match:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
162 data[1] = by_id_match
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
163
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
164 return '/'.join(data)
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
165
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
166 def _invalidate_cache(self, repo_name):
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
167 """
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
168 Set's cache for this repository for invalidation on next access
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
169
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
170 :param repo_name: full repo name, also a cache key
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
171 """
3693
6843cabe9925 removed duplicated logic of how we invalidate caches for repos
Marcin Kuzminski <marcin@python-works.com>
parents: 3669
diff changeset
172 ScmModel().mark_for_invalidation(repo_name)
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
173
3125
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3087
diff changeset
174 def _check_permission(self, action, user, repo_name, ip_addr=None):
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
175 """
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
176 Checks permissions using action (push/pull) user and repository
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
177 name
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
178
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
179 :param action: push or pull action
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
180 :param user: user instance
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
181 :param repo_name: repository name
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
182 """
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
183 # check IP
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
184 inherit = user.inherit_default_permissions
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
185 ip_allowed = AuthUser.check_ip_allowed(user.user_id, ip_addr,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
186 inherit_from_default=inherit)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
187 if ip_allowed:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
188 log.info('Access for IP:%s allowed' % (ip_addr,))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
189 else:
3125
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3087
diff changeset
190 return False
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
191
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
192 if action == 'push':
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
193 if not HasPermissionAnyMiddleware('repository.write',
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
194 'repository.admin')(user,
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
195 repo_name):
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
196 return False
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
197
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
198 else:
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
199 #any other action need at least read permission
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
200 if not HasPermissionAnyMiddleware('repository.read',
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
201 'repository.write',
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
202 'repository.admin')(user,
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
203 repo_name):
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
204 return False
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
205
1813
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
206 return True
a8c66e870bd0 implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents: 1763
diff changeset
207
2184
79e4d6b9c1f0 Added HTTP_X_FORWARDED_FOR as another method of extracting IP for pull/push logs.
Marcin Kuzminski <marcin@python-works.com>
parents: 2132
diff changeset
208 def _get_ip_addr(self, environ):
2374
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
209 return _get_ip_addr(environ)
2184
79e4d6b9c1f0 Added HTTP_X_FORWARDED_FOR as another method of extracting IP for pull/push logs.
Marcin Kuzminski <marcin@python-works.com>
parents: 2132
diff changeset
210
2668
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
211 def _check_ssl(self, environ, start_response):
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
212 """
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
213 Checks the SSL check flag and returns False if SSL is not present
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
214 and required True otherwise
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
215 """
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
216 org_proto = environ['wsgi._org_proto']
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
217 #check if we have SSL required ! if not it's a bad request !
2708
9bce679a3f49 Added form for controlling mercurial extensions
Marcin Kuzminski <marcin@python-works.com>
parents: 2674
diff changeset
218 require_ssl = str2bool(RhodeCodeUi.get_by_key('push_ssl').ui_value)
2668
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
219 if require_ssl and org_proto == 'http':
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
220 log.debug('proto is %s and SSL is required BAD REQUEST !'
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
221 % org_proto)
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
222 return False
2674
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
223 return True
2668
f0851f37d6be Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2490
diff changeset
224
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
225 def _check_locking_state(self, environ, action, repo, user_id):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
226 """
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
227 Checks locking on this repository, if locking is enabled and lock is
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
228 present returns a tuple of make_lock, locked, locked_by.
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
229 make_lock can have 3 states None (do nothing) True, make lock
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
230 False release lock, This value is later propagated to hooks, which
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
231 do the locking. Think about this as signals passed to hooks what to do.
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
232
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
233 """
2752
6d904a0cd48d added new suite of tests for VCS operations
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
234 locked = False # defines that locked error should be thrown to user
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
235 make_lock = None
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
236 repo = Repository.get_by_repo_name(repo)
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
237 user = User.get(user_id)
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
238
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
239 # this is kind of hacky, but due to how mercurial handles client-server
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
240 # server see all operation on changeset; bookmarks, phases and
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
241 # obsolescence marker in different transaction, we don't want to check
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
242 # locking on those
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
243 obsolete_call = environ['QUERY_STRING'] in ['cmd=listkeys',]
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
244 locked_by = repo.locked
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
245 if repo and repo.enable_locking and not obsolete_call:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
246 if action == 'push':
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
247 #check if it's already locked !, if it is compare users
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
248 user_id, _date = repo.locked
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
249 if user.user_id == user_id:
2752
6d904a0cd48d added new suite of tests for VCS operations
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
250 log.debug('Got push from user %s, now unlocking' % (user))
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
251 # unlock if we have push from user who locked
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
252 make_lock = False
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
253 else:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
254 # we're not the same user who locked, ban with 423 !
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
255 locked = True
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
256 if action == 'pull':
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
257 if repo.locked[0] and repo.locked[1]:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
258 locked = True
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
259 else:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
260 log.debug('Setting lock on repo %s by %s' % (repo, user))
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
261 make_lock = True
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
262
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
263 else:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
264 log.debug('Repository %s do not have locking enabled' % (repo))
2752
6d904a0cd48d added new suite of tests for VCS operations
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
265 log.debug('FINAL locking values make_lock:%s,locked:%s,locked_by:%s'
6d904a0cd48d added new suite of tests for VCS operations
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
266 % (make_lock, locked, locked_by))
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
267 return make_lock, locked, locked_by
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
268
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
269 def __call__(self, environ, start_response):
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
270 start = time.time()
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
271 try:
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
272 return self._handle_request(environ, start_response)
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
273 finally:
1763
d09c52be40e0 logger name update
Marcin Kuzminski <marcin@python-works.com>
parents: 1761
diff changeset
274 log = logging.getLogger('rhodecode.' + self.__class__.__name__)
1761
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
275 log.debug('Request time: %.3fs' % (time.time() - start))
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
276 meta.Session.remove()
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
277
b265be1c6093 Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
278
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
279 class BaseController(WSGIController):
659
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
280
185
3380ca40cdba 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
Marcin Kuzminski <marcin@python-works.com>
parents: 169
diff changeset
281 def __before__(self):
3125
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3087
diff changeset
282 """
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3087
diff changeset
283 __before__ is called before controller methods and after __call__
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3087
diff changeset
284 """
548
b75b77ef649d renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
285 c.rhodecode_version = __version__
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
286 rc_config = RhodeCodeSetting.get_app_settings()
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
287
2674
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
288 # Visual options
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
289 c.visual = AttributeDict({})
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
290
3904
fe053a42c4ce added dashboard items config in visual settings
Marcin Kuzminski <marcin@python-works.com>
parents: 3752
diff changeset
291 ## DB stored
2955
9c85d884315b don't use config for visual settings. It totally doesn't work on multi instance mode
Marcin Kuzminski <marcin@python-works.com>
parents: 2952
diff changeset
292 c.visual.show_public_icon = str2bool(rc_config.get('rhodecode_show_public_icon'))
9c85d884315b don't use config for visual settings. It totally doesn't work on multi instance mode
Marcin Kuzminski <marcin@python-works.com>
parents: 2952
diff changeset
293 c.visual.show_private_icon = str2bool(rc_config.get('rhodecode_show_private_icon'))
9c85d884315b don't use config for visual settings. It totally doesn't work on multi instance mode
Marcin Kuzminski <marcin@python-works.com>
parents: 2952
diff changeset
294 c.visual.stylify_metatags = str2bool(rc_config.get('rhodecode_stylify_metatags'))
3904
fe053a42c4ce added dashboard items config in visual settings
Marcin Kuzminski <marcin@python-works.com>
parents: 3752
diff changeset
295 c.visual.dashboard_items = safe_int(rc_config.get('rhodecode_dashboard_items', 100))
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
296 c.visual.admin_grid_items = safe_int(rc_config.get('rhodecode_admin_grid_items', 100))
3308
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3168
diff changeset
297 c.visual.repository_fields = str2bool(rc_config.get('rhodecode_repository_fields'))
3910
36f7562a5919 Implements #842 RhodeCode version disclosure.
Marcin Kuzminski <marcin@python-works.com>
parents: 3904
diff changeset
298 c.visual.show_version = str2bool(rc_config.get('rhodecode_show_version'))
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
299 c.visual.use_gravatar = str2bool(rc_config.get('rhodecode_use_gravatar'))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
300 c.visual.gravatar_url = rc_config.get('rhodecode_gravatar_url')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
301
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
302 c.ga_code = rc_config.get('rhodecode_ga_code')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
303 c.rhodecode_name = rc_config.get('rhodecode_title')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
304 c.clone_uri_tmpl = rc_config.get('rhodecode_clone_uri_tmpl')
3910
36f7562a5919 Implements #842 RhodeCode version disclosure.
Marcin Kuzminski <marcin@python-works.com>
parents: 3904
diff changeset
305
3904
fe053a42c4ce added dashboard items config in visual settings
Marcin Kuzminski <marcin@python-works.com>
parents: 3752
diff changeset
306 ## INI stored
3920
985db7f7b9b2 Added flag to controll option for changing the repos path location
Marcin Kuzminski <marcin@python-works.com>
parents: 3910
diff changeset
307 c.visual.allow_repo_location_change = str2bool(config.get('allow_repo_location_change', True))
4045
9b4ba12ef8c3 Add ini option to controll custom advanced hooks settings
Marcin Kuzminski <marcin@python-works.com>
parents: 4006
diff changeset
308 c.visual.allow_custom_hooks_settings = str2bool(config.get('allow_custom_hooks_settings', True))
3904
fe053a42c4ce added dashboard items config in visual settings
Marcin Kuzminski <marcin@python-works.com>
parents: 3752
diff changeset
309
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
310 c.rhodecode_instanceid = config.get('instance_id')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
311 c.rhodecode_bugtracker = config.get('bugtracker', url('rc_issue_tracker'))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
312 # END CONFIG VARS
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
313
3580
7b9d4f6bb04e show only open pull requests in the counter, and use repo context bar in pull requests view
Marcin Kuzminski <marcin@python-works.com>
parents: 3552
diff changeset
314 c.repo_name = get_repo_slug(request) # can be empty
659
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
315 c.backends = BACKENDS.keys()
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1630
diff changeset
316 c.unread_notifications = NotificationModel()\
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1630
diff changeset
317 .get_unread_cnt_for_user(c.rhodecode_user.user_id)
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
318
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
319 self.cut_off_limit = safe_int(config.get('cut_off_limit'))
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
320 self.sa = meta.Session
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
321 self.scm_model = ScmModel(self.sa)
1366
9c0f5d558789 fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents: 1351
diff changeset
322
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
323 def __call__(self, environ, start_response):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
324 """Invoke the Controller"""
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
325 # WSGIController.__call__ dispatches to the Controller method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
326 # the request is routed to. This routing information is
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
327 # available in environ['pylons.routes_dict']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
328 try:
2374
be2163ef127e Add ip reference into BaseController
Marcin Kuzminski <marcin@python-works.com>
parents: 2184
diff changeset
329 self.ip_addr = _get_ip_addr(environ)
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1622
diff changeset
330 # make sure that we update permissions each time we call controller
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
331 api_key = request.GET.get('api_key')
4074
3b136af34329 Added pre-create user hook.
Marcin Kuzminski <marcin@python-works.com>
parents: 4045
diff changeset
332
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
333 if api_key:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
334 # when using API_KEY we are sure user exists.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
335 auth_user = AuthUser(api_key=api_key, ip_addr=self.ip_addr)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
336 authenticated = False
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
337 else:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
338 cookie_store = CookieStoreWrapper(session.get('rhodecode_user'))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
339 try:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
340 auth_user = AuthUser(user_id=cookie_store.get('user_id', None),
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
341 ip_addr=self.ip_addr)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
342 except UserCreationError, e:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
343 from rhodecode.lib import helpers as h
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
344 h.flash(e, 'error')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
345 # container auth or other auth functions that create users on
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
346 # the fly can throw this exception signaling that there's issue
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
347 # with user creation, explanation should be provided in
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
348 # Exception itself
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
349 auth_user = AuthUser(ip_addr=self.ip_addr)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
350
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
351 authenticated = cookie_store.get('is_authenticated')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
352
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
353 if not auth_user.is_authenticated and auth_user.user_id is not None:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
354 # user is not authenticated and not empty
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
355 auth_user.set_authenticated(authenticated)
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1718
diff changeset
356 request.user = auth_user
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
357 #set globals for auth user
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1622
diff changeset
358 self.rhodecode_user = c.rhodecode_user = auth_user
2486
6f537e3da9c4 add IP into base logging, and change a little IP extraction login, if some header is passed as empty
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
359 log.info('IP: %s User: %s accessed %s' % (
2490
7a5eeafb1a9a better path extraction method.
Marcin Kuzminski <marcin@python-works.com>
parents: 2486
diff changeset
360 self.ip_addr, auth_user, safe_unicode(_get_access_path(environ)))
2027
88d5e42a66c3 fixed logging issue on non-ascii repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2025
diff changeset
361 )
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
362 return WSGIController.__call__(self, environ, start_response)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
363 finally:
51
a699c0088344 fixed sqlalchemy session bug,
marcink
parents: 17
diff changeset
364 meta.Session.remove()
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
365
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
366
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
367 class BaseRepoController(BaseController):
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
368 """
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1622
diff changeset
369 Base class for controllers responsible for loading all needed data for
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1622
diff changeset
370 repository loaded items are
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
371
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1622
diff changeset
372 c.rhodecode_repo: instance of scm repository
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1622
diff changeset
373 c.rhodecode_db_repo: instance of db
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1622
diff changeset
374 c.repository_followers: number of followers
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1622
diff changeset
375 c.repository_forks: number of forks
3527
87c97fcea029 Adding the context bar too all pages related to a Repository.
Leonardo <leo@unity3d.com>
parents: 3308
diff changeset
376 c.repository_following: weather the current user is following the current repo
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
377 """
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
378
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
379 def __before__(self):
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
380 super(BaseRepoController, self).__before__()
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
381 if c.repo_name: # extracted from routes
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
382 _dbr = Repository.get_by_repo_name(c.repo_name)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
383 if not _dbr:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
384 return
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
385
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
386 log.debug('Found repository in database %s with state `%s`'
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
387 % (safe_unicode(_dbr), safe_unicode(_dbr.repo_state)))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
388 route = getattr(request.environ.get('routes.route'), 'name', '')
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
389
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
390 # allow to delete repos that are somehow damages in filesystem
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
391 if route in ['delete_repo']:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
392 return
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
393
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
394 if _dbr.repo_state in [Repository.STATE_PENDING]:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
395 if route in ['repo_creating_home']:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
396 return
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
397 check_url = url('repo_creating_home', repo_name=c.repo_name)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
398 return redirect(check_url)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
399
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
400 dbr = c.rhodecode_db_repo = _dbr
1373
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
401 c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
402 if c.rhodecode_repo is None:
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
403 log.error('%s this repository is present in database but it '
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
404 'cannot be created as an scm instance', c.repo_name)
1282
faaadfc3c359 fixed condition evaluated for gitrepo that returned null, simplified scm functions
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
405
1373
66f03a87141c Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
406 redirect(url('home'))
1304
5a96551ee9c0 gui-improvments
Marcin Kuzminski <marcin@python-works.com>
parents: 1282
diff changeset
407
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
408 # update last change according to VCS data
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
409 dbr.update_changeset_cache(dbr.get_changeset())
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
410
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2374
diff changeset
411 # some globals counter for menu
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2374
diff changeset
412 c.repository_followers = self.scm_model.get_followers(dbr)
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2374
diff changeset
413 c.repository_forks = self.scm_model.get_forks(dbr)
2478
8eab81115660 white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
414 c.repository_pull_requests = self.scm_model.get_pull_requests(dbr)
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
415 c.repository_following = self.scm_model.is_following_repo(
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4089
diff changeset
416 c.repo_name, self.rhodecode_user.user_id)