Mercurial > hg > soundsoftware-site
comparison app/controllers/application_controller.rb @ 1516:b450a9d58aed redmine-2.4
Update to Redmine SVN revision 13356 on 2.4-stable branch
author | Chris Cannam |
---|---|
date | Tue, 09 Sep 2014 09:28:31 +0100 |
parents | e248c7af89ec |
children | dffacf8a6908 2e8063097240 |
comparison
equal
deleted
inserted
replaced
1494:e248c7af89ec | 1516:b450a9d58aed |
---|---|
42 | 42 |
43 def handle_unverified_request | 43 def handle_unverified_request |
44 unless api_request? | 44 unless api_request? |
45 super | 45 super |
46 cookies.delete(autologin_cookie_name) | 46 cookies.delete(autologin_cookie_name) |
47 self.logged_user = nil | |
47 render_error :status => 422, :message => "Invalid form authenticity token." | 48 render_error :status => 422, :message => "Invalid form authenticity token." |
48 end | 49 end |
49 end | 50 end |
50 | 51 |
51 before_filter :session_expiration, :user_setup, :check_if_login_required, :check_password_change, :set_localization | 52 before_filter :session_expiration, :user_setup, :check_if_login_required, :check_password_change, :set_localization |
373 url | 374 url |
374 end | 375 end |
375 | 376 |
376 def redirect_back_or_default(default) | 377 def redirect_back_or_default(default) |
377 back_url = params[:back_url].to_s | 378 back_url = params[:back_url].to_s |
378 if back_url.present? | 379 if back_url.present? && valid_back_url?(back_url) |
379 begin | 380 redirect_to(back_url) |
380 uri = URI.parse(back_url) | 381 return |
381 # do not redirect user to another host or to the login or register page | |
382 if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)}) | |
383 redirect_to(back_url) | |
384 return | |
385 end | |
386 rescue URI::InvalidURIError | |
387 logger.warn("Could not redirect to invalid URL #{back_url}") | |
388 # redirect to default | |
389 end | |
390 end | 382 end |
391 redirect_to default | 383 redirect_to default |
392 false | 384 false |
393 end | 385 end |
386 | |
387 # Returns true if back_url is a valid url for redirection, otherwise false | |
388 def valid_back_url?(back_url) | |
389 if CGI.unescape(back_url).include?('..') | |
390 return false | |
391 end | |
392 | |
393 begin | |
394 uri = URI.parse(back_url) | |
395 rescue URI::InvalidURIError | |
396 return false | |
397 end | |
398 | |
399 if uri.host.present? && uri.host != request.host | |
400 return false | |
401 end | |
402 | |
403 if uri.path.match(%r{/(login|account/register)}) | |
404 return false | |
405 end | |
406 | |
407 if relative_url_root.present? && !uri.path.starts_with?(relative_url_root) | |
408 return false | |
409 end | |
410 | |
411 return true | |
412 end | |
413 private :valid_back_url? | |
394 | 414 |
395 # Redirects to the request referer if present, redirects to args or call block otherwise. | 415 # Redirects to the request referer if present, redirects to args or call block otherwise. |
396 def redirect_to_referer_or(*args, &block) | 416 def redirect_to_referer_or(*args, &block) |
397 redirect_to :back | 417 redirect_to :back |
398 rescue ::ActionController::RedirectBackError | 418 rescue ::ActionController::RedirectBackError |
552 nil | 572 nil |
553 end | 573 end |
554 | 574 |
555 # Returns a string that can be used as filename value in Content-Disposition header | 575 # Returns a string that can be used as filename value in Content-Disposition header |
556 def filename_for_content_disposition(name) | 576 def filename_for_content_disposition(name) |
557 request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name | 577 request.env['HTTP_USER_AGENT'] =~ %r{(MSIE|Trident)} ? ERB::Util.url_encode(name) : name |
558 end | 578 end |
559 | 579 |
560 def api_request? | 580 def api_request? |
561 %w(xml json).include? params[:format] | 581 %w(xml json).include? params[:format] |
562 end | 582 end |