Use dynamic error pages built through the asset pipeline

Fixes #1241
This commit is contained in:
Tom Hughes
2018-08-01 18:56:11 +01:00
parent 49d5c68600
commit 5fa0aebe9f
14 changed files with 88 additions and 38 deletions

View File

@ -54,7 +54,7 @@ Metrics/AbcSize:
# Offense count: 41 # Offense count: 41
# Configuration parameters: CountComments, ExcludedMethods. # Configuration parameters: CountComments, ExcludedMethods.
Metrics/BlockLength: Metrics/BlockLength:
Max: 258 Max: 261
# Offense count: 11 # Offense count: 11
# Configuration parameters: CountBlocks. # Configuration parameters: CountBlocks.

View File

@ -0,0 +1,8 @@
.logo {
float: left;
margin: 10px;
}
.details {
float: left;
}

View File

@ -0,0 +1,15 @@
class ErrorsController < ApplicationController
layout "error"
def forbidden
render :status => :forbidden
end
def not_found
render :status => :not_found
end
def internal_server_error
render :status => :internal_server_error
end
end

View File

@ -0,0 +1,3 @@
<h1>Forbidden</h1>
<p>The operation you requested on the OpenStreetMap server is only available to administrators (HTTP 403)</p>
<p>Feel free to <a href="http://wiki.openstreetmap.org/wiki/Contact" title="Various contact channels explained">contact</a> the OpenStreetMap community if you have found a broken link / bug. Make a note of the exact URL of your request.</p>

View File

@ -0,0 +1,4 @@
<h1>Application error</h1>
<p>The OpenStreetMap server encountered an unexpected condition that prevented it from fulfilling the request (HTTP 500)</p>
<p>Feel free to <a href="http://wiki.openstreetmap.org/wiki/Contact" title="Various contact channels explained">contact</a> the OpenStreetMap community if your problem persists. Make a note of the exact URL / post data of your request.</p>
<p>This may be a problem in our Ruby On Rails code. 500 occurs with exceptions thrown outside of an action (like in Dispatcher setups or broken Ruby code)</p>

View File

@ -0,0 +1,3 @@
<h1>File not found</h1>
<p>Couldn't find a file/directory/API operation by that name on the OpenStreetMap server (HTTP 404)</p>
<p>Feel free to <a href="http://wiki.openstreetmap.org/wiki/Contact" title="Various contact channels explained">contact</a> the OpenStreetMap community if you have found a broken link / bug. Make a note of the exact URL of your request.</p>

View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<title>OpenStreetMap</title>
<%= stylesheet_link_tag "errors", :media=> "screen" %>
</head>
<body>
<%= image_tag "osm_logo.png", :class => "logo" %>
<div class="details">
<%= yield %>
</div>
</body>
</html>

View File

@ -19,6 +19,7 @@ Rails.application.config.assets.precompile += %w[screen-rtl.css print-rtl.css]
Rails.application.config.assets.precompile += %w[leaflet-all.css leaflet.ie.css] Rails.application.config.assets.precompile += %w[leaflet-all.css leaflet.ie.css]
Rails.application.config.assets.precompile += %w[id.js id.css] Rails.application.config.assets.precompile += %w[id.js id.css]
Rails.application.config.assets.precompile += %w[embed.js embed.css] Rails.application.config.assets.precompile += %w[embed.js embed.css]
Rails.application.config.assets.precompile += %w[errors.css]
Rails.application.config.assets.precompile += %w[html5shiv.js] Rails.application.config.assets.precompile += %w[html5shiv.js]
Rails.application.config.assets.precompile += %w[images/marker-*.png img/*-handle.png] Rails.application.config.assets.precompile += %w[images/marker-*.png img/*-handle.png]
Rails.application.config.assets.precompile += %w[swfobject.js expressInstall.swf] Rails.application.config.assets.precompile += %w[swfobject.js expressInstall.swf]

View File

@ -0,0 +1 @@
Rails.application.config.exceptions_app = Rails.application.routes

View File

@ -313,4 +313,9 @@ OpenStreetMap::Application.routes.draw do
# redactions # redactions
resources :redactions resources :redactions
# errors
match "/403", :to => "errors#forbidden", :via => :all
match "/404", :to => "errors#not_found", :via => :all
match "/500", :to => "errors#internal_server_error", :via => :all
end end

View File

@ -1,12 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<img src="/assets/osm_logo.png" style="float:left; margin:10px">
<div style="float:left;">
<h1>Forbidden</h1>
<p>The operation you requested on the OpenStreetMap server is only available to administrators (HTTP 403)</p>
<p>Feel free to <a href="http://wiki.openstreetmap.org/wiki/Contact" title="Various contact channels explained">contact</a> the OpenStreetMap community if you have found a broken link / bug. Make a note of the exact URL of your request.</p>
</div>
</body>
</html>

View File

@ -1,12 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<img src="/assets/osm_logo.png" style="float:left; margin:10px">
<div style="float:left;">
<h1>File not found</h1>
<p>Couldn't find a file/directory/API operation by that name on the OpenStreetMap server (HTTP 404)</p>
<p>Feel free to <a href="http://wiki.openstreetmap.org/wiki/Contact" title="Various contact channels explained">contact</a> the OpenStreetMap community if you have found a broken link / bug. Make a note of the exact URL of your request.</p>
</div>
</body>
</html>

View File

@ -1,13 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<img src="/assets/osm_logo.png" style="float:left; margin:10px">
<div style="float:left;">
<h1>Application error</h1>
<p>The OpenStreetMap server encountered an unexpected condition that prevented it from fulfilling the request (HTTP 500)</p>
<p>Feel free to <a href="http://wiki.openstreetmap.org/wiki/Contact" title="Various contact channels explained">contact</a> the OpenStreetMap community if your problem persists. Make a note of the exact URL / post data of your request.</p>
<p>This may be a problem in our Ruby On Rails code. 500 occurs with exceptions thrown outside of an action (like in Dispatcher setups or broken Ruby code)</p>
</div>
</body>
</html>

View File

@ -0,0 +1,33 @@
require "test_helper"
class ErrorsControllerTest < ActionController::TestCase
def test_routes
assert_routing(
{ :path => "/403", :method => :get },
{ :controller => "errors", :action => "forbidden" }
)
assert_routing(
{ :path => "/404", :method => :get },
{ :controller => "errors", :action => "not_found" }
)
assert_routing(
{ :path => "/500", :method => :get },
{ :controller => "errors", :action => "internal_server_error" }
)
end
def test_forbidden
get :forbidden
assert_response :forbidden
end
def test_not_found
get :not_found
assert_response :not_found
end
def test_internal_server_error
get :internal_server_error
assert_response :internal_server_error
end
end