Show More
@@ -22,7 +22,7 b' import logging' | |||||
22 | import datetime |
|
22 | import datetime | |
23 |
|
23 | |||
24 | from rhodecode.model import meta |
|
24 | from rhodecode.model import meta | |
25 | from rhodecode.model.db import User, UserLog |
|
25 | from rhodecode.model.db import User, UserLog, Repository | |
26 |
|
26 | |||
27 |
|
27 | |||
28 | log = logging.getLogger(__name__) |
|
28 | log = logging.getLogger(__name__) | |
@@ -33,6 +33,8 b' ACTIONS = {' | |||||
33 | 'user.login.failure': {}, |
|
33 | 'user.login.failure': {}, | |
34 | 'user.logout': {}, |
|
34 | 'user.logout': {}, | |
35 | 'user.password.reset_request': {}, |
|
35 | 'user.password.reset_request': {}, | |
|
36 | 'user.push': {}, | |||
|
37 | 'user.pull': {}, | |||
36 |
|
38 | |||
37 | 'repo.add': {}, |
|
39 | 'repo.add': {}, | |
38 | 'repo.edit': {}, |
|
40 | 'repo.edit': {}, | |
@@ -52,6 +54,16 b' class UserWrap(object):' | |||||
52 | self.ip_addr = ip_addr |
|
54 | self.ip_addr = ip_addr | |
53 |
|
55 | |||
54 |
|
56 | |||
|
57 | class RepoWrap(object): | |||
|
58 | """ | |||
|
59 | Fake object used to imitate RepoObject that audit logger requires | |||
|
60 | """ | |||
|
61 | ||||
|
62 | def __init__(self, repo_id=None, repo_name=None): | |||
|
63 | self.repo_id = repo_id | |||
|
64 | self.repo_name = repo_name | |||
|
65 | ||||
|
66 | ||||
55 | def _store_log(action_name, action_data, user_id, username, user_data, |
|
67 | def _store_log(action_name, action_data, user_id, username, user_data, | |
56 | ip_address, repository_id, repository_name): |
|
68 | ip_address, repository_id, repository_name): | |
57 | user_log = UserLog() |
|
69 | user_log = UserLog() | |
@@ -127,8 +139,13 b' def store(' | |||||
127 | 'email': user.email, |
|
139 | 'email': user.email, | |
128 | } |
|
140 | } | |
129 |
|
141 | |||
|
142 | repository_name = getattr(repo, 'repo_name', None) | |||
130 | repository_id = getattr(repo, 'repo_id', None) |
|
143 | repository_id = getattr(repo, 'repo_id', None) | |
131 | repository_name = getattr(repo, 'repo_name', None) |
|
144 | if not repository_id: | |
|
145 | # maybe we have repo_name ? Try to figure repo_id from repo_name | |||
|
146 | if repository_name: | |||
|
147 | repository_id = getattr( | |||
|
148 | Repository.get_by_repo_name(repository_name), 'repo_id', None) | |||
132 |
|
149 | |||
133 | user_log = _store_log( |
|
150 | user_log = _store_log( | |
134 | action_name=safe_unicode(action), |
|
151 | action_name=safe_unicode(action), |
@@ -30,6 +30,7 b' import logging' | |||||
30 | import rhodecode |
|
30 | import rhodecode | |
31 | from rhodecode import events |
|
31 | from rhodecode import events | |
32 | from rhodecode.lib import helpers as h |
|
32 | from rhodecode.lib import helpers as h | |
|
33 | from rhodecode.lib import audit_logger | |||
33 | from rhodecode.lib.utils import action_logger |
|
34 | from rhodecode.lib.utils import action_logger | |
34 | from rhodecode.lib.utils2 import safe_str |
|
35 | from rhodecode.lib.utils2 import safe_str | |
35 | from rhodecode.lib.exceptions import HTTPLockedRC, UserCreationError |
|
36 | from rhodecode.lib.exceptions import HTTPLockedRC, UserCreationError | |
@@ -156,6 +157,14 b' def post_pull(extras):' | |||||
156 | action = 'pull' |
|
157 | action = 'pull' | |
157 | action_logger(user, action, extras.repository, extras.ip, commit=True) |
|
158 | action_logger(user, action, extras.repository, extras.ip, commit=True) | |
158 |
|
159 | |||
|
160 | audit_user = audit_logger.UserWrap( | |||
|
161 | username=extras.username, | |||
|
162 | ip_addr=extras.ip) | |||
|
163 | audit_logger.store( | |||
|
164 | action='user.pull', action_data={ | |||
|
165 | 'user_agent': extras.user_agent}, | |||
|
166 | user=audit_user, commit=True) | |||
|
167 | ||||
159 | # Propagate to external components. |
|
168 | # Propagate to external components. | |
160 | if not is_shadow_repo(extras): |
|
169 | if not is_shadow_repo(extras): | |
161 | post_pull_extension(**extras) |
|
170 | post_pull_extension(**extras) | |
@@ -192,6 +201,16 b' def post_push(extras):' | |||||
192 | action_logger( |
|
201 | action_logger( | |
193 | extras.username, action, extras.repository, extras.ip, commit=True) |
|
202 | extras.username, action, extras.repository, extras.ip, commit=True) | |
194 |
|
203 | |||
|
204 | audit_user = audit_logger.UserWrap( | |||
|
205 | username=extras.username, | |||
|
206 | ip_addr=extras.ip) | |||
|
207 | repo = audit_logger.RepoWrap(repo_name=extras.repository) | |||
|
208 | audit_logger.store( | |||
|
209 | action='user.push', action_data={ | |||
|
210 | 'user_agent': extras.user_agent, | |||
|
211 | 'commit_ids': commit_ids[:10000]}, | |||
|
212 | user=audit_user, repo=repo, commit=True) | |||
|
213 | ||||
195 | # Propagate to external components. |
|
214 | # Propagate to external components. | |
196 | if not is_shadow_repo(extras): |
|
215 | if not is_shadow_repo(extras): | |
197 | post_push_extension( |
|
216 | post_push_extension( |
@@ -537,7 +537,9 b' class TestPullrequestsController:' | |||||
537 | pull_request, ChangesetStatus.STATUS_APPROVED) |
|
537 | pull_request, ChangesetStatus.STATUS_APPROVED) | |
538 |
|
538 | |||
539 | # Check the relevant log entries were added |
|
539 | # Check the relevant log entries were added | |
540 |
user_logs = UserLog.query() |
|
540 | user_logs = UserLog.query() \ | |
|
541 | .filter(UserLog.version == UserLog.VERSION_1) \ | |||
|
542 | .order_by('-user_log_id').limit(4) | |||
541 | actions = [log.action for log in user_logs] |
|
543 | actions = [log.action for log in user_logs] | |
542 | pr_commit_ids = PullRequestModel()._get_commit_ids(pull_request) |
|
544 | pr_commit_ids = PullRequestModel()._get_commit_ids(pull_request) | |
543 | expected_actions = [ |
|
545 | expected_actions = [ |
General Comments 0
You need to be logged in to leave comments.
Login now