if session[:user]
@user = User.where(:id => session[:user]).where("status IN ('active', 'confirmed', 'suspended')").first
- if @user.status == "suspended"
+ if @user.display_name != cookies["_osm_username"]
+ logger.info "Session user '#{@user.display_name}' does not match cookie user '#{cookies['_osm_username']}'"
+ reset_session
+ @user = nil
+ elsif @user.status == "suspended"
session.delete(:user)
session_expires_automatically
end
rescue Exception => ex
logger.info("Exception authorizing user: #{ex.to_s}")
+ reset_session
@user = nil
end
end
end
- I18n.locale = request.compatible_language_from(I18n.available_locales)
+ I18n.locale = request.compatible_language_from(I18n.available_locales) || I18n.default_locale
response.headers['Content-Language'] = I18n.locale.to_s
end
##
# wrap an api call in a timeout
def api_call_timeout
- SystemTimer.timeout_after(API_TIMEOUT) do
+ OSM::Timer.timeout(API_TIMEOUT) do
yield
end
rescue Timeout::Error
##
# wrap a web page in a timeout
def web_timeout
- SystemTimer.timeout_after(WEB_TIMEOUT) do
+ OSM::Timer.timeout(WEB_TIMEOUT) do
yield
end
- rescue ActionView::TemplateError => ex
- if ex.original_exception.is_a?(Timeout::Error)
+ rescue ActionView::Template::Error => ex
+ ex = ex.original_exception
+
+ if ex.is_a?(ActiveRecord::StatementInvalid) and ex.message =~ /^Timeout::Error/
+ ex = Timeout::Error.new
+ end
+
+ if ex.is_a?(Timeout::Error)
render :action => "timeout"
else
raise
return [user, pass]
end
+ # used by oauth plugin to get the current user
+ def current_user
+ @user
+ end
+
# used by oauth plugin to set the current user
def current_user=(user)
@user=user