mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-08-03 16:03:38 +00:00
Merge remote-tracking branch 'upstream/develop' into develop
This commit is contained in:
14
README.md
14
README.md
@@ -1,4 +1,3 @@
|
||||
|
||||
# NPMplus
|
||||
|
||||
This project comes as a pre-built docker image that enables you to easily forward to your websites
|
||||
@@ -182,20 +181,25 @@ Password: iArhP1j7p1P6TA92FA2FMbbUGYqwcYzxC4AVEe12Wbi94FY9gNN62aKyF1shrvG4NycjjX
|
||||
|
||||
Immediately after logging in with this default user you will be asked to modify your details and change your password.
|
||||
|
||||
## Contributing
|
||||
|
||||
## Contributors/Sponsor original NPM
|
||||
All are welcome to create pull requests for this project, against the `develop` branch.
|
||||
|
||||
CI is used in this project. All PR's must pass before being considered. After passing,
|
||||
docker builds for PR's are available on dockerhub for manual verifications.
|
||||
|
||||
## Contributors/Sponsor upstream NPM
|
||||
|
||||
Special thanks to [all of our contributors](https://github.com/NginxProxyManager/nginx-proxy-manager/graphs/contributors).
|
||||
If you want to sponsor them, please see [here](https://github.com/NginxProxyManager/nginx-proxy-manager/blob/master/README.md).
|
||||
|
||||
|
||||
# Please report Bugs first to this fork before reporting them to the original Repository
|
||||
# Please report Bugs first to this fork before reporting them to the upstream Repository
|
||||
|
||||
## Getting Support
|
||||
|
||||
1. [Found a bug?](https://github.com/ZoeyVid/NPMplus/issues)
|
||||
2. [Discussions](https://github.com/ZoeyVid/NPMplus/discussions)
|
||||
<!---
|
||||
3. [Development Gitter](https://gitter.im/nginx-proxy-manager/community)
|
||||
4. [Reddit](https://reddit.com/r/nginxproxymanager)
|
||||
3. [Reddit](https://reddit.com/r/nginxproxymanager)
|
||||
--->
|
@@ -1131,12 +1131,18 @@ const internalCertificate = {
|
||||
res.on('end', function () {
|
||||
try {
|
||||
const parsedBody = JSON.parse(responseBody + '');
|
||||
if (res.statusCode !== 200) {
|
||||
logger.warn(`Failed to test HTTP challenge for domain ${domain} because HTTP status code ${res.statusCode} was returned: ${parsedBody.message}`);
|
||||
resolve(undefined);
|
||||
} else {
|
||||
resolve(parsedBody);
|
||||
}
|
||||
catch (error) {
|
||||
logger.warn('Error');
|
||||
logger.warn(`Status Code: ${res.statusCode}`);
|
||||
logger.warn(`Failed to test HTTP challenge for domain ${domain}`, res);
|
||||
} catch (err) {
|
||||
if (res.statusCode !== 200) {
|
||||
logger.warn(`Failed to test HTTP challenge for domain ${domain} because HTTP status code ${res.statusCode} was returned`);
|
||||
} else {
|
||||
logger.warn(`Failed to test HTTP challenge for domain ${domain} because response failed to be parsed: ${err.message}`);
|
||||
}
|
||||
resolve(undefined);
|
||||
}
|
||||
});
|
||||
@@ -1152,6 +1158,9 @@ const internalCertificate = {
|
||||
if (!result) {
|
||||
// Some error occurred while trying to get the data
|
||||
return 'failed';
|
||||
} else if (result.error) {
|
||||
logger.info(`HTTP challenge test failed for domain ${domain} because error was returned: ${result.error.msg}`);
|
||||
return `other:${result.error.msg}`;
|
||||
} else if (`${result.responsecode}` === '200' && result.htmlresponse === 'Success') {
|
||||
// Server exists and has responded with the correct data
|
||||
return 'ok';
|
||||
|
@@ -225,7 +225,7 @@ const internalProxyHost = {
|
||||
.query()
|
||||
.where('is_deleted', 0)
|
||||
.andWhere('id', data.id)
|
||||
.allowGraph('[owner,access_list,access_list.[clients,items],certificate]')
|
||||
.allowGraph('[owner,access_list.[clients,items],certificate]')
|
||||
.first();
|
||||
|
||||
if (access_data.permission_visibility !== 'all') {
|
||||
|
3
backend/templates/_hsts_map.conf
Normal file
3
backend/templates/_hsts_map.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
map $scheme $hsts_header {
|
||||
https "max-age=63072000;{% if hsts_subdomains == 1 or hsts_subdomains == true -%} includeSubDomains;{% endif %} preload";
|
||||
}
|
@@ -1,3 +1,5 @@
|
||||
{% include "_hsts_map.conf" %}
|
||||
|
||||
location {{ path }} {
|
||||
set $forward_path "{{ forward_path }}";
|
||||
|
||||
|
@@ -1,6 +1,9 @@
|
||||
{% include "_header_comment.conf" %}
|
||||
|
||||
{% if enabled %}
|
||||
|
||||
{% include "_hsts_map.conf" %}
|
||||
|
||||
server {
|
||||
{% include "_listen.conf" %}
|
||||
{% include "_certificates.conf" %}
|
||||
|
@@ -1,6 +1,9 @@
|
||||
{% include "_header_comment.conf" %}
|
||||
|
||||
{% if enabled %}
|
||||
|
||||
{% include "_hsts_map.conf" %}
|
||||
|
||||
server {
|
||||
set $forward_scheme {{ forward_scheme }};
|
||||
set $server "{{ forward_host }}";
|
||||
|
@@ -1,6 +1,9 @@
|
||||
{% include "_header_comment.conf" %}
|
||||
|
||||
{% if enabled %}
|
||||
|
||||
{% include "_hsts_map.conf" %}
|
||||
|
||||
server {
|
||||
{% include "_listen.conf" %}
|
||||
{% include "_certificates.conf" %}
|
||||
|
258
docs/.vuepress/styles/index.scss
Normal file
258
docs/.vuepress/styles/index.scss
Normal file
@@ -0,0 +1,258 @@
|
||||
:root {
|
||||
// brand colors
|
||||
--c-brand: #f15833;
|
||||
--c-brand-light: #f15833;
|
||||
|
||||
// background colors
|
||||
--c-bg: #ffffff;
|
||||
--c-bg-light: #f3f4f5;
|
||||
--c-bg-lighter: #eeeeee;
|
||||
--c-bg-dark: #ebebec;
|
||||
--c-bg-darker: #e6e6e6;
|
||||
--c-bg-navbar: var(--c-bg);
|
||||
--c-bg-sidebar: var(--c-bg);
|
||||
--c-bg-arrow: #cccccc;
|
||||
|
||||
// text colors
|
||||
--c-text: #663015;
|
||||
--c-text-accent: var(--c-brand);
|
||||
--c-text-light: #863f1c;
|
||||
--c-text-lighter: #b65626;
|
||||
--c-text-lightest: #f15833;
|
||||
--c-text-quote: #999999;
|
||||
|
||||
// border colors
|
||||
--c-border: #eaecef;
|
||||
--c-border-dark: #dfe2e5;
|
||||
|
||||
// custom container colors
|
||||
--c-tip: #42b983;
|
||||
--c-tip-bg: var(--c-bg-light);
|
||||
--c-tip-title: var(--c-text);
|
||||
--c-tip-text: var(--c-text);
|
||||
--c-tip-text-accent: var(--c-text-accent);
|
||||
--c-warning: #ffc310;
|
||||
--c-warning-bg: #fffae3;
|
||||
--c-warning-bg-light: #fff3ba;
|
||||
--c-warning-bg-lighter: #fff0b0;
|
||||
--c-warning-border-dark: #f7dc91;
|
||||
--c-warning-details-bg: #fff5ca;
|
||||
--c-warning-title: #f1b300;
|
||||
--c-warning-text: #746000;
|
||||
--c-warning-text-accent: #edb100;
|
||||
--c-warning-text-light: #c1971c;
|
||||
--c-warning-text-quote: #ccab49;
|
||||
--c-danger: #f11e37;
|
||||
--c-danger-bg: #ffe0e0;
|
||||
--c-danger-bg-light: #ffcfde;
|
||||
--c-danger-bg-lighter: #ffc9c9;
|
||||
--c-danger-border-dark: #f1abab;
|
||||
--c-danger-details-bg: #ffd4d4;
|
||||
--c-danger-title: #ed1e2c;
|
||||
--c-danger-text: #660000;
|
||||
--c-danger-text-accent: #bd1a1a;
|
||||
--c-danger-text-light: #b5474d;
|
||||
--c-danger-text-quote: #c15b5b;
|
||||
--c-details-bg: #eeeeee;
|
||||
|
||||
// badge component colors
|
||||
--c-badge-tip: var(--c-tip);
|
||||
--c-badge-warning: #ecc808;
|
||||
--c-badge-warning-text: var(--c-bg);
|
||||
--c-badge-danger: #dc2626;
|
||||
--c-badge-danger-text: var(--c-bg);
|
||||
|
||||
// transition vars
|
||||
--t-color: 0.3s ease;
|
||||
--t-transform: 0.3s ease;
|
||||
|
||||
// code blocks vars
|
||||
--code-bg-color: #282c34;
|
||||
--code-hl-bg-color: rgba(0, 0, 0, 0.66);
|
||||
--code-ln-color: #9e9e9e;
|
||||
--code-ln-wrapper-width: 3.5rem;
|
||||
|
||||
// font vars
|
||||
--font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
||||
--font-family-code: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
|
||||
// layout vars
|
||||
--navbar-height: 3.6rem;
|
||||
--navbar-padding-v: 0.7rem;
|
||||
--navbar-padding-h: 1.5rem;
|
||||
--sidebar-width: 20rem;
|
||||
--sidebar-width-mobile: calc(var(--sidebar-width) * 0.82);
|
||||
--content-width: 740px;
|
||||
--homepage-width: 960px;
|
||||
}
|
||||
|
||||
html.dark {
|
||||
// brand colors
|
||||
--c-brand: #f15833;
|
||||
--c-brand-light: #f15833;
|
||||
|
||||
// background colors
|
||||
--c-bg: #22272e;
|
||||
--c-bg-light: #2b313a;
|
||||
--c-bg-lighter: #262c34;
|
||||
--c-bg-dark: #343b44;
|
||||
--c-bg-darker: #37404c;
|
||||
|
||||
// text colors
|
||||
--c-text: #adbac7;
|
||||
--c-text-light: #96a7b7;
|
||||
--c-text-lighter: #8b9eb0;
|
||||
--c-text-lightest: #8094a8;
|
||||
|
||||
// border colors
|
||||
--c-border: #3e4c5a;
|
||||
--c-border-dark: #34404c;
|
||||
|
||||
// custom container colors
|
||||
--c-tip: #318a62;
|
||||
--c-warning: #e0ad15;
|
||||
--c-warning-bg: #2d2f2d;
|
||||
--c-warning-bg-light: #423e2a;
|
||||
--c-warning-bg-lighter: #44442f;
|
||||
--c-warning-border-dark: #957c35;
|
||||
--c-warning-details-bg: #39392d;
|
||||
--c-warning-title: #fdca31;
|
||||
--c-warning-text: #d8d96d;
|
||||
--c-warning-text-accent: #ffbf00;
|
||||
--c-warning-text-light: #ddb84b;
|
||||
--c-warning-text-quote: #ccab49;
|
||||
--c-danger: #fc1e38;
|
||||
--c-danger-bg: #39232c;
|
||||
--c-danger-bg-light: #4b2b35;
|
||||
--c-danger-bg-lighter: #553040;
|
||||
--c-danger-border-dark: #a25151;
|
||||
--c-danger-details-bg: #482936;
|
||||
--c-danger-title: #fc2d3b;
|
||||
--c-danger-text: #ea9ca0;
|
||||
--c-danger-text-accent: #fd3636;
|
||||
--c-danger-text-light: #d9777c;
|
||||
--c-danger-text-quote: #d56b6b;
|
||||
--c-details-bg: #323843;
|
||||
|
||||
// badge component colors
|
||||
--c-badge-warning: var(--c-warning);
|
||||
--c-badge-warning-text: #3c2e05;
|
||||
--c-badge-danger: var(--c-danger);
|
||||
--c-badge-danger-text: #401416;
|
||||
|
||||
// code blocks vars
|
||||
--code-hl-bg-color: #363b46;
|
||||
}
|
||||
|
||||
|
||||
// plugin-back-to-top
|
||||
.back-to-top {
|
||||
--back-to-top-color: var(--c-brand);
|
||||
--back-to-top-color-hover: var(--c-brand-light);
|
||||
}
|
||||
|
||||
// plugin-docsearch
|
||||
.DocSearch {
|
||||
--docsearch-primary-color: var(--c-brand);
|
||||
--docsearch-text-color: var(--c-text);
|
||||
--docsearch-highlight-color: var(--c-brand);
|
||||
--docsearch-muted-color: var(--c-text-quote);
|
||||
--docsearch-container-background: rgba(9, 10, 17, 0.8);
|
||||
--docsearch-modal-background: var(--c-bg-light);
|
||||
--docsearch-searchbox-background: var(--c-bg-lighter);
|
||||
--docsearch-searchbox-focus-background: var(--c-bg);
|
||||
--docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand);
|
||||
--docsearch-hit-color: var(--c-text-light);
|
||||
--docsearch-hit-active-color: var(--c-bg);
|
||||
--docsearch-hit-background: var(--c-bg);
|
||||
--docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark);
|
||||
--docsearch-footer-background: var(--c-bg);
|
||||
}
|
||||
|
||||
// dark plugin-docsearch
|
||||
html.dark .DocSearch {
|
||||
--docsearch-logo-color: var(--c-text);
|
||||
--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;
|
||||
--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d,
|
||||
0 2px 2px 0 rgba(3, 4, 9, 0.3);
|
||||
--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);
|
||||
--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, 0.5),
|
||||
0 -4px 8px 0 rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
// plugin-external-link-icon
|
||||
.external-link-icon {
|
||||
--external-link-icon-color: var(--c-text-quote);
|
||||
}
|
||||
|
||||
// plugin-medium-zoom
|
||||
.medium-zoom-overlay {
|
||||
--medium-zoom-bg-color: var(--c-bg);
|
||||
}
|
||||
|
||||
// plugin-nprogress
|
||||
#nprogress {
|
||||
--nprogress-color: var(--c-brand);
|
||||
}
|
||||
|
||||
// plugin-pwa-popup
|
||||
.pwa-popup {
|
||||
--pwa-popup-text-color: var(--c-text);
|
||||
--pwa-popup-bg-color: var(--c-bg);
|
||||
--pwa-popup-border-color: var(--c-brand);
|
||||
--pwa-popup-shadow: 0 4px 16px var(--c-brand);
|
||||
--pwa-popup-btn-text-color: var(--c-bg);
|
||||
--pwa-popup-btn-bg-color: var(--c-brand);
|
||||
--pwa-popup-btn-hover-bg-color: var(--c-brand-light);
|
||||
}
|
||||
|
||||
// plugin-search
|
||||
.search-box {
|
||||
--search-bg-color: var(--c-bg);
|
||||
--search-accent-color: var(--c-brand);
|
||||
--search-text-color: var(--c-text);
|
||||
--search-border-color: var(--c-border);
|
||||
|
||||
--search-item-text-color: var(--c-text-lighter);
|
||||
--search-item-focus-bg-color: var(--c-bg-light);
|
||||
}
|
||||
|
||||
.home .hero img {
|
||||
max-width: 500px !important;
|
||||
height: 100%;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.center {
|
||||
margin: 0 auto;
|
||||
width: 80%
|
||||
}
|
||||
|
||||
#main-title {
|
||||
display: none
|
||||
}
|
||||
|
||||
.center {
|
||||
margin: 0 auto;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
#main-title {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.hero {
|
||||
margin: 150px 25px 70px;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Nerd Font';
|
||||
src: url("/nerd-font.woff2") format("woff2");
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: 'Nerd Font', source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
}
|
893
docs/.yarn/releases/yarn-4.0.2.cjs
vendored
Normal file
893
docs/.yarn/releases/yarn-4.0.2.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
3
docs/.yarnrc.yml
Normal file
3
docs/.yarnrc.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
nodeLinker: node-modules
|
||||
|
||||
yarnPath: .yarn/releases/yarn-4.0.2.cjs
|
@@ -60,7 +60,7 @@
|
||||
},
|
||||
"footer": {
|
||||
"fork-me": "Repository on GitHub",
|
||||
"copy": "© 2023 <a href=\"{url}\" target=\"_blank\">jc21.com</a> NPM",
|
||||
"copy": "© 2024 <a href=\"{url}\" target=\"_blank\">jc21.com</a> NPM",
|
||||
"copyzv": "and © 2024 <a href=\"{url}\" target=\"_blank\">ZoeyVid</a> NPMplus - MIT-License - ",
|
||||
"theme": "Theme by <a href=\"{url}\" target=\"_blank\">Tabler v0.0.31</a>"
|
||||
},
|
||||
|
@@ -215,11 +215,8 @@ dns_eurodns_endpoint = https://rest-api.eurodns.com/user-api-gateway/proxy`,
|
||||
gandi: {
|
||||
display_name: 'Gandi Live DNS',
|
||||
package_name: 'certbot_plugin_gandi',
|
||||
credentials: `# live dns v5 api key
|
||||
dns_gandi_api_key=APIKEY
|
||||
|
||||
# optional organization id, remove it if not used
|
||||
dns_gandi_sharing_id=SHARINGID`,
|
||||
credentials: `# Gandi personal access token
|
||||
dns_gandi_token=PERSONAL_ACCESS_TOKEN`,
|
||||
full_plugin_name: 'dns-gandi',
|
||||
},
|
||||
//####################################################//
|
||||
@@ -249,6 +246,16 @@ dns_google_domains_zone = "example.com"`,
|
||||
full_plugin_name: 'dns-google-domains',
|
||||
},
|
||||
//####################################################//
|
||||
he: {
|
||||
display_name: 'Hurricane Electric',
|
||||
package_name: 'certbot-dns-he',
|
||||
version_requirement: '~=1.0.0',
|
||||
dependencies: '',
|
||||
credentials: `dns_he_user = Me
|
||||
dns_he_pass = my HE password`,
|
||||
full_plugin_name: 'dns-he',
|
||||
},
|
||||
//####################################################//
|
||||
hetzner: {
|
||||
display_name: 'Hetzner',
|
||||
package_name: 'certbot-dns-hetzner',
|
||||
@@ -398,6 +405,17 @@ dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw`,
|
||||
full_plugin_name: 'dns-ovh',
|
||||
},
|
||||
//####################################################//
|
||||
plesk: {
|
||||
display_name: 'Plesk',
|
||||
package_name: 'certbot-dns-plesk',
|
||||
version_requirement: '~=0.3.0',
|
||||
dependencies: '',
|
||||
credentials: `dns_plesk_username = your-username
|
||||
dns_plesk_password = secret
|
||||
dns_plesk_api_url = https://plesk-api-host:8443`,
|
||||
full_plugin_name: 'dns-plesk',
|
||||
},
|
||||
//####################################################//
|
||||
porkbun: {
|
||||
display_name: 'Porkbun',
|
||||
package_name: 'certbot-dns-porkbun',
|
||||
|
Reference in New Issue
Block a user