diff options
author | Eric Davis <edavis@littlestreamsoftware.com> | 2009-12-23 06:27:38 +0000 |
---|---|---|
committer | Eric Davis <edavis@littlestreamsoftware.com> | 2009-12-23 06:27:38 +0000 |
commit | e07e9d8bfed47b7af782075485437a34e7dc20f8 (patch) | |
tree | b59edd9542627fc67e8885473c2a8f8c0cfa955c /app | |
parent | baa1ad42560fb9bfd6f99cd3374c4b5c1e7ae668 (diff) | |
download | redmine-e07e9d8bfed47b7af782075485437a34e7dc20f8.tar.gz redmine-e07e9d8bfed47b7af782075485437a34e7dc20f8.zip |
Added support for HTTP Basic access to the API. (#3920)
A user can authenticate using either their:
* username/password
* api-key/random
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3219 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/application_controller.rb | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 40adff4bc..45aeb9955 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -70,11 +70,19 @@ class ApplicationController < ActionController::Base elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action]) # RSS key authentication does not start a session User.find_by_rss_key(params[:key]) - elsif ['xml', 'json'].include?(params[:format]) && params[:key] && accept_key_auth_actions.include?(params[:action]) - User.find_by_api_key(params[:key]) + elsif ['xml', 'json'].include?(params[:format]) && accept_key_auth_actions.include?(params[:action]) + if params[:key].present? + # Use API key + User.find_by_api_key(params[:key]) + else + # HTTP Basic, either username/password or API key/random + authenticate_with_http_basic do |username, password| + User.try_to_login(username, password) || User.find_by_api_key(username) + end + end end end - + # Sets the logged in user def logged_user=(user) reset_session @@ -118,6 +126,7 @@ class ApplicationController < ActionController::Base end respond_to do |format| format.html { redirect_to :controller => "account", :action => "login", :back_url => url } + format.atom { redirect_to :controller => "account", :action => "login", :back_url => url } format.xml { head :unauthorized } format.json { head :unauthorized } end |