Added error pages generator
This commit is contained in:
parent
c279c449df
commit
2b229f4e95
9 changed files with 123 additions and 400 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
dist
|
dist
|
||||||
|
dist_error
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="fr">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
|
||||||
|
|
||||||
<title>401 - Unauthorized</title>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
*, *::before, *::after {
|
|
||||||
box-sizing: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
color: #000000de;
|
|
||||||
font-family: Inter, sans-serif;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2 {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 .2em;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
color: #d50000;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
text-align: left;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
display: block;
|
|
||||||
border-top: 5px #dedede solid;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote::after, blockquote::before {
|
|
||||||
font-weight: 800;
|
|
||||||
color: #dedede;
|
|
||||||
}
|
|
||||||
blockquote::before {
|
|
||||||
content: "«";
|
|
||||||
}
|
|
||||||
blockquote::after {
|
|
||||||
content: "»";
|
|
||||||
}
|
|
||||||
|
|
||||||
figcaption {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<meta name="msapplication-TileColor" content="#ffffff">
|
|
||||||
<meta name="theme-color" content="#ffffff">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>401</h1>
|
|
||||||
<h2>Non Autorisé</h2>
|
|
||||||
<figure>
|
|
||||||
<blockquote cite="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">
|
|
||||||
The request requires user authentication.
|
|
||||||
</blockquote>
|
|
||||||
<figcaption><cite>HTTP/1.1 Status Code Definitions</cite></figcaption>
|
|
||||||
</figure>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,80 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="fr">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
|
||||||
|
|
||||||
<title>403 - Forbidden</title>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
*, *::before, *::after {
|
|
||||||
box-sizing: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
color: #000000de;
|
|
||||||
font-family: Inter, sans-serif;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2 {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 .2em;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
color: #d50000;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
text-align: left;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
display: block;
|
|
||||||
border-top: 5px #dedede solid;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote::after, blockquote::before {
|
|
||||||
font-weight: 800;
|
|
||||||
color: #dedede;
|
|
||||||
}
|
|
||||||
blockquote::before {
|
|
||||||
content: "«";
|
|
||||||
}
|
|
||||||
blockquote::after {
|
|
||||||
content: "»";
|
|
||||||
}
|
|
||||||
|
|
||||||
figcaption {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<meta name="msapplication-TileColor" content="#ffffff">
|
|
||||||
<meta name="theme-color" content="#ffffff">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>403</h1>
|
|
||||||
<h2>Interdit</h2>
|
|
||||||
<figure>
|
|
||||||
<blockquote cite="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">
|
|
||||||
The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated.
|
|
||||||
</blockquote>
|
|
||||||
<figcaption><cite>HTTP/1.1 Status Code Definitions</cite></figcaption>
|
|
||||||
</figure>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,80 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="fr">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
|
||||||
|
|
||||||
<title>404 - Not Found</title>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
*, *::before, *::after {
|
|
||||||
box-sizing: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
color: #000000de;
|
|
||||||
font-family: Inter, sans-serif;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2 {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 .2em;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
color: #d50000;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
text-align: left;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
display: block;
|
|
||||||
border-top: 5px #dedede solid;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote::after, blockquote::before {
|
|
||||||
font-weight: 800;
|
|
||||||
color: #dedede;
|
|
||||||
}
|
|
||||||
blockquote::before {
|
|
||||||
content: "«";
|
|
||||||
}
|
|
||||||
blockquote::after {
|
|
||||||
content: "»";
|
|
||||||
}
|
|
||||||
|
|
||||||
figcaption {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<meta name="msapplication-TileColor" content="#ffffff">
|
|
||||||
<meta name="theme-color" content="#ffffff">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>404</h1>
|
|
||||||
<h2>Introuvable</h2>
|
|
||||||
<figure>
|
|
||||||
<blockquote cite="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">
|
|
||||||
The server has not found anything matching the Request-URI.
|
|
||||||
</blockquote>
|
|
||||||
<figcaption><cite>HTTP/1.1 Status Code Definitions</cite></figcaption>
|
|
||||||
</figure>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,80 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="fr">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
|
||||||
|
|
||||||
<title>500 - Internal Server Error</title>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
*, *::before, *::after {
|
|
||||||
box-sizing: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
color: #000000de;
|
|
||||||
font-family: Inter, sans-serif;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2 {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 .2em;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
color: #d50000;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
text-align: left;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
display: block;
|
|
||||||
border-top: 5px #dedede solid;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote::after, blockquote::before {
|
|
||||||
font-weight: 800;
|
|
||||||
color: #dedede;
|
|
||||||
}
|
|
||||||
blockquote::before {
|
|
||||||
content: "«";
|
|
||||||
}
|
|
||||||
blockquote::after {
|
|
||||||
content: "»";
|
|
||||||
}
|
|
||||||
|
|
||||||
figcaption {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<meta name="msapplication-TileColor" content="#ffffff">
|
|
||||||
<meta name="theme-color" content="#ffffff">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>500</h1>
|
|
||||||
<h2>Erreur Serveur Interne</h2>
|
|
||||||
<figure>
|
|
||||||
<blockquote cite="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">
|
|
||||||
The server encountered an unexpected condition which prevented it from fulfilling the request.
|
|
||||||
</blockquote>
|
|
||||||
<figcaption><cite>HTTP/1.1 Status Code Definitions</cite></figcaption>
|
|
||||||
</figure>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,80 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="fr">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
|
||||||
|
|
||||||
<title>502 - Bad Gateway</title>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
*, *::before, *::after {
|
|
||||||
box-sizing: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
color: #000000de;
|
|
||||||
font-family: Inter, sans-serif;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2 {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 .2em;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
color: #d50000;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
text-align: left;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
display: block;
|
|
||||||
border-top: 5px #dedede solid;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote::after, blockquote::before {
|
|
||||||
font-weight: 800;
|
|
||||||
color: #dedede;
|
|
||||||
}
|
|
||||||
blockquote::before {
|
|
||||||
content: "«";
|
|
||||||
}
|
|
||||||
blockquote::after {
|
|
||||||
content: "»";
|
|
||||||
}
|
|
||||||
|
|
||||||
figcaption {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<meta name="msapplication-TileColor" content="#ffffff">
|
|
||||||
<meta name="theme-color" content="#ffffff">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>502</h1>
|
|
||||||
<h2>Passerelle Défectueuse</h2>
|
|
||||||
<figure>
|
|
||||||
<blockquote cite="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">
|
|
||||||
The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.
|
|
||||||
</blockquote>
|
|
||||||
<figcaption><cite>HTTP/1.1 Status Code Definitions</cite></figcaption>
|
|
||||||
</figure>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
45
generate_errors.py
Normal file
45
generate_errors.py
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
from pprint import pp
|
||||||
|
from pathlib import Path
|
||||||
|
from urllib import request
|
||||||
|
import re
|
||||||
|
|
||||||
|
src = Path('src')
|
||||||
|
root = src.joinpath('error')
|
||||||
|
with root.joinpath('root.html').open('r') as root_file:
|
||||||
|
root_html = root_file.read()
|
||||||
|
with root.joinpath('root.css').open('r') as root_file:
|
||||||
|
root_css = root_file.read()
|
||||||
|
|
||||||
|
error = Path('dist_error')
|
||||||
|
error.mkdir(exist_ok=True)
|
||||||
|
|
||||||
|
for x in error.rglob('*'):
|
||||||
|
if x.is_file() or x.is_symlink(): x.unlink()
|
||||||
|
|
||||||
|
req = request.Request(
|
||||||
|
'https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html',
|
||||||
|
method='GET')
|
||||||
|
|
||||||
|
with request.urlopen(req) as res:
|
||||||
|
raw = res.read().decode('utf-8')
|
||||||
|
|
||||||
|
codes = (re.finditer(r"(?s)<h3><a id='sec10\.[0-9]\.[0-9]+'>"
|
||||||
|
r'10\.[0-9]\.[0-9]+</a>'
|
||||||
|
r'\s*([0-9]+)\s([a-zA-Z\s]+)</h3>\s*<p>(.*?)</p>', raw))
|
||||||
|
|
||||||
|
nginx_head = ''
|
||||||
|
nginx_body = ''
|
||||||
|
|
||||||
|
for item in codes:
|
||||||
|
code, title, desc = item.groups()
|
||||||
|
with error.joinpath(f'{code}.html').open('w') as html:
|
||||||
|
html.write(root_html.format(code=code, title=title, desc=desc, style=root_css))
|
||||||
|
nginx_head += f'error_page {code} @error{code};\n'
|
||||||
|
nginx_body += f'location @error{code} {{\n'\
|
||||||
|
f'root {error.resolve()};\n'\
|
||||||
|
f'try_files /{code}.html /{code}.html;\n'\
|
||||||
|
'internal;}\n'
|
||||||
|
|
||||||
|
with error.joinpath(f'nginx.conf').open('w') as nginx_file:
|
||||||
|
nginx_file.write(f'{nginx_head}\n{nginx_body}\n\n'\
|
||||||
|
'proxy_intercept_errors on;')
|
51
src/error/root.css
Normal file
51
src/error/root.css
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
html {
|
||||||
|
box-sizing: border-box;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
*, *::before, *::after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
color: #000000de;
|
||||||
|
font-family: Inter, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,h2 {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0 .2em;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
color: #d50000;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
text-align: left;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
display: block;
|
||||||
|
border-top: 5px #dedede solid;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote::after, blockquote::before {
|
||||||
|
font-weight: 800;
|
||||||
|
color: #dedede;
|
||||||
|
}
|
||||||
|
blockquote::before {
|
||||||
|
content: "«";
|
||||||
|
}
|
||||||
|
blockquote::after {
|
||||||
|
content: "»";
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
text-align: right;
|
||||||
|
}
|
26
src/error/root.html
Normal file
26
src/error/root.html
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
|
|
||||||
|
<title>{code} - {title}</title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
{style}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<meta name="msapplication-TileColor" content="#ffffff">
|
||||||
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>{code}</h1>
|
||||||
|
<h2>{title}</h2>
|
||||||
|
<figure>
|
||||||
|
<blockquote cite="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">
|
||||||
|
{desc}
|
||||||
|
</blockquote>
|
||||||
|
<figcaption><cite>HTTP/1.1 Status Code Definitions</cite></figcaption>
|
||||||
|
</figure>
|
||||||
|
</body>
|
||||||
|
</html>
|
Reference in a new issue