X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/20ae3232cd60b91ab284a068c1d4e452fca854b6..4ac48d2cb5cd2197d8f2702bdc7b17072b2fdc85:/app/controllers/application.rb diff --git a/app/controllers/application.rb b/app/controllers/application.rb index fd6ea7866..085a3fa9f 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -7,7 +7,7 @@ class ApplicationController < ActionController::Base end def require_user - redirect_to :controller => 'user', :action => 'login' unless @user + redirect_to :controller => 'user', :action => 'login', :referer => request.request_uri unless @user end def authorize(realm='Web Password', errormessage="Couldn't authenticate you") @@ -20,7 +20,7 @@ class ApplicationController < ActionController::Base else @user = User.authenticate(username, passwd) # basic auth end - + # handle authenticate pass/fail if @user # user exists and password is correct ... horray! @@ -34,17 +34,26 @@ class ApplicationController < ActionController::Base # no auth, the user does not exist or the password was wrong response.headers["Status"] = "Unauthorized" response.headers["WWW-Authenticate"] = "Basic realm=\"#{realm}\"" - render_text(errormessage, 401) # :unauthorized + render :text => errormessage, :status => :unauthorized + return false end end + def check_availability + if API_READONLY + response.headers['Error'] = "Database offline for maintenance" + render :nothing => true, :status => :service_unavailable + return false + end + end + # Report and error to the user # (If anyone ever fixes Rails so it can set a http status "reason phrase", # rather than only a status code and having the web engine make up a # phrase from that, we can also put the error message into the status # message. For now, rails won't let us) def report_error(message) - render :nothing => true, :status => 400 + render :nothing => true, :status => :bad_request # Todo: some sort of escaping of problem characters in the message response.headers['Error'] = message end @@ -59,7 +68,7 @@ class ApplicationController < ActionController::Base end # only basic authentication supported if authdata and authdata[0] == 'Basic' - user, pass = Base64.decode64(authdata[1]).split(':')[0..1] + user, pass = Base64.decode64(authdata[1]).split(':',2) end return [user, pass] end