+ rescue Timeout::Error
+ raise OSM::APITimeoutError
+ end
+
+ ##
+ # wrap a web page in a timeout
+ def web_timeout
+ OSM::Timer.timeout(WEB_TIMEOUT) do
+ yield
+ end
+ rescue ActionView::Template::Error => ex
+ ex = ex.original_exception
+
+ if ex.is_a?(ActiveRecord::StatementInvalid) and ex.message =~ /execution expired/
+ ex = Timeout::Error.new
+ end
+
+ if ex.is_a?(Timeout::Error)
+ render :action => "timeout"
+ else
+ raise
+ end
+ rescue Timeout::Error
+ render :action => "timeout"
+ end
+
+ ##
+ # is the requestor logged in?
+ def logged_in?
+ !@user.nil?
+ end
+
+ ##
+ # ensure that there is a "this_user" instance variable
+ def lookup_this_user
+ unless @this_user = User.active.find_by_display_name(params[:display_name])
+ render_unknown_user params[:display_name]
+ end
+ end
+
+ ##
+ # render a "no such user" page
+ def render_unknown_user(name)
+ @title = t "user.no_such_user.title"
+ @not_found_user = name
+
+ respond_to do |format|
+ format.html { render :template => "user/no_such_user", :status => :not_found }
+ format.all { render :text => "", :status => :not_found }
+ end