Show More
@@ -41,7 +41,6 b' from kallithea.lib.auth import LoginRequ' | |||||
41 | HasRepoGroupPermissionAny, HasRepoPermissionAnyDecorator |
|
41 | HasRepoGroupPermissionAny, HasRepoPermissionAnyDecorator | |
42 | from kallithea.lib.base import BaseRepoController, render |
|
42 | from kallithea.lib.base import BaseRepoController, render | |
43 | from kallithea.lib.utils import action_logger, repo_name_slug, jsonify |
|
43 | from kallithea.lib.utils import action_logger, repo_name_slug, jsonify | |
44 | from kallithea.lib.helpers import get_token |
|
|||
45 | from kallithea.lib.vcs import RepositoryError |
|
44 | from kallithea.lib.vcs import RepositoryError | |
46 | from kallithea.model.meta import Session |
|
45 | from kallithea.model.meta import Session | |
47 | from kallithea.model.db import User, Repository, UserFollowing, RepoGroup,\ |
|
46 | from kallithea.model.db import User, Repository, UserFollowing, RepoGroup,\ | |
@@ -516,23 +515,17 b' class ReposController(BaseRepoController' | |||||
516 | :param repo_name: |
|
515 | :param repo_name: | |
517 | """ |
|
516 | """ | |
518 |
|
517 | |||
519 | cur_token = request.POST.get('auth_token') |
|
518 | try: | |
520 | token = get_token() |
|
519 | repo_id = Repository.get_by_repo_name(repo_name).repo_id | |
521 | if cur_token == token: |
|
520 | user_id = User.get_default_user().user_id | |
522 | try: |
|
521 | self.scm_model.toggle_following_repo(repo_id, user_id) | |
523 | repo_id = Repository.get_by_repo_name(repo_name).repo_id |
|
522 | h.flash(_('Updated repository visibility in public journal'), | |
524 | user_id = User.get_default_user().user_id |
|
523 | category='success') | |
525 | self.scm_model.toggle_following_repo(repo_id, user_id) |
|
524 | Session().commit() | |
526 | h.flash(_('Updated repository visibility in public journal'), |
|
525 | except Exception: | |
527 | category='success') |
|
526 | h.flash(_('An error occurred during setting this' | |
528 | Session().commit() |
|
527 | ' repository in public journal'), | |
529 | except Exception: |
|
528 | category='error') | |
530 | h.flash(_('An error occurred during setting this' |
|
|||
531 | ' repository in public journal'), |
|
|||
532 | category='error') |
|
|||
533 |
|
||||
534 | else: |
|
|||
535 | h.flash(_('Token mismatch'), category='error') |
|
|||
536 | return redirect(url('edit_repo_advanced', repo_name=repo_name)) |
|
529 | return redirect(url('edit_repo_advanced', repo_name=repo_name)) | |
537 |
|
530 | |||
538 |
|
531 |
@@ -304,33 +304,28 b' class JournalController(BaseController):' | |||||
304 | @LoginRequired() |
|
304 | @LoginRequired() | |
305 | @NotAnonymous() |
|
305 | @NotAnonymous() | |
306 | def toggle_following(self): |
|
306 | def toggle_following(self): | |
307 |
|
|
307 | user_id = request.POST.get('follows_user_id') | |
308 | token = h.get_token() |
|
308 | if user_id: | |
309 | if cur_token == token: |
|
309 | try: | |
|
310 | self.scm_model.toggle_following_user(user_id, | |||
|
311 | self.authuser.user_id) | |||
|
312 | Session.commit() | |||
|
313 | return 'ok' | |||
|
314 | except Exception: | |||
|
315 | log.error(traceback.format_exc()) | |||
|
316 | raise HTTPBadRequest() | |||
310 |
|
317 | |||
311 |
|
|
318 | repo_id = request.POST.get('follows_repo_id') | |
312 |
|
|
319 | if repo_id: | |
313 |
|
|
320 | try: | |
314 |
|
|
321 | self.scm_model.toggle_following_repo(repo_id, | |
315 |
|
|
322 | self.authuser.user_id) | |
316 |
|
|
323 | Session.commit() | |
317 |
|
|
324 | return 'ok' | |
318 |
|
|
325 | except Exception: | |
319 |
|
|
326 | log.error(traceback.format_exc()) | |
320 |
|
|
327 | raise HTTPBadRequest() | |
321 |
|
328 | |||
322 | repo_id = request.POST.get('follows_repo_id') |
|
|||
323 | if repo_id: |
|
|||
324 | try: |
|
|||
325 | self.scm_model.toggle_following_repo(repo_id, |
|
|||
326 | self.authuser.user_id) |
|
|||
327 | Session.commit() |
|
|||
328 | return 'ok' |
|
|||
329 | except Exception: |
|
|||
330 | log.error(traceback.format_exc()) |
|
|||
331 | raise HTTPBadRequest() |
|
|||
332 |
|
||||
333 | log.debug('token mismatch %s vs %s' % (cur_token, token)) |
|
|||
334 | raise HTTPBadRequest() |
|
329 | raise HTTPBadRequest() | |
335 |
|
330 | |||
336 | @LoginRequired() |
|
331 | @LoginRequired() |
@@ -134,23 +134,6 b' def FID(raw_id, path):' | |||||
134 | return 'C-%s-%s' % (short_id(raw_id), md5(safe_str(path)).hexdigest()[:12]) |
|
134 | return 'C-%s-%s' % (short_id(raw_id), md5(safe_str(path)).hexdigest()[:12]) | |
135 |
|
135 | |||
136 |
|
136 | |||
137 | def get_token(): |
|
|||
138 | """Return the current authentication token, creating one if one doesn't |
|
|||
139 | already exist. |
|
|||
140 | """ |
|
|||
141 | token_key = "_authentication_token" |
|
|||
142 | from pylons import session |
|
|||
143 | if not token_key in session: |
|
|||
144 | try: |
|
|||
145 | token = hashlib.sha1(str(random.getrandbits(128))).hexdigest() |
|
|||
146 | except AttributeError: # Python < 2.4 |
|
|||
147 | token = hashlib.sha1(str(random.randrange(2 ** 128))).hexdigest() |
|
|||
148 | session[token_key] = token |
|
|||
149 | if hasattr(session, 'save'): |
|
|||
150 | session.save() |
|
|||
151 | return session[token_key] |
|
|||
152 |
|
||||
153 |
|
||||
154 | class _GetError(object): |
|
137 | class _GetError(object): | |
155 | """Get error from form_errors, and represent it as span wrapped error |
|
138 | """Get error from form_errors, and represent it as span wrapped error | |
156 | message |
|
139 | message |
@@ -458,20 +458,16 b' var _onSuccessFollow = function(target){' | |||||
458 | } |
|
458 | } | |
459 | } |
|
459 | } | |
460 |
|
460 | |||
461 |
var toggleFollowingRepo = function(target, follows_repo_id |
|
461 | var toggleFollowingRepo = function(target, follows_repo_id){ | |
462 | var args = 'follows_repo_id=' + follows_repo_id; |
|
462 | var args = 'follows_repo_id=' + follows_repo_id; | |
463 | args += '&auth_token=' + token; |
|
|||
464 | if(user_id != undefined){ |
|
|||
465 | args +="&user_id=" + user_id; |
|
|||
466 | } |
|
|||
467 | $.post(TOGGLE_FOLLOW_URL, args, function(data){ |
|
463 | $.post(TOGGLE_FOLLOW_URL, args, function(data){ | |
468 | _onSuccessFollow(target); |
|
464 | _onSuccessFollow(target); | |
469 | }); |
|
465 | }); | |
470 | return false; |
|
466 | return false; | |
471 | }; |
|
467 | }; | |
472 |
|
468 | |||
473 |
var showRepoSize = function(target, repo_name |
|
469 | var showRepoSize = function(target, repo_name){ | |
474 |
var args = ' |
|
470 | var args = ''; | |
475 |
|
471 | |||
476 | if(!$("#" + target).hasClass('loaded')){ |
|
472 | if(!$("#" + target).hasClass('loaded')){ | |
477 | $("#" + target).html(_TM['Loading ...']); |
|
473 | $("#" + target).html(_TM['Loading ...']); |
@@ -22,7 +22,6 b'' | |||||
22 | <h3>${_('Public Journal Visibility')}</h3> |
|
22 | <h3>${_('Public Journal Visibility')}</h3> | |
23 | ${h.form(url('edit_repo_advanced_journal', repo_name=c.repo_info.repo_name), method='put')} |
|
23 | ${h.form(url('edit_repo_advanced_journal', repo_name=c.repo_info.repo_name), method='put')} | |
24 | <div class="form"> |
|
24 | <div class="form"> | |
25 | ${h.hidden('auth_token',str(h.get_token()))} |
|
|||
26 | <div class="field"> |
|
25 | <div class="field"> | |
27 | %if c.in_public_journal: |
|
26 | %if c.in_public_journal: | |
28 | <button class="btn btn-small" type="submit"> |
|
27 | <button class="btn btn-small" type="submit"> |
@@ -176,7 +176,7 b'' | |||||
176 | ## also it feels like a job for the controller |
|
176 | ## also it feels like a job for the controller | |
177 | %if c.authuser.username != 'default': |
|
177 | %if c.authuser.username != 'default': | |
178 | <li> |
|
178 | <li> | |
179 |
<a class="${follow_class()}" onclick="javascript:toggleFollowingRepo(this,${c.db_repo.repo_id} |
|
179 | <a class="${follow_class()}" onclick="javascript:toggleFollowingRepo(this,${c.db_repo.repo_id});"> | |
180 | <span class="show-follow"><i class="icon-heart-empty"></i> ${_('Follow')}</span> |
|
180 | <span class="show-follow"><i class="icon-heart-empty"></i> ${_('Follow')}</span> | |
181 | <span class="show-following"><i class="icon-heart"></i> ${_('Unfollow')}</span> |
|
181 | <span class="show-following"><i class="icon-heart"></i> ${_('Unfollow')}</span> | |
182 | </a> |
|
182 | </a> |
@@ -212,6 +212,6 b'' | |||||
212 |
|
212 | |||
213 | <%def name="toggle_follow(repo_id)"> |
|
213 | <%def name="toggle_follow(repo_id)"> | |
214 | <span id="follow_toggle_${repo_id}" class="following" title="${_('Stop following this repository')}" |
|
214 | <span id="follow_toggle_${repo_id}" class="following" title="${_('Stop following this repository')}" | |
215 |
onclick="javascript:toggleFollowingRepo(this, ${repo_id} |
|
215 | onclick="javascript:toggleFollowingRepo(this, ${repo_id})"> | |
216 | </span> |
|
216 | </span> | |
217 | </%def> |
|
217 | </%def> |
@@ -157,7 +157,7 b" summary = lambda n:{False:'summary-short" | |||||
157 |
|
157 | |||
158 | %if c.authuser.username != 'default': |
|
158 | %if c.authuser.username != 'default': | |
159 | <li class="repo_size"> |
|
159 | <li class="repo_size"> | |
160 |
<a href="#" onclick="javascript:showRepoSize('repo_size_2','${c.db_repo.repo_name}' |
|
160 | <a href="#" onclick="javascript:showRepoSize('repo_size_2','${c.db_repo.repo_name}')"><i class="icon-ruler"></i> ${_('Repository Size')}</a> | |
161 | <span class="stats-bullet" id="repo_size_2"></span> |
|
161 | <span class="stats-bullet" id="repo_size_2"></span> | |
162 | </li> |
|
162 | </li> | |
163 | %endif |
|
163 | %endif |
@@ -23,8 +23,7 b' class TestJournalController(TestControll' | |||||
23 | # |
|
23 | # | |
24 | # response = self.app.post(url(controller='journal', |
|
24 | # response = self.app.post(url(controller='journal', | |
25 | # action='toggle_following'), |
|
25 | # action='toggle_following'), | |
26 |
# {' |
|
26 | # {'follows_repo_id':repo.repo_id}) | |
27 | # 'follows_repo_id':repo.repo_id}) |
|
|||
28 |
|
27 | |||
29 | def test_start_following_repository(self): |
|
28 | def test_start_following_repository(self): | |
30 | self.log_user() |
|
29 | self.log_user() |
General Comments 0
You need to be logged in to leave comments.
Login now