Mercurial > kallithea
annotate kallithea/lib/middleware/simplegit.py @ 4203:9daad8c50b37 kallithea-2.2.5-rebrand
Rename database classes (but not table names)
author | Bradley M. Kuhn <bkuhn@sfconservancy.org> |
---|---|
date | Wed, 02 Jul 2014 19:05:36 -0400 |
parents | d1addaf7a91e |
children | ad38f9f93b3b |
rev | line source |
---|---|
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
1 # -*- coding: utf-8 -*- |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
2 # This program is free software: you can redistribute it and/or modify |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
3 # it under the terms of the GNU General Public License as published by |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
4 # the Free Software Foundation, either version 3 of the License, or |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
5 # (at your option) any later version. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
6 # |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
7 # This program is distributed in the hope that it will be useful, |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
8 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
10 # GNU General Public License for more details. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
11 # |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
12 # You should have received a copy of the GNU General Public License |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
13 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
4116
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
14 """ |
4186
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
15 kallithea.lib.middleware.simplegit |
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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
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 SimpleGit middleware for handling git protocol request (push/clone etc.) |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
19 It's implemented with basic auth function |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
20 |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
21 :created_on: Apr 28, 2010 |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
22 :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
|
23 :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
|
24 :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
|
25 |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
26 """ |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
27 |
635
fd63782c4426
Fixed age, for new vcs implementation. Removed all obsolete date formatters
Marcin Kuzminski <marcin@python-works.com>
parents:
625
diff
changeset
|
28 |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
29 import os |
2052
320806ff6be2
fixes git-protocol with
Marcin Kuzminski <marcin@python-works.com>
parents:
2026
diff
changeset
|
30 import re |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
31 import logging |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
32 import traceback |
635
fd63782c4426
Fixed age, for new vcs implementation. Removed all obsolete date formatters
Marcin Kuzminski <marcin@python-works.com>
parents:
625
diff
changeset
|
33 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
34 from paste.httpheaders import REMOTE_USER, AUTH_TYPE |
2668
f0851f37d6be
Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents:
2578
diff
changeset
|
35 from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \ |
4116
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
36 HTTPNotAcceptable |
4203
9daad8c50b37
Rename database classes (but not table names)
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4187
diff
changeset
|
37 from kallithea.model.db import User, Ui |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
38 |
4186
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
39 from kallithea.lib.utils2 import safe_str, fix_PATH, get_server_url,\ |
3577
238486bb71ab
Switched handling of RhodeCode extra params in consistent way
Marcin Kuzminski <marcin@python-works.com>
parents:
3522
diff
changeset
|
40 _set_extras |
4186
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
41 from kallithea.lib.base import BaseVCSController |
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
42 from kallithea.lib.utils import make_ui, is_valid_repo |
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
43 from kallithea.lib.exceptions import HTTPLockedRC |
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
44 from kallithea.lib.hooks import pre_pull |
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
45 from kallithea.lib import auth_modules |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
46 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
47 log = logging.getLogger(__name__) |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
48 |
1275
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
49 |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
50 GIT_PROTO_PAT = re.compile(r'^/(.+)/(info/refs|git-upload-pack|git-receive-pack)') |
2052
320806ff6be2
fixes git-protocol with
Marcin Kuzminski <marcin@python-works.com>
parents:
2026
diff
changeset
|
51 |
2058
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
52 |
2060
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
53 def is_git(environ): |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
54 path_info = environ['PATH_INFO'] |
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
55 isgit_path = GIT_PROTO_PAT.match(path_info) |
2100
f0649c7cf94a
fixed some unicode problems with waitress
Marcin Kuzminski <marcin@python-works.com>
parents:
2090
diff
changeset
|
56 log.debug('pathinfo: %s detected as GIT %s' % ( |
3889
b84c83b651de
replace equality comparision to None
Marcin Kuzminski <marcin@python-works.com>
parents:
3823
diff
changeset
|
57 path_info, isgit_path is not None) |
2100
f0649c7cf94a
fixed some unicode problems with waitress
Marcin Kuzminski <marcin@python-works.com>
parents:
2090
diff
changeset
|
58 ) |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
59 return isgit_path |
2052
320806ff6be2
fixes git-protocol with
Marcin Kuzminski <marcin@python-works.com>
parents:
2026
diff
changeset
|
60 |
2058
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
61 |
1761
b265be1c6093
Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents:
1630
diff
changeset
|
62 class SimpleGit(BaseVCSController): |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
63 |
1761
b265be1c6093
Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents:
1630
diff
changeset
|
64 def _handle_request(self, environ, start_response): |
2060
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
65 if not is_git(environ): |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
66 return self.application(environ, start_response) |
2668
f0851f37d6be
Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents:
2578
diff
changeset
|
67 if not self._check_ssl(environ, start_response): |
f0851f37d6be
Implementes #509 require SSL flag now works for both git and mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents:
2578
diff
changeset
|
68 return HTTPNotAcceptable('SSL REQUIRED !')(environ, start_response) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
69 |
3125
9b92cf5a0cca
Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents:
2969
diff
changeset
|
70 ip_addr = self._get_ip_addr(environ) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
71 username = None |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
72 self._git_first_op = False |
898
9c4851dce8e6
fixed error propagation when using git/mercurial requests
Marcin Kuzminski <marcin@python-works.com>
parents:
756
diff
changeset
|
73 # skip passing error to error controller |
9c4851dce8e6
fixed error propagation when using git/mercurial requests
Marcin Kuzminski <marcin@python-works.com>
parents:
756
diff
changeset
|
74 environ['pylons.status_code_redirect'] = True |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
655
diff
changeset
|
75 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
76 #====================================================================== |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
77 # EXTRACT REPOSITORY NAME FROM ENV |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
78 #====================================================================== |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
79 try: |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
80 repo_name = self.__get_repository(environ) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
81 log.debug('Extracted repo name is %s' % repo_name) |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3625
diff
changeset
|
82 except Exception: |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
83 return HTTPInternalServerError()(environ, start_response) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
84 |
2122
c137b8a81f8e
git+hg middleware do repo verification at earliest possible state, giving 404 as fast as possible. If repo is not found.
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
85 # quick check if that dir exists... |
3625
260a7a01b054
follow Python conventions for boolean values
Mads Kiilerich <madski@unity3d.com>
parents:
3579
diff
changeset
|
86 if not is_valid_repo(repo_name, self.basepath, 'git'): |
2122
c137b8a81f8e
git+hg middleware do repo verification at earliest possible state, giving 404 as fast as possible. If repo is not found.
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
87 return HTTPNotFound()(environ, start_response) |
c137b8a81f8e
git+hg middleware do repo verification at earliest possible state, giving 404 as fast as possible. If repo is not found.
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
88 |
2060
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
89 #====================================================================== |
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
90 # GET ACTION PULL or PUSH |
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
91 #====================================================================== |
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
92 action = self.__get_action(environ) |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
93 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
94 #====================================================================== |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
95 # CHECK ANONYMOUS PERMISSION |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
96 #====================================================================== |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
97 if action in ['pull', 'push']: |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
98 anonymous_user = self.__get_user('default') |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
99 username = anonymous_user.username |
4116
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
100 if anonymous_user.active: |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
101 # ONLY check permissions if the user is activated |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
102 anonymous_perm = self._check_permission(action, anonymous_user, |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
103 repo_name, 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
|
104 else: |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
105 anonymous_perm = False |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
106 |
4116
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
107 if not anonymous_user.active or not anonymous_perm: |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
108 if not anonymous_user.active: |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
109 log.debug('Anonymous access is disabled, running ' |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
110 'authentication') |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
111 |
3625
260a7a01b054
follow Python conventions for boolean values
Mads Kiilerich <madski@unity3d.com>
parents:
3579
diff
changeset
|
112 if not anonymous_perm: |
1275
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
113 log.debug('Not enough credentials to access this ' |
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
114 'repository as anonymous 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
|
115 |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
116 username = None |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
117 #============================================================== |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
118 # DEFAULT PERM FAILED OR ANONYMOUS ACCESS IS DISABLED SO WE |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
119 # NEED TO AUTHENTICATE AND ASK FOR AUTH USER PERMISSIONS |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
120 #============================================================== |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
121 |
4116
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
122 # try to auth based on environ, container auth methods |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
123 log.debug('Running PRE-AUTH for container based authentication') |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
124 pre_auth = auth_modules.authenticate('', '', environ) |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
125 if pre_auth and pre_auth.get('username'): |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
126 username = pre_auth['username'] |
ffd45b185016
Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4089
diff
changeset
|
127 log.debug('PRE-AUTH got %s as username' % username) |
1630
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
128 |
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
129 # If not authenticated by the container, running basic auth |
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
130 if not username: |
1401
b7563ad4e7ee
Unicode fixes, added safe_str method for global str() operations +better test sandboxing
Marcin Kuzminski <marcin@python-works.com>
parents:
1293
diff
changeset
|
131 self.authenticate.realm = \ |
b7563ad4e7ee
Unicode fixes, added safe_str method for global str() operations +better test sandboxing
Marcin Kuzminski <marcin@python-works.com>
parents:
1293
diff
changeset
|
132 safe_str(self.config['rhodecode_realm']) |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
133 result = self.authenticate(environ) |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
134 if isinstance(result, str): |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
135 AUTH_TYPE.update(environ, 'basic') |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
136 REMOTE_USER.update(environ, result) |
1630
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
137 username = result |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
138 else: |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
139 return result.wsgi_application(environ, start_response) |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
140 |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
141 #============================================================== |
1630
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
142 # CHECK PERMISSIONS FOR THIS REQUEST USING GIVEN USERNAME |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
143 #============================================================== |
2500
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
144 try: |
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
145 user = self.__get_user(username) |
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
146 if user is None or not user.active: |
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
147 return HTTPForbidden()(environ, start_response) |
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
148 username = user.username |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3625
diff
changeset
|
149 except Exception: |
2500
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
150 log.error(traceback.format_exc()) |
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
151 return HTTPInternalServerError()(environ, start_response) |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
152 |
2500
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
153 #check permissions for this repository |
3125
9b92cf5a0cca
Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents:
2969
diff
changeset
|
154 perm = self._check_permission(action, user, repo_name, ip_addr) |
3625
260a7a01b054
follow Python conventions for boolean values
Mads Kiilerich <madski@unity3d.com>
parents:
3579
diff
changeset
|
155 if not perm: |
2500
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
156 return HTTPForbidden()(environ, start_response) |
94ef0b609d17
possible fix for #486 undefined variable username
Marcin Kuzminski <marcin@python-works.com>
parents:
2468
diff
changeset
|
157 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
158 # extras are injected into UI object and later available |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
159 # in hooks executed by rhodecode |
4186
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
160 from kallithea import CONFIG |
2969
5085e51fba3a
Implemented #628: Pass server URL to rc-extensions hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
2869
diff
changeset
|
161 server_url = get_server_url(environ) |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
162 extras = { |
3125
9b92cf5a0cca
Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents:
2969
diff
changeset
|
163 'ip': ip_addr, |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
164 'username': username, |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
165 'action': action, |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
166 'repository': repo_name, |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
167 'scm': 'git', |
2858
dd2d5b65cae9
Also export config filename via extras.config in simplegit middleware (juste like for the simplehg one)
Vincent Caron <vcaron@bearstech.com>
parents:
2726
diff
changeset
|
168 'config': CONFIG['__file__'], |
2969
5085e51fba3a
Implemented #628: Pass server URL to rc-extensions hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
2869
diff
changeset
|
169 'server_url': server_url, |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
170 'make_lock': None, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
171 'locked_by': [None, None] |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
172 } |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
173 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
174 #=================================================================== |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
175 # GIT REQUEST HANDLING |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
176 #=================================================================== |
3634
336184b9f4cf
fix unicode issues on logging in SCM middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
3631
diff
changeset
|
177 str_repo_name = safe_str(repo_name) |
336184b9f4cf
fix unicode issues on logging in SCM middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
3631
diff
changeset
|
178 repo_path = os.path.join(safe_str(self.basepath),str_repo_name) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
179 log.debug('Repository path is %s' % repo_path) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
180 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
181 # CHECK LOCKING only if it's not ANONYMOUS USER |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
182 if username != User.DEFAULT_USER: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
183 log.debug('Checking locking on repository') |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
184 (make_lock, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
185 locked, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
186 locked_by) = self._check_locking_state( |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
187 environ=environ, action=action, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
188 repo=repo_name, user_id=user.user_id |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
189 ) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
190 # store the make_lock for later evaluation in hooks |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
191 extras.update({'make_lock': make_lock, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
192 'locked_by': locked_by}) |
3823
972ad33c5610
removed duplicate code that set os.environ['RC_SCM_DATA']
Marcin Kuzminski <marcin@python-works.com>
parents:
3634
diff
changeset
|
193 |
2869
ccbdff90e5a0
fix for issue #578 git hooks sometimes cannot be executed due to different python they runned under, this commit tries to fix that by altering the PATH env variable using current python that rhodecode is running
Marcin Kuzminski <marcin@python-works.com>
parents:
2858
diff
changeset
|
194 fix_PATH() |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
195 log.debug('HOOKS extras is %s' % extras) |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
196 baseui = make_ui('db') |
2209
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
197 self.__inject_extras(repo_path, baseui, extras) |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
198 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
199 try: |
3277
5440ea1d0628
don't invalidate cache before handling hook
Marcin Kuzminski <marcin@python-works.com>
parents:
3135
diff
changeset
|
200 self._handle_githooks(repo_name, action, baseui, environ) |
3135
e7ba69286276
logging: include more info in action logging
Mads Kiilerich <madski@unity3d.com>
parents:
3125
diff
changeset
|
201 log.info('%s action on GIT repo "%s" by "%s" from %s' % |
3634
336184b9f4cf
fix unicode issues on logging in SCM middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
3631
diff
changeset
|
202 (action, str_repo_name, safe_str(username), ip_addr)) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
203 app = self.__make_app(repo_name, repo_path, extras) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
204 return app(environ, start_response) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
205 except HTTPLockedRC, e: |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3278
diff
changeset
|
206 _code = CONFIG.get('lock_ret_code') |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3278
diff
changeset
|
207 log.debug('Repository LOCKED ret code %s!' % (_code)) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
208 return e(environ, start_response) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
209 except Exception: |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
210 log.error(traceback.format_exc()) |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
211 return HTTPInternalServerError()(environ, start_response) |
3278
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3277
diff
changeset
|
212 finally: |
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3277
diff
changeset
|
213 # invalidate cache on push |
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3277
diff
changeset
|
214 if action == 'push': |
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3277
diff
changeset
|
215 self._invalidate_cache(repo_name) |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
216 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
217 def __make_app(self, repo_name, repo_path, extras): |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
218 """ |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
219 Make an wsgi application using dulserver |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1813
diff
changeset
|
220 |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
221 :param repo_name: name of the repository |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
222 :param repo_path: full path to the repository |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
223 """ |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
224 |
4186
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
225 from kallithea.lib.middleware.pygrack import make_wsgi_app |
2382
034e4fe1ebb2
changed dulwich git interface to gitweb + subprocessio
Marcin Kuzminski <marcin@python-works.com>
parents:
2322
diff
changeset
|
226 app = make_wsgi_app( |
2468 | 227 repo_root=safe_str(self.basepath), |
2382
034e4fe1ebb2
changed dulwich git interface to gitweb + subprocessio
Marcin Kuzminski <marcin@python-works.com>
parents:
2322
diff
changeset
|
228 repo_name=repo_name, |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
229 extras=extras, |
2382
034e4fe1ebb2
changed dulwich git interface to gitweb + subprocessio
Marcin Kuzminski <marcin@python-works.com>
parents:
2322
diff
changeset
|
230 ) |
034e4fe1ebb2
changed dulwich git interface to gitweb + subprocessio
Marcin Kuzminski <marcin@python-works.com>
parents:
2322
diff
changeset
|
231 return app |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
232 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
233 def __get_repository(self, environ): |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
234 """ |
4089
a5888ca796b5
Fixed spelling of get's to gets
Marcin Kuzminski <marcin@python-works.com>
parents:
3960
diff
changeset
|
235 Gets repository name out of PATH_INFO header |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
236 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
237 :param environ: environ where PATH_INFO is stored |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
238 """ |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
239 try: |
1813
a8c66e870bd0
implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents:
1761
diff
changeset
|
240 environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO']) |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
241 repo_name = GIT_PROTO_PAT.match(environ['PATH_INFO']).group(1) |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3625
diff
changeset
|
242 except Exception: |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
243 log.error(traceback.format_exc()) |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
244 raise |
2052
320806ff6be2
fixes git-protocol with
Marcin Kuzminski <marcin@python-works.com>
parents:
2026
diff
changeset
|
245 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
246 return repo_name |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
247 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
248 def __get_user(self, username): |
1530
04027bdb876c
Refactoring of model get functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1507
diff
changeset
|
249 return User.get_by_username(username) |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
250 |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
251 def __get_action(self, environ): |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
252 """ |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
253 Maps git request commands into a pull or push command. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
254 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
255 :param environ: |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
256 """ |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
257 service = environ['QUERY_STRING'].split('=') |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
258 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
259 if len(service) > 1: |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
260 service_cmd = service[1] |
2058
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
261 mapping = { |
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
262 'git-receive-pack': 'push', |
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
263 'git-upload-pack': 'pull', |
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
264 } |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
265 op = mapping[service_cmd] |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
266 self._git_stored_op = op |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
267 return op |
625
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
268 else: |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
269 # try to fallback to stored variable as we don't know if the last |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
270 # operation is pull/push |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
271 op = getattr(self, '_git_stored_op', 'pull') |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
272 return op |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
273 |
2236
37c143aa8616
fixes issue #436 git push error
Marcin Kuzminski <marcin@python-works.com>
parents:
2209
diff
changeset
|
274 def _handle_githooks(self, repo_name, action, baseui, environ): |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2382
diff
changeset
|
275 """ |
2407
8a68e0292232
Change git & hg hooks to post. They shouldn't block as they are used just for logging actions. Futhermore post hooks have access to changesets, so it's much better flexible
Marcin Kuzminski <marcin@python-works.com>
parents:
2402
diff
changeset
|
276 Handles pull action, push is handled by post-receive hook |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2382
diff
changeset
|
277 """ |
4186
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
278 from kallithea.lib.hooks import log_pull_action |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
279 service = environ['QUERY_STRING'].split('=') |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
280 |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
281 if len(service) < 2: |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
282 return |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
283 |
4186
7e5f8c12a3fc
First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4116
diff
changeset
|
284 from kallithea.model.db import Repository |
2209
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
285 _repo = Repository.get_by_repo_name(repo_name) |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
286 _repo = _repo.scm_instance |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
287 |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
288 _hooks = dict(baseui.configitems('hooks')) or {} |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
289 if action == 'pull': |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
290 # stupid git, emulate pre-pull hook ! |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
291 pre_pull(ui=baseui, repo=_repo._repo) |
4203
9daad8c50b37
Rename database classes (but not table names)
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents:
4187
diff
changeset
|
292 if action == 'pull' and _hooks.get(Ui.HOOK_PULL): |
2236
37c143aa8616
fixes issue #436 git push error
Marcin Kuzminski <marcin@python-works.com>
parents:
2209
diff
changeset
|
293 log_pull_action(ui=baseui, repo=_repo._repo) |
2209
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
294 |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
295 def __inject_extras(self, repo_path, baseui, extras={}): |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
296 """ |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
297 Injects some extra params into baseui instance |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
298 |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
299 :param baseui: baseui instance |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
300 :param extras: dict with extra params to put into baseui |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
301 """ |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
302 |
3577
238486bb71ab
Switched handling of RhodeCode extra params in consistent way
Marcin Kuzminski <marcin@python-works.com>
parents:
3522
diff
changeset
|
303 _set_extras(extras) |