##// END OF EJS Templates
controllers: remove old auth_token checks - it was only partial CSRF protection
Mads Kiilerich -
r4990:959a9fa7 default
parent child Browse files
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,9 +515,6 b' class ReposController(BaseRepoController'
516 :param repo_name:
515 :param repo_name:
517 """
516 """
518
517
519 cur_token = request.POST.get('auth_token')
520 token = get_token()
521 if cur_token == token:
522 try:
518 try:
523 repo_id = Repository.get_by_repo_name(repo_name).repo_id
519 repo_id = Repository.get_by_repo_name(repo_name).repo_id
524 user_id = User.get_default_user().user_id
520 user_id = User.get_default_user().user_id
@@ -530,9 +526,6 b' class ReposController(BaseRepoController'
530 h.flash(_('An error occurred during setting this'
526 h.flash(_('An error occurred during setting this'
531 ' repository in public journal'),
527 ' repository in public journal'),
532 category='error')
528 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,10 +304,6 b' class JournalController(BaseController):'
304 @LoginRequired()
304 @LoginRequired()
305 @NotAnonymous()
305 @NotAnonymous()
306 def toggle_following(self):
306 def toggle_following(self):
307 cur_token = request.POST.get('auth_token')
308 token = h.get_token()
309 if cur_token == token:
310
311 user_id = request.POST.get('follows_user_id')
307 user_id = request.POST.get('follows_user_id')
312 if user_id:
308 if user_id:
313 try:
309 try:
@@ -330,7 +326,6 b' class JournalController(BaseController):'
330 log.error(traceback.format_exc())
326 log.error(traceback.format_exc())
331 raise HTTPBadRequest()
327 raise HTTPBadRequest()
332
328
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, token, user_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 += '&amp;auth_token=' + token;
464 if(user_id != undefined){
465 args +="&amp;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, token){
469 var showRepoSize = function(target, repo_name){
474 var args = 'auth_token=' + token;
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},'${str(h.get_token())}');">
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},'${str(h.get_token())}')">
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}','${str(h.get_token())}')"><i class="icon-ruler"></i> ${_('Repository Size')}</a>
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 # {'auth_token':get_token(session),
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