bunkerweb 1.4.0
This commit is contained in:
47
core/errors/confs/server-http/errors.conf
Normal file
47
core/errors/confs/server-http/errors.conf
Normal file
@@ -0,0 +1,47 @@
|
||||
{% if ERRORS != "" %}
|
||||
{% for element in ERRORS.split(" ") %}
|
||||
{% set code = element.split("=")[0] %}
|
||||
{% set page = element.split("=")[1] %}
|
||||
error_page {{ code }} {{ page }};
|
||||
|
||||
location = {{ page }} {
|
||||
root {% if ROOT_FOLDER == "" %}/opt/bunkerweb/www/{% if MULTISITE == "yes" %}{{ SERVER_NAME.split(" ")[0] }}{% endif %}{% else %}{{ ROOT_FOLDER }}{% endif %};
|
||||
modsecurity off;
|
||||
internal;
|
||||
}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% set default_errors = ["400", "401", "403", "404", "405", "413", "429", "500", "501", "502", "503", "504"] %}
|
||||
|
||||
{% for default_error in default_errors %}
|
||||
{% if not default_error + "=" in ERRORS +%}
|
||||
{% if default_error == "405" +%}
|
||||
error_page 405 =200 @405;
|
||||
{% else +%}
|
||||
error_page {{ default_error }} @{{ default_error }};
|
||||
{% endif +%}
|
||||
location @{{ default_error }} {
|
||||
auth_basic off;
|
||||
internal;
|
||||
modsecurity off;
|
||||
default_type 'text/html';
|
||||
content_by_lua_block {
|
||||
local logger = require "logger"
|
||||
local errors = require "errors.errors"
|
||||
local html, err
|
||||
if ngx.status == 200 then
|
||||
html, err = errors.error_html(tostring(405))
|
||||
else
|
||||
html, err = errors.error_html(tostring(ngx.status))
|
||||
end
|
||||
if not html then
|
||||
logger.log(ngx.ERR, "ERRORS", "Error while computing HTML error template for {{ default_error }} : " .. err)
|
||||
else
|
||||
ngx.say(html)
|
||||
end
|
||||
}
|
||||
}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
124
core/errors/errors.lua
Normal file
124
core/errors/errors.lua
Normal file
@@ -0,0 +1,124 @@
|
||||
local _M = {}
|
||||
_M.__index = _M
|
||||
|
||||
local utils = require "utils"
|
||||
local datastore = require "datastore"
|
||||
local logger = require "logger"
|
||||
local cjson = require "cjson"
|
||||
|
||||
function _M.new()
|
||||
local self = setmetatable({}, _M)
|
||||
return self, nil
|
||||
end
|
||||
|
||||
function _M:init()
|
||||
-- Save default errors into datastore
|
||||
local default_errors = {
|
||||
["400"] = {
|
||||
title = "400 - Bad Request",
|
||||
body1 = "Bad Request",
|
||||
body2 = "400",
|
||||
body3 = "The server did not understand the request."
|
||||
},
|
||||
["401"] = {
|
||||
title = "401 - Not Authorized",
|
||||
body1 = "Not Authorized",
|
||||
body2 = "401",
|
||||
body3 = "Valid authentication credentials needed for the target resource."
|
||||
},
|
||||
["403"] = {
|
||||
title = "403 - Forbidden",
|
||||
body1 = "Forbidden",
|
||||
body2 = "403",
|
||||
body3 = "Access is forbidden to the requested page."
|
||||
},
|
||||
["404"] = {
|
||||
title = "404 - Not Found",
|
||||
body1 = "Not Found",
|
||||
body2 = "404",
|
||||
body3 = "The server cannot find the requested page."
|
||||
},
|
||||
["405"] = {
|
||||
title = "405 - Method Not Allowed",
|
||||
body1 = "Method Not Allowed",
|
||||
body2 = "405",
|
||||
body3 = "The method specified in the request is not allowed."
|
||||
},
|
||||
["413"] = {
|
||||
title = "413 - Request Entity Too Large",
|
||||
body1 = "Request Entity Too Large",
|
||||
body2 = "413",
|
||||
body3 = "The server will not accept the request, because the request entity is too large."
|
||||
},
|
||||
["429"] = {
|
||||
title = "429 - Too Many Requests",
|
||||
body1 = "Too Many Requests",
|
||||
body2 = "429",
|
||||
body3 = "Too many requests sent in a given amount of time, try again later."
|
||||
},
|
||||
["500"] = {
|
||||
title = "500 - Internal Server Error",
|
||||
body1 = "Internal Server Error",
|
||||
body2 = "500",
|
||||
body3 = "The request was not completed. The server met an unexpected condition."
|
||||
},
|
||||
["501"] = {
|
||||
title = "501 - Not Implemented",
|
||||
body1 = "Not Implemented",
|
||||
body2 = "501",
|
||||
body3 = "The request was not completed. The server did not support the functionality required."
|
||||
},
|
||||
["502"] = {
|
||||
title = "502 - Bad Gateway",
|
||||
body1 = "Bad Gateway",
|
||||
body2 = "502",
|
||||
body3 = "The request was not completed. The server received an invalid response from the upstream server."
|
||||
},
|
||||
["503"] = {
|
||||
title = "503 - Service Unavailable",
|
||||
body1 = "Service Unavailable",
|
||||
body2 = "503",
|
||||
body3 = "The request was not completed. The server is temporarily overloading or down."
|
||||
},
|
||||
["504"] = {
|
||||
title = "504 - Gateway Timeout",
|
||||
body1 = "Gateway Timeout",
|
||||
body2 = "504",
|
||||
body3 = "The gateway has timed out."
|
||||
}
|
||||
}
|
||||
local ok, err = datastore:set("plugin_errors_default_errors", cjson.encode(default_errors))
|
||||
if not ok then
|
||||
return false, "can't save default errors to datastore : " .. err
|
||||
end
|
||||
-- Save generic template into datastore
|
||||
local f, err = io.open("/opt/bunkerweb/core/errors/files/error.html", "r")
|
||||
if not f then
|
||||
return false, "can't open error.html : " .. err
|
||||
end
|
||||
local template = f:read("*all")
|
||||
f:close()
|
||||
local ok, err = datastore:set("plugin_errors_template", template)
|
||||
if not ok then
|
||||
return false, "can't save error.html to datastore : " .. err
|
||||
end
|
||||
return true, "success"
|
||||
end
|
||||
|
||||
function _M.error_html(code)
|
||||
-- Load default errors texts
|
||||
local default_errors, err = datastore:get("plugin_errors_default_errors")
|
||||
if not default_errors then
|
||||
return false, "can't get default errors from datastore : " .. err
|
||||
end
|
||||
default_errors = cjson.decode(default_errors)
|
||||
-- Load template
|
||||
local template, err = datastore:get("plugin_errors_template")
|
||||
if not template then
|
||||
return false, "can't get template from datastore : " .. err
|
||||
end
|
||||
-- Compute template
|
||||
return template:format(default_errors[code].title, default_errors[code].body1, default_errors[code].body2, default_errors[code].body3), "success"
|
||||
end
|
||||
|
||||
return _M
|
||||
27
core/errors/files/error.html
Normal file
27
core/errors/files/error.html
Normal file
File diff suppressed because one or more lines are too long
18
core/errors/plugin.json
Normal file
18
core/errors/plugin.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"id": "errors",
|
||||
"order": 999,
|
||||
"name": "Errors",
|
||||
"description": "Manage default error pages",
|
||||
"version": "0.1",
|
||||
"settings": {
|
||||
"ERRORS": {
|
||||
"context": "multisite",
|
||||
"default": "",
|
||||
"help": "List of HTTP error code and corresponding error pages (404=/my404.html 403=/errors/403.html ...).",
|
||||
"id": "errors",
|
||||
"label": "Errors",
|
||||
"regex": "^.*$",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user