From b49de0e23ec9a467954235547dcf0039e82fd629 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Thu, 2 May 2019 13:03:16 +1000 Subject: [PATCH 01/17] Enable TLS 1.3 by default --- rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf b/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf index 16657c4e..f0a79b64 100644 --- a/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf +++ b/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf @@ -2,7 +2,7 @@ ssl_session_timeout 5m; ssl_session_cache shared:SSL:50m; # intermediate configuration. tweak to your needs. -ssl_protocols TLSv1 TLSv1.1 TLSv1.2; +ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE- ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AE S128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; From ad8eac4f073426bda885006c817c88ab3c1de18e Mon Sep 17 00:00:00 2001 From: jc21 Date: Wed, 8 May 2019 09:36:44 +1000 Subject: [PATCH 02/17] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 36 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 +++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..9860702e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,36 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Checklist** +- Have you pulled and found the error with `jc21/nginx-proxy-manager:latest` docker image? +- Are you sure you're not using someone else's docker image? +- If having problems with Lets Encrypt, have you made absolutely sure your site is accessible from outside of your network? + +**Describe the bug** +- A clear and concise description of what the bug is. +- What version of Nginx Proxy Manager is reported on the login page? + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Operating System** +- Please specify if using a Rpi, Mac, orchestration tool or any other setups that might affect the reproduction of this error. + +**Additional context** +Add any other context about the problem here, docker version, browser version if applicable to the problem. Too much info is better than too little. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..11fc491e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 0819a265f566212f250f3278a68eb0b9c436b68f Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 8 May 2019 09:50:20 +1000 Subject: [PATCH 03/17] Bumped version --- README.md | 2 +- doc/DOCKERHUB.md | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 18324d8b..589b0c83 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Nginx Proxy Manager -![Version](https://img.shields.io/badge/version-2.0.12-green.svg?style=for-the-badge) +![Version](https://img.shields.io/badge/version-2.0.13-green.svg?style=for-the-badge) ![Stars](https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge) ![Pulls](https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge) diff --git a/doc/DOCKERHUB.md b/doc/DOCKERHUB.md index 5f0cde15..ca66f3d7 100644 --- a/doc/DOCKERHUB.md +++ b/doc/DOCKERHUB.md @@ -2,7 +2,7 @@ # Nginx Proxy Manager -![Version](https://img.shields.io/badge/version-2.0.12-green.svg?style=for-the-badge) +![Version](https://img.shields.io/badge/version-2.0.13-green.svg?style=for-the-badge) ![Stars](https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge) ![Pulls](https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge) diff --git a/package.json b/package.json index 3ca74ef9..93228741 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nginx-proxy-manager", - "version": "2.0.12", + "version": "2.0.13", "description": "A beautiful interface for creating Nginx endpoints", "main": "src/backend/index.js", "devDependencies": { From 9e476e5b24e307fc85f20b99d9ab18e470304c86 Mon Sep 17 00:00:00 2001 From: OhHeyAlan Date: Tue, 7 May 2019 19:01:08 -0500 Subject: [PATCH 04/17] Only Secure TLS Ciphers & Protocols (#134) Disable insecure SSL/TLS ciphers & protocols. Only TLS_1.2 and TLS_1.3 should be enabled. --- rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf b/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf index f0a79b64..bd905d31 100644 --- a/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf +++ b/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf @@ -2,8 +2,8 @@ ssl_session_timeout 5m; ssl_session_cache shared:SSL:50m; # intermediate configuration. tweak to your needs. -ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; -ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE- +ssl_protocols TLSv1.2 TLSv1.3; +ssl_ciphers 'EECDH+AESGCM:AES256+EECDH:AES256+EDH:EDH+AESGCM:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE- ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AE -S128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; +S128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES'; ssl_prefer_server_ciphers on; From 0fca64929e49bdffa993e25152e6a43b00d0bd39 Mon Sep 17 00:00:00 2001 From: Carl Sutton Date: Wed, 8 May 2019 02:07:43 +0200 Subject: [PATCH 05/17] Try DNS challenge in addition to http (#85) --- src/backend/internal/certificate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/internal/certificate.js b/src/backend/internal/certificate.js index f081e5a6..6b1bd1cd 100644 --- a/src/backend/internal/certificate.js +++ b/src/backend/internal/certificate.js @@ -719,7 +719,7 @@ const internalCertificate = { let cmd = certbot_command + ' certonly --cert-name "npm-' + certificate.id + '" --agree-tos ' + '--email "' + certificate.meta.letsencrypt_email + '" ' + - '--preferred-challenges "http" ' + + '--preferred-challenges "dns,http" ' + '-n -a webroot -d "' + certificate.domain_names.join(',') + '" ' + (debug_mode ? '--staging' : ''); From 4fad9d672fe722a62de84815311574333edd1c35 Mon Sep 17 00:00:00 2001 From: OhHeyAlan Date: Tue, 7 May 2019 19:11:05 -0500 Subject: [PATCH 06/17] Correcting X-XSS-Protection Header (#136) * Correcting X-XSS-Protection Header X-XSS-Protection sets the configuration for the cross-site scripting filters built into most browsers. The best configuration is "X-XSS-Protection: 1; mode=block". Was "0" Now "1; mode=block" * Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 36 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 +++++++++++++ src/backend/app.js | 2 +- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..9860702e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,36 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Checklist** +- Have you pulled and found the error with `jc21/nginx-proxy-manager:latest` docker image? +- Are you sure you're not using someone else's docker image? +- If having problems with Lets Encrypt, have you made absolutely sure your site is accessible from outside of your network? + +**Describe the bug** +- A clear and concise description of what the bug is. +- What version of Nginx Proxy Manager is reported on the login page? + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Operating System** +- Please specify if using a Rpi, Mac, orchestration tool or any other setups that might affect the reproduction of this error. + +**Additional context** +Add any other context about the problem here, docker version, browser version if applicable to the problem. Too much info is better than too little. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..11fc491e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/src/backend/app.js b/src/backend/app.js index 59802755..3b852cd4 100644 --- a/src/backend/app.js +++ b/src/backend/app.js @@ -48,7 +48,7 @@ app.use(function (req, res, next) { res.set({ 'Strict-Transport-Security': 'includeSubDomains; max-age=631138519; preload', - 'X-XSS-Protection': '0', + 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': x_frame_options, 'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate', From bda3dba3696aeab046477402ec83b5f88854b454 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 8 May 2019 10:53:44 +1000 Subject: [PATCH 07/17] Revert to previous tabler version to hopefully fix ui issues --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93228741..97fe7ddb 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "numeral": "^2.0.6", "sass-loader": "^7.0.3", "style-loader": "^0.22.1", - "tabler-ui": "git+https://github.com/tabler/tabler.git", + "tabler-ui": "git+https://github.com/tabler/tabler.git#v0.0.31", "underscore": "^1.8.3", "webpack": "^4.25.1", "webpack-cli": "^3.1.2", From 8b4f3507c395ef4c31ce49824cbae7a83e086382 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 8 May 2019 10:53:44 +1000 Subject: [PATCH 08/17] Revert to previous tabler version to hopefully fix ui issues --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93228741..e4d3e2a3 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "numeral": "^2.0.6", "sass-loader": "^7.0.3", "style-loader": "^0.22.1", - "tabler-ui": "git+https://github.com/tabler/tabler.git", + "tabler-ui": "git+https://github.com/tabler/tabler.git#00f78ad823311bc3ad974ac3e5b0126198f0a813", "underscore": "^1.8.3", "webpack": "^4.25.1", "webpack-cli": "^3.1.2", From feaa0e51bd9316dc6aec0431194edc78f71e9aa5 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 8 May 2019 15:24:57 +1000 Subject: [PATCH 09/17] Removed use strict --- src/backend/app.js | 2 -- src/backend/db.js | 2 -- src/backend/importer.js | 4 +--- src/backend/internal/access-list.js | 2 -- src/backend/internal/audit-log.js | 2 -- src/backend/internal/dead-host.js | 2 -- src/backend/internal/ip_ranges.js | 3 --- src/backend/internal/nginx.js | 8 ++++---- src/backend/internal/redirection-host.js | 2 -- src/backend/internal/report.js | 2 -- src/backend/internal/stream.js | 2 -- src/backend/internal/token.js | 2 -- src/backend/internal/user.js | 2 -- src/backend/lib/access.js | 2 -- src/backend/lib/error.js | 2 -- src/backend/lib/express/cors.js | 2 -- src/backend/lib/express/jwt-decode.js | 2 -- src/backend/lib/express/jwt.js | 2 -- src/backend/lib/express/pagination.js | 2 -- src/backend/lib/express/user-id-from-me.js | 2 -- src/backend/lib/helpers.js | 3 --- src/backend/lib/migrate_template.js | 2 -- src/backend/lib/utils.js | 2 -- src/backend/lib/validator/api.js | 2 -- src/backend/lib/validator/index.js | 2 -- src/backend/migrate.js | 2 -- src/backend/migrations/20180618015850_initial.js | 2 -- .../migrations/20180929054513_websockets.js | 2 -- .../migrations/20181019052346_forward_host.js | 2 -- .../migrations/20181113041458_http2_support.js | 2 -- .../migrations/20181213013211_forward_scheme.js | 2 -- src/backend/migrations/20190104035154_disabled.js | 2 -- .../migrations/20190215115310_customlocations.js | 2 -- src/backend/migrations/20190218060101_hsts.js | 2 -- src/backend/models/access_list.js | 2 -- src/backend/models/access_list_auth.js | 2 -- src/backend/models/audit-log.js | 2 -- src/backend/models/auth.js | 2 -- src/backend/models/certificate.js | 2 -- src/backend/models/dead_host.js | 2 -- src/backend/models/proxy_host.js | 2 -- src/backend/models/redirection_host.js | 2 -- src/backend/models/stream.js | 2 -- src/backend/models/token.js | 2 -- src/backend/models/user.js | 2 -- src/backend/models/user_permission.js | 2 -- src/backend/routes/api/audit-log.js | 2 -- src/backend/routes/api/main.js | 2 -- src/backend/routes/api/nginx/access_lists.js | 2 -- src/backend/routes/api/nginx/dead_hosts.js | 2 -- src/backend/routes/api/nginx/proxy_hosts.js | 2 -- src/backend/routes/api/nginx/redirection_hosts.js | 2 -- src/backend/routes/api/nginx/streams.js | 2 -- src/backend/routes/api/reports.js | 2 -- src/backend/routes/api/tokens.js | 2 -- src/backend/routes/api/users.js | 2 -- src/backend/routes/main.js | 2 -- src/backend/setup.js | 4 +--- src/frontend/js/app/audit-log/list/item.js | 2 -- src/frontend/js/app/audit-log/list/main.js | 2 -- src/frontend/js/app/audit-log/main.js | 2 -- src/frontend/js/app/audit-log/meta.js | 2 -- src/frontend/js/app/cache.js | 2 -- src/frontend/js/app/controller.js | 15 +++++++++++++-- src/frontend/js/app/dashboard/main.js | 2 -- src/frontend/js/app/empty/main.js | 2 -- src/frontend/js/app/error/main.js | 2 -- src/frontend/js/app/help/main.js | 2 -- src/frontend/js/app/i18n.js | 2 -- src/frontend/js/app/main.js | 2 -- src/frontend/js/app/nginx/access/delete.js | 2 -- src/frontend/js/app/nginx/access/form.js | 2 -- src/frontend/js/app/nginx/access/form/item.js | 2 -- src/frontend/js/app/nginx/access/list/item.js | 2 -- src/frontend/js/app/nginx/access/list/main.js | 2 -- src/frontend/js/app/nginx/access/main.js | 2 -- src/frontend/js/app/nginx/certificates/delete.js | 3 --- src/frontend/js/app/nginx/certificates/form.js | 2 -- src/frontend/js/app/nginx/certificates/main.js | 2 -- src/frontend/js/app/nginx/dead/delete.js | 2 -- src/frontend/js/app/nginx/dead/form.js | 2 -- src/frontend/js/app/nginx/dead/list/item.js | 2 -- src/frontend/js/app/nginx/dead/list/main.js | 2 -- src/frontend/js/app/nginx/dead/main.js | 2 -- src/frontend/js/app/nginx/proxy/delete.js | 2 -- src/frontend/js/app/nginx/proxy/form.js | 2 -- src/frontend/js/app/nginx/proxy/list/item.js | 2 -- src/frontend/js/app/nginx/proxy/list/main.js | 2 -- src/frontend/js/app/nginx/proxy/location-item.ejs | 2 +- src/frontend/js/app/nginx/proxy/main.js | 2 -- src/frontend/js/app/nginx/redirection/delete.js | 2 -- src/frontend/js/app/nginx/redirection/form.js | 2 -- .../js/app/nginx/redirection/list/item.js | 2 -- .../js/app/nginx/redirection/list/main.js | 2 -- src/frontend/js/app/nginx/redirection/main.js | 2 -- src/frontend/js/app/nginx/stream/delete.js | 2 -- src/frontend/js/app/nginx/stream/form.js | 3 --- src/frontend/js/app/nginx/stream/list/item.js | 2 -- src/frontend/js/app/nginx/stream/list/main.js | 2 -- src/frontend/js/app/nginx/stream/main.js | 2 -- src/frontend/js/app/router.js | 2 -- src/frontend/js/app/settings/default-site/main.js | 2 -- src/frontend/js/app/settings/list/item.js | 2 -- src/frontend/js/app/settings/list/main.js | 2 -- src/frontend/js/app/settings/main.js | 2 -- src/frontend/js/app/tokens.js | 8 +++----- src/frontend/js/app/ui/footer/main.js | 2 -- src/frontend/js/app/ui/header/main.js | 2 -- src/frontend/js/app/ui/main.js | 2 -- src/frontend/js/app/ui/menu/main.js | 2 -- src/frontend/js/app/user/delete.js | 2 -- src/frontend/js/app/user/form.js | 2 -- src/frontend/js/app/user/password.js | 2 -- src/frontend/js/app/user/permissions.js | 2 -- src/frontend/js/app/users/list/item.js | 2 -- src/frontend/js/app/users/list/main.js | 2 -- src/frontend/js/app/users/main.js | 2 -- src/frontend/js/lib/helpers.js | 2 -- src/frontend/js/lib/marionette.js | 2 -- src/frontend/js/login/main.js | 2 -- src/frontend/js/login/ui/login.js | 2 -- src/frontend/js/models/access-list.js | 2 -- src/frontend/js/models/audit-log.js | 2 -- src/frontend/js/models/certificate.js | 2 -- src/frontend/js/models/dead-host.js | 2 -- src/frontend/js/models/proxy-host-location.js | 2 -- src/frontend/js/models/proxy-host.js | 2 -- src/frontend/js/models/redirection-host.js | 2 -- src/frontend/js/models/setting.js | 3 --- src/frontend/js/models/stream.js | 2 -- src/frontend/js/models/user.js | 2 -- 131 files changed, 23 insertions(+), 273 deletions(-) diff --git a/src/backend/app.js b/src/backend/app.js index 3b852cd4..03a7b8c7 100644 --- a/src/backend/app.js +++ b/src/backend/app.js @@ -1,5 +1,3 @@ -'use strict'; - const path = require('path'); const express = require('express'); const bodyParser = require('body-parser'); diff --git a/src/backend/db.js b/src/backend/db.js index 6fcf831e..6ad3f34c 100644 --- a/src/backend/db.js +++ b/src/backend/db.js @@ -1,5 +1,3 @@ -'use strict'; - const config = require('config'); if (!config.has('database')) { diff --git a/src/backend/importer.js b/src/backend/importer.js index 8e47ea4e..79b756c0 100644 --- a/src/backend/importer.js +++ b/src/backend/importer.js @@ -1,10 +1,8 @@ -'use strict'; - const fs = require('fs'); const logger = require('./logger').import; const utils = require('./lib/utils'); const batchflow = require('batchflow'); -const debug_mode = process.env.NODE_ENV !== 'production'; +const debug_mode = process.env.NODE_ENV !== 'production' || !!process.env.DEBUG; const internalProxyHost = require('./internal/proxy-host'); const internalRedirectionHost = require('./internal/redirection-host'); diff --git a/src/backend/internal/access-list.js b/src/backend/internal/access-list.js index 83dd2e58..0b9f927f 100644 --- a/src/backend/internal/access-list.js +++ b/src/backend/internal/access-list.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const fs = require('fs'); const batchflow = require('batchflow'); diff --git a/src/backend/internal/audit-log.js b/src/backend/internal/audit-log.js index 543b1662..5f7f1da0 100644 --- a/src/backend/internal/audit-log.js +++ b/src/backend/internal/audit-log.js @@ -1,5 +1,3 @@ -'use strict'; - const error = require('../lib/error'); const auditLogModel = require('../models/audit-log'); diff --git a/src/backend/internal/dead-host.js b/src/backend/internal/dead-host.js index d4c36a75..9042db1d 100644 --- a/src/backend/internal/dead-host.js +++ b/src/backend/internal/dead-host.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const error = require('../lib/error'); const deadHostModel = require('../models/dead_host'); diff --git a/src/backend/internal/ip_ranges.js b/src/backend/internal/ip_ranges.js index c6ed6200..8e7322a5 100644 --- a/src/backend/internal/ip_ranges.js +++ b/src/backend/internal/ip_ranges.js @@ -1,8 +1,5 @@ -'use strict'; - const https = require('https'); const fs = require('fs'); -const _ = require('lodash'); const logger = require('../logger').ip_ranges; const error = require('../lib/error'); const internalNginx = require('./nginx'); diff --git a/src/backend/internal/nginx.js b/src/backend/internal/nginx.js index faaf77fb..556e9fdf 100644 --- a/src/backend/internal/nginx.js +++ b/src/backend/internal/nginx.js @@ -4,7 +4,7 @@ const Liquid = require('liquidjs'); const logger = require('../logger').nginx; const utils = require('../lib/utils'); const error = require('../lib/error'); -const debug_mode = process.env.NODE_ENV !== 'production'; +const debug_mode = process.env.NODE_ENV !== 'production' || !!process.env.DEBUG; const internalNginx = { @@ -132,7 +132,7 @@ const internalNginx = { /** * Generates custom locations - * @param {Object} host + * @param {Object} host * @returns {Promise} */ renderLocations: (host) => { @@ -146,7 +146,7 @@ const internalNginx = { return; } - let renderer = new Liquid(); + let renderer = new Liquid(); let renderedLocations = ''; const locationRendering = async () => { @@ -207,7 +207,7 @@ const internalNginx = { } if (host.locations) { - origLocations = [].concat(host.locations); + origLocations = [].concat(host.locations); locationsPromise = internalNginx.renderLocations(host).then((renderedLocations) => { host.locations = renderedLocations; }); diff --git a/src/backend/internal/redirection-host.js b/src/backend/internal/redirection-host.js index 7f2dea56..7817ef29 100644 --- a/src/backend/internal/redirection-host.js +++ b/src/backend/internal/redirection-host.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const error = require('../lib/error'); const redirectionHostModel = require('../models/redirection_host'); diff --git a/src/backend/internal/report.js b/src/backend/internal/report.js index bd4facae..6594f940 100644 --- a/src/backend/internal/report.js +++ b/src/backend/internal/report.js @@ -1,5 +1,3 @@ -'use strict'; - const internalProxyHost = require('./proxy-host'); const internalRedirectionHost = require('./redirection-host'); const internalDeadHost = require('./dead-host'); diff --git a/src/backend/internal/stream.js b/src/backend/internal/stream.js index bb90bd87..3abed218 100644 --- a/src/backend/internal/stream.js +++ b/src/backend/internal/stream.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const error = require('../lib/error'); const streamModel = require('../models/stream'); diff --git a/src/backend/internal/token.js b/src/backend/internal/token.js index 5b074d32..c216ce15 100644 --- a/src/backend/internal/token.js +++ b/src/backend/internal/token.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const error = require('../lib/error'); const userModel = require('../models/user'); diff --git a/src/backend/internal/user.js b/src/backend/internal/user.js index ff9853f7..2253c956 100644 --- a/src/backend/internal/user.js +++ b/src/backend/internal/user.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const error = require('../lib/error'); const userModel = require('../models/user'); diff --git a/src/backend/lib/access.js b/src/backend/lib/access.js index 6b9ab8b6..6f2da739 100644 --- a/src/backend/lib/access.js +++ b/src/backend/lib/access.js @@ -1,5 +1,3 @@ -'use strict'; - /** * Some Notes: This is a friggin complicated piece of code. * diff --git a/src/backend/lib/error.js b/src/backend/lib/error.js index 070952f1..7c0f8cca 100644 --- a/src/backend/lib/error.js +++ b/src/backend/lib/error.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const util = require('util'); diff --git a/src/backend/lib/express/cors.js b/src/backend/lib/express/cors.js index 1a5778e3..8e241acb 100644 --- a/src/backend/lib/express/cors.js +++ b/src/backend/lib/express/cors.js @@ -1,5 +1,3 @@ -'use strict'; - const validator = require('../validator'); module.exports = function (req, res, next) { diff --git a/src/backend/lib/express/jwt-decode.js b/src/backend/lib/express/jwt-decode.js index ce386e4b..d6c2b934 100644 --- a/src/backend/lib/express/jwt-decode.js +++ b/src/backend/lib/express/jwt-decode.js @@ -1,5 +1,3 @@ -'use strict'; - const Access = require('../access'); module.exports = () => { diff --git a/src/backend/lib/express/jwt.js b/src/backend/lib/express/jwt.js index b4e7dfe3..66dba859 100644 --- a/src/backend/lib/express/jwt.js +++ b/src/backend/lib/express/jwt.js @@ -1,5 +1,3 @@ -'use strict'; - module.exports = function () { return function (req, res, next) { if (req.headers.authorization) { diff --git a/src/backend/lib/express/pagination.js b/src/backend/lib/express/pagination.js index c948edf2..70404f64 100644 --- a/src/backend/lib/express/pagination.js +++ b/src/backend/lib/express/pagination.js @@ -1,5 +1,3 @@ -'use strict'; - let _ = require('lodash'); module.exports = function (default_sort, default_offset, default_limit, max_limit) { diff --git a/src/backend/lib/express/user-id-from-me.js b/src/backend/lib/express/user-id-from-me.js index 259b186f..ca18952e 100644 --- a/src/backend/lib/express/user-id-from-me.js +++ b/src/backend/lib/express/user-id-from-me.js @@ -1,5 +1,3 @@ -'use strict'; - module.exports = (req, res, next) => { if (req.params.user_id === 'me' && res.locals.access) { req.params.user_id = res.locals.access.token.get('attrs').id; diff --git a/src/backend/lib/helpers.js b/src/backend/lib/helpers.js index 389cfc5c..7f1aaac3 100644 --- a/src/backend/lib/helpers.js +++ b/src/backend/lib/helpers.js @@ -1,7 +1,4 @@ -'use strict'; - const moment = require('moment'); -const _ = require('lodash'); module.exports = { diff --git a/src/backend/lib/migrate_template.js b/src/backend/lib/migrate_template.js index 68ba6d69..03c3d132 100644 --- a/src/backend/lib/migrate_template.js +++ b/src/backend/lib/migrate_template.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'identifier_for_migrate'; const logger = require('../logger').migrate; diff --git a/src/backend/lib/utils.js b/src/backend/lib/utils.js index 28919b18..910779ea 100644 --- a/src/backend/lib/utils.js +++ b/src/backend/lib/utils.js @@ -1,5 +1,3 @@ -'use strict'; - const exec = require('child_process').exec; module.exports = { diff --git a/src/backend/lib/validator/api.js b/src/backend/lib/validator/api.js index 4f259efe..fbf8c97d 100644 --- a/src/backend/lib/validator/api.js +++ b/src/backend/lib/validator/api.js @@ -1,5 +1,3 @@ -'use strict'; - const error = require('../error'); const path = require('path'); const parser = require('json-schema-ref-parser'); diff --git a/src/backend/lib/validator/index.js b/src/backend/lib/validator/index.js index 46d32f20..44cac50c 100644 --- a/src/backend/lib/validator/index.js +++ b/src/backend/lib/validator/index.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const error = require('../error'); const definitions = require('../../schema/definitions.json'); diff --git a/src/backend/migrate.js b/src/backend/migrate.js index 68267e36..2240cf49 100644 --- a/src/backend/migrate.js +++ b/src/backend/migrate.js @@ -1,5 +1,3 @@ -'use strict'; - const db = require('./db'); const logger = require('./logger').migrate; diff --git a/src/backend/migrations/20180618015850_initial.js b/src/backend/migrations/20180618015850_initial.js index cf288e37..999a29e1 100644 --- a/src/backend/migrations/20180618015850_initial.js +++ b/src/backend/migrations/20180618015850_initial.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'initial-schema'; const logger = require('../logger').migrate; diff --git a/src/backend/migrations/20180929054513_websockets.js b/src/backend/migrations/20180929054513_websockets.js index 63698fa1..22bafce1 100644 --- a/src/backend/migrations/20180929054513_websockets.js +++ b/src/backend/migrations/20180929054513_websockets.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'websockets'; const logger = require('../logger').migrate; diff --git a/src/backend/migrations/20181019052346_forward_host.js b/src/backend/migrations/20181019052346_forward_host.js index 1ca4d0fc..0a8a4311 100644 --- a/src/backend/migrations/20181019052346_forward_host.js +++ b/src/backend/migrations/20181019052346_forward_host.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'forward_host'; const logger = require('../logger').migrate; diff --git a/src/backend/migrations/20181113041458_http2_support.js b/src/backend/migrations/20181113041458_http2_support.js index f416e0a8..16d91625 100644 --- a/src/backend/migrations/20181113041458_http2_support.js +++ b/src/backend/migrations/20181113041458_http2_support.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'http2_support'; const logger = require('../logger').migrate; diff --git a/src/backend/migrations/20181213013211_forward_scheme.js b/src/backend/migrations/20181213013211_forward_scheme.js index e68cecd1..4c02273d 100644 --- a/src/backend/migrations/20181213013211_forward_scheme.js +++ b/src/backend/migrations/20181213013211_forward_scheme.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'forward_scheme'; const logger = require('../logger').migrate; diff --git a/src/backend/migrations/20190104035154_disabled.js b/src/backend/migrations/20190104035154_disabled.js index 308e219d..767112b2 100644 --- a/src/backend/migrations/20190104035154_disabled.js +++ b/src/backend/migrations/20190104035154_disabled.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'disabled'; const logger = require('../logger').migrate; diff --git a/src/backend/migrations/20190215115310_customlocations.js b/src/backend/migrations/20190215115310_customlocations.js index 5b55dd5e..b1766ac1 100644 --- a/src/backend/migrations/20190215115310_customlocations.js +++ b/src/backend/migrations/20190215115310_customlocations.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'custom_locations'; const logger = require('../logger').migrate; diff --git a/src/backend/migrations/20190218060101_hsts.js b/src/backend/migrations/20190218060101_hsts.js index 752d3320..50812a30 100644 --- a/src/backend/migrations/20190218060101_hsts.js +++ b/src/backend/migrations/20190218060101_hsts.js @@ -1,5 +1,3 @@ -'use strict'; - const migrate_name = 'hsts'; const logger = require('../logger').migrate; diff --git a/src/backend/models/access_list.js b/src/backend/models/access_list.js index 9d620afb..1c7cb51e 100644 --- a/src/backend/models/access_list.js +++ b/src/backend/models/access_list.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; const User = require('./user'); diff --git a/src/backend/models/access_list_auth.js b/src/backend/models/access_list_auth.js index 7c251b65..e4ebd204 100644 --- a/src/backend/models/access_list_auth.js +++ b/src/backend/models/access_list_auth.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; diff --git a/src/backend/models/audit-log.js b/src/backend/models/audit-log.js index 6220ade3..31da1748 100644 --- a/src/backend/models/audit-log.js +++ b/src/backend/models/audit-log.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; const User = require('./user'); diff --git a/src/backend/models/auth.js b/src/backend/models/auth.js index 38d2dd54..b793a6fd 100644 --- a/src/backend/models/auth.js +++ b/src/backend/models/auth.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const bcrypt = require('bcrypt'); const db = require('../db'); const Model = require('objection').Model; diff --git a/src/backend/models/certificate.js b/src/backend/models/certificate.js index b211ee7c..8d016755 100644 --- a/src/backend/models/certificate.js +++ b/src/backend/models/certificate.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; const User = require('./user'); diff --git a/src/backend/models/dead_host.js b/src/backend/models/dead_host.js index c900ebc8..d8357157 100644 --- a/src/backend/models/dead_host.js +++ b/src/backend/models/dead_host.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; const User = require('./user'); diff --git a/src/backend/models/proxy_host.js b/src/backend/models/proxy_host.js index faa5d068..801796a1 100644 --- a/src/backend/models/proxy_host.js +++ b/src/backend/models/proxy_host.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; const User = require('./user'); diff --git a/src/backend/models/redirection_host.js b/src/backend/models/redirection_host.js index 49f12710..c7157f65 100644 --- a/src/backend/models/redirection_host.js +++ b/src/backend/models/redirection_host.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; const User = require('./user'); diff --git a/src/backend/models/stream.js b/src/backend/models/stream.js index a22bf323..5394f725 100644 --- a/src/backend/models/stream.js +++ b/src/backend/models/stream.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; const User = require('./user'); diff --git a/src/backend/models/token.js b/src/backend/models/token.js index e3853108..8db5d72a 100644 --- a/src/backend/models/token.js +++ b/src/backend/models/token.js @@ -3,8 +3,6 @@ and then has abilities after that. */ -'use strict'; - const _ = require('lodash'); const config = require('config'); const jwt = require('jsonwebtoken'); diff --git a/src/backend/models/user.js b/src/backend/models/user.js index 0873b65a..09df952b 100644 --- a/src/backend/models/user.js +++ b/src/backend/models/user.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; const UserPermission = require('./user_permission'); diff --git a/src/backend/models/user_permission.js b/src/backend/models/user_permission.js index 5848a9ea..5ffcfa04 100644 --- a/src/backend/models/user_permission.js +++ b/src/backend/models/user_permission.js @@ -1,8 +1,6 @@ // Objection Docs: // http://vincit.github.io/objection.js/ -'use strict'; - const db = require('../db'); const Model = require('objection').Model; diff --git a/src/backend/routes/api/audit-log.js b/src/backend/routes/api/audit-log.js index 36a0357f..ac60537d 100644 --- a/src/backend/routes/api/audit-log.js +++ b/src/backend/routes/api/audit-log.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const validator = require('../../lib/validator'); const jwtdecode = require('../../lib/express/jwt-decode'); diff --git a/src/backend/routes/api/main.js b/src/backend/routes/api/main.js index a9c885c4..bdbe08fa 100644 --- a/src/backend/routes/api/main.js +++ b/src/backend/routes/api/main.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const pjson = require('../../../../package.json'); const error = require('../../lib/error'); diff --git a/src/backend/routes/api/nginx/access_lists.js b/src/backend/routes/api/nginx/access_lists.js index 46883887..8c9cd16a 100644 --- a/src/backend/routes/api/nginx/access_lists.js +++ b/src/backend/routes/api/nginx/access_lists.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const validator = require('../../../lib/validator'); const jwtdecode = require('../../../lib/express/jwt-decode'); diff --git a/src/backend/routes/api/nginx/dead_hosts.js b/src/backend/routes/api/nginx/dead_hosts.js index 5e7a367e..b0270a68 100644 --- a/src/backend/routes/api/nginx/dead_hosts.js +++ b/src/backend/routes/api/nginx/dead_hosts.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const validator = require('../../../lib/validator'); const jwtdecode = require('../../../lib/express/jwt-decode'); diff --git a/src/backend/routes/api/nginx/proxy_hosts.js b/src/backend/routes/api/nginx/proxy_hosts.js index 718f135e..97d04eda 100644 --- a/src/backend/routes/api/nginx/proxy_hosts.js +++ b/src/backend/routes/api/nginx/proxy_hosts.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const validator = require('../../../lib/validator'); const jwtdecode = require('../../../lib/express/jwt-decode'); diff --git a/src/backend/routes/api/nginx/redirection_hosts.js b/src/backend/routes/api/nginx/redirection_hosts.js index 501d5601..48eef30e 100644 --- a/src/backend/routes/api/nginx/redirection_hosts.js +++ b/src/backend/routes/api/nginx/redirection_hosts.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const validator = require('../../../lib/validator'); const jwtdecode = require('../../../lib/express/jwt-decode'); diff --git a/src/backend/routes/api/nginx/streams.js b/src/backend/routes/api/nginx/streams.js index 857f325c..fd062ee0 100644 --- a/src/backend/routes/api/nginx/streams.js +++ b/src/backend/routes/api/nginx/streams.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const validator = require('../../../lib/validator'); const jwtdecode = require('../../../lib/express/jwt-decode'); diff --git a/src/backend/routes/api/reports.js b/src/backend/routes/api/reports.js index d14d8bd3..a02e6da0 100644 --- a/src/backend/routes/api/reports.js +++ b/src/backend/routes/api/reports.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const jwtdecode = require('../../lib/express/jwt-decode'); const internalReport = require('../../internal/report'); diff --git a/src/backend/routes/api/tokens.js b/src/backend/routes/api/tokens.js index 54207907..1fdf2512 100644 --- a/src/backend/routes/api/tokens.js +++ b/src/backend/routes/api/tokens.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const jwtdecode = require('../../lib/express/jwt-decode'); const internalToken = require('../../internal/token'); diff --git a/src/backend/routes/api/users.js b/src/backend/routes/api/users.js index f4495512..1d559370 100644 --- a/src/backend/routes/api/users.js +++ b/src/backend/routes/api/users.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const validator = require('../../lib/validator'); const jwtdecode = require('../../lib/express/jwt-decode'); diff --git a/src/backend/routes/main.js b/src/backend/routes/main.js index 8b4f9a53..27731ab3 100644 --- a/src/backend/routes/main.js +++ b/src/backend/routes/main.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const fs = require('fs'); const PACKAGE = require('../../../package.json'); diff --git a/src/backend/setup.js b/src/backend/setup.js index 3a660806..ef870cbe 100644 --- a/src/backend/setup.js +++ b/src/backend/setup.js @@ -1,5 +1,3 @@ -'use strict'; - const fs = require('fs'); const NodeRSA = require('node-rsa'); const config = require('config'); @@ -7,7 +5,7 @@ const logger = require('./logger').setup; const userModel = require('./models/user'); const userPermissionModel = require('./models/user_permission'); const authModel = require('./models/auth'); -const debug_mode = process.env.NODE_ENV !== 'production'; +const debug_mode = process.env.NODE_ENV !== 'production' || !!process.env.DEBUG; module.exports = function () { return new Promise((resolve, reject) => { diff --git a/src/frontend/js/app/audit-log/list/item.js b/src/frontend/js/app/audit-log/list/item.js index f154931f..862ffc22 100644 --- a/src/frontend/js/app/audit-log/list/item.js +++ b/src/frontend/js/app/audit-log/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const Controller = require('../../controller'); const template = require('./item.ejs'); diff --git a/src/frontend/js/app/audit-log/list/main.js b/src/frontend/js/app/audit-log/list/main.js index bbe75beb..88e639e8 100644 --- a/src/frontend/js/app/audit-log/list/main.js +++ b/src/frontend/js/app/audit-log/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const ItemView = require('./item'); const template = require('./main.ejs'); diff --git a/src/frontend/js/app/audit-log/main.js b/src/frontend/js/app/audit-log/main.js index b9c2f15d..ec9b5368 100644 --- a/src/frontend/js/app/audit-log/main.js +++ b/src/frontend/js/app/audit-log/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../main'); const AuditLogModel = require('../../models/audit-log'); diff --git a/src/frontend/js/app/audit-log/meta.js b/src/frontend/js/app/audit-log/meta.js index 9ec962bd..815cdfac 100644 --- a/src/frontend/js/app/audit-log/meta.js +++ b/src/frontend/js/app/audit-log/meta.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const template = require('./meta.ejs'); diff --git a/src/frontend/js/app/cache.js b/src/frontend/js/app/cache.js index 9e6534f1..6d1fbc4f 100644 --- a/src/frontend/js/app/cache.js +++ b/src/frontend/js/app/cache.js @@ -1,5 +1,3 @@ -'use strict'; - const UserModel = require('../models/user'); let cache = { diff --git a/src/frontend/js/app/controller.js b/src/frontend/js/app/controller.js index 7e516434..902659be 100644 --- a/src/frontend/js/app/controller.js +++ b/src/frontend/js/app/controller.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const Cache = require('./cache'); const Tokens = require('./tokens'); @@ -342,6 +340,19 @@ module.exports = { } }, + /** + * Certificate Renew + * + * @param model + */ + showNginxCertificateRenew: function (model) { + if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) { + require(['./main', './nginx/certificates/renew'], function (App, View) { + App.UI.showModalDialog(new View({model: model})); + }); + } + }, + /** * Certificate Delete Confirm * diff --git a/src/frontend/js/app/dashboard/main.js b/src/frontend/js/app/dashboard/main.js index 9d768183..c2e82f85 100644 --- a/src/frontend/js/app/dashboard/main.js +++ b/src/frontend/js/app/dashboard/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const Cache = require('../cache'); const Controller = require('../controller'); diff --git a/src/frontend/js/app/empty/main.js b/src/frontend/js/app/empty/main.js index e6f54e45..74998d65 100644 --- a/src/frontend/js/app/empty/main.js +++ b/src/frontend/js/app/empty/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const template = require('./main.ejs'); diff --git a/src/frontend/js/app/error/main.js b/src/frontend/js/app/error/main.js index 431fb17f..6fa85fc8 100644 --- a/src/frontend/js/app/error/main.js +++ b/src/frontend/js/app/error/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const template = require('./main.ejs'); diff --git a/src/frontend/js/app/help/main.js b/src/frontend/js/app/help/main.js index c5787775..b0f54374 100644 --- a/src/frontend/js/app/help/main.js +++ b/src/frontend/js/app/help/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const template = require('./main.ejs'); diff --git a/src/frontend/js/app/i18n.js b/src/frontend/js/app/i18n.js index 451f1968..c63cdc07 100644 --- a/src/frontend/js/app/i18n.js +++ b/src/frontend/js/app/i18n.js @@ -1,5 +1,3 @@ -'use strict'; - const Cache = ('./cache'); const messages = require('../i18n/messages.json'); diff --git a/src/frontend/js/app/main.js b/src/frontend/js/app/main.js index 09236420..e85b4f62 100644 --- a/src/frontend/js/app/main.js +++ b/src/frontend/js/app/main.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('underscore'); const Backbone = require('backbone'); const Mn = require('../lib/marionette'); diff --git a/src/frontend/js/app/nginx/access/delete.js b/src/frontend/js/app/nginx/access/delete.js index e4660cb1..4af91ab1 100644 --- a/src/frontend/js/app/nginx/access/delete.js +++ b/src/frontend/js/app/nginx/access/delete.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const template = require('./delete.ejs'); diff --git a/src/frontend/js/app/nginx/access/form.js b/src/frontend/js/app/nginx/access/form.js index 89c1020b..d4e77c90 100644 --- a/src/frontend/js/app/nginx/access/form.js +++ b/src/frontend/js/app/nginx/access/form.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const AccessListModel = require('../../../models/access-list'); diff --git a/src/frontend/js/app/nginx/access/form/item.js b/src/frontend/js/app/nginx/access/form/item.js index 07c86b96..f15238dc 100644 --- a/src/frontend/js/app/nginx/access/form/item.js +++ b/src/frontend/js/app/nginx/access/form/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const template = require('./item.ejs'); diff --git a/src/frontend/js/app/nginx/access/list/item.js b/src/frontend/js/app/nginx/access/list/item.js index d6498d52..4f68aead 100644 --- a/src/frontend/js/app/nginx/access/list/item.js +++ b/src/frontend/js/app/nginx/access/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const template = require('./item.ejs'); diff --git a/src/frontend/js/app/nginx/access/list/main.js b/src/frontend/js/app/nginx/access/list/main.js index d5b7aa75..a1fb6521 100644 --- a/src/frontend/js/app/nginx/access/list/main.js +++ b/src/frontend/js/app/nginx/access/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const ItemView = require('./item'); diff --git a/src/frontend/js/app/nginx/access/main.js b/src/frontend/js/app/nginx/access/main.js index 21e54f0f..6b86f55c 100644 --- a/src/frontend/js/app/nginx/access/main.js +++ b/src/frontend/js/app/nginx/access/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const AccessListModel = require('../../../models/access-list'); diff --git a/src/frontend/js/app/nginx/certificates/delete.js b/src/frontend/js/app/nginx/certificates/delete.js index 2499bad1..426e2506 100644 --- a/src/frontend/js/app/nginx/certificates/delete.js +++ b/src/frontend/js/app/nginx/certificates/delete.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const template = require('./delete.ejs'); @@ -16,7 +14,6 @@ module.exports = Mn.View.extend({ }, events: { - 'click @ui.save': function (e) { e.preventDefault(); diff --git a/src/frontend/js/app/nginx/certificates/form.js b/src/frontend/js/app/nginx/certificates/form.js index bde6599e..4c315c15 100644 --- a/src/frontend/js/app/nginx/certificates/form.js +++ b/src/frontend/js/app/nginx/certificates/form.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('underscore'); const Mn = require('backbone.marionette'); const App = require('../../main'); diff --git a/src/frontend/js/app/nginx/certificates/main.js b/src/frontend/js/app/nginx/certificates/main.js index 03f795ad..e1148468 100644 --- a/src/frontend/js/app/nginx/certificates/main.js +++ b/src/frontend/js/app/nginx/certificates/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const CertificateModel = require('../../../models/certificate'); diff --git a/src/frontend/js/app/nginx/dead/delete.js b/src/frontend/js/app/nginx/dead/delete.js index 81356f32..d497d068 100644 --- a/src/frontend/js/app/nginx/dead/delete.js +++ b/src/frontend/js/app/nginx/dead/delete.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const template = require('./delete.ejs'); diff --git a/src/frontend/js/app/nginx/dead/form.js b/src/frontend/js/app/nginx/dead/form.js index 905fab71..4d7ef6b7 100644 --- a/src/frontend/js/app/nginx/dead/form.js +++ b/src/frontend/js/app/nginx/dead/form.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const DeadHostModel = require('../../../models/dead-host'); diff --git a/src/frontend/js/app/nginx/dead/list/item.js b/src/frontend/js/app/nginx/dead/list/item.js index ce5e6db6..a477dbfa 100644 --- a/src/frontend/js/app/nginx/dead/list/item.js +++ b/src/frontend/js/app/nginx/dead/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const template = require('./item.ejs'); diff --git a/src/frontend/js/app/nginx/dead/list/main.js b/src/frontend/js/app/nginx/dead/list/main.js index c1833739..2c457bf5 100644 --- a/src/frontend/js/app/nginx/dead/list/main.js +++ b/src/frontend/js/app/nginx/dead/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const ItemView = require('./item'); diff --git a/src/frontend/js/app/nginx/dead/main.js b/src/frontend/js/app/nginx/dead/main.js index 4741a61c..ac3cb7f1 100644 --- a/src/frontend/js/app/nginx/dead/main.js +++ b/src/frontend/js/app/nginx/dead/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const DeadHostModel = require('../../../models/dead-host'); diff --git a/src/frontend/js/app/nginx/proxy/delete.js b/src/frontend/js/app/nginx/proxy/delete.js index 3f739f8f..63a8e020 100644 --- a/src/frontend/js/app/nginx/proxy/delete.js +++ b/src/frontend/js/app/nginx/proxy/delete.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const template = require('./delete.ejs'); diff --git a/src/frontend/js/app/nginx/proxy/form.js b/src/frontend/js/app/nginx/proxy/form.js index 1e26bcf5..7abb09be 100644 --- a/src/frontend/js/app/nginx/proxy/form.js +++ b/src/frontend/js/app/nginx/proxy/form.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const ProxyHostModel = require('../../../models/proxy-host'); diff --git a/src/frontend/js/app/nginx/proxy/list/item.js b/src/frontend/js/app/nginx/proxy/list/item.js index 9df2fd81..37d199b4 100644 --- a/src/frontend/js/app/nginx/proxy/list/item.js +++ b/src/frontend/js/app/nginx/proxy/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const template = require('./item.ejs'); diff --git a/src/frontend/js/app/nginx/proxy/list/main.js b/src/frontend/js/app/nginx/proxy/list/main.js index 64896c1f..054e856e 100644 --- a/src/frontend/js/app/nginx/proxy/list/main.js +++ b/src/frontend/js/app/nginx/proxy/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const ItemView = require('./item'); diff --git a/src/frontend/js/app/nginx/proxy/location-item.ejs b/src/frontend/js/app/nginx/proxy/location-item.ejs index d6f362a0..8b5eb767 100644 --- a/src/frontend/js/app/nginx/proxy/location-item.ejs +++ b/src/frontend/js/app/nginx/proxy/location-item.ejs @@ -39,7 +39,7 @@
- <%- i18n('proxy-hosts', 'cutom-forward-host-help') %> + <%- i18n('proxy-hosts', 'custom-forward-host-help') %>
diff --git a/src/frontend/js/app/nginx/proxy/main.js b/src/frontend/js/app/nginx/proxy/main.js index 10139ac0..83cedfba 100644 --- a/src/frontend/js/app/nginx/proxy/main.js +++ b/src/frontend/js/app/nginx/proxy/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const ProxyHostModel = require('../../../models/proxy-host'); diff --git a/src/frontend/js/app/nginx/redirection/delete.js b/src/frontend/js/app/nginx/redirection/delete.js index 430f9c48..6d2862f6 100644 --- a/src/frontend/js/app/nginx/redirection/delete.js +++ b/src/frontend/js/app/nginx/redirection/delete.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const template = require('./delete.ejs'); diff --git a/src/frontend/js/app/nginx/redirection/form.js b/src/frontend/js/app/nginx/redirection/form.js index 61e8401f..0cef1a3d 100644 --- a/src/frontend/js/app/nginx/redirection/form.js +++ b/src/frontend/js/app/nginx/redirection/form.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const RedirectionHostModel = require('../../../models/redirection-host'); diff --git a/src/frontend/js/app/nginx/redirection/list/item.js b/src/frontend/js/app/nginx/redirection/list/item.js index 05a5d5a3..05adc251 100644 --- a/src/frontend/js/app/nginx/redirection/list/item.js +++ b/src/frontend/js/app/nginx/redirection/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const template = require('./item.ejs'); diff --git a/src/frontend/js/app/nginx/redirection/list/main.js b/src/frontend/js/app/nginx/redirection/list/main.js index e51e03e6..5aa501e6 100644 --- a/src/frontend/js/app/nginx/redirection/list/main.js +++ b/src/frontend/js/app/nginx/redirection/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const ItemView = require('./item'); diff --git a/src/frontend/js/app/nginx/redirection/main.js b/src/frontend/js/app/nginx/redirection/main.js index 1269fc54..f45f9a07 100644 --- a/src/frontend/js/app/nginx/redirection/main.js +++ b/src/frontend/js/app/nginx/redirection/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const RedirectionHostModel = require('../../../models/redirection-host'); diff --git a/src/frontend/js/app/nginx/stream/delete.js b/src/frontend/js/app/nginx/stream/delete.js index 8e0c57b8..71eff18c 100644 --- a/src/frontend/js/app/nginx/stream/delete.js +++ b/src/frontend/js/app/nginx/stream/delete.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const template = require('./delete.ejs'); diff --git a/src/frontend/js/app/nginx/stream/form.js b/src/frontend/js/app/nginx/stream/form.js index 260a8ce1..2133c3da 100644 --- a/src/frontend/js/app/nginx/stream/form.js +++ b/src/frontend/js/app/nginx/stream/form.js @@ -1,6 +1,3 @@ -'use strict'; - -const _ = require('underscore'); const Mn = require('backbone.marionette'); const App = require('../../main'); const StreamModel = require('../../../models/stream'); diff --git a/src/frontend/js/app/nginx/stream/list/item.js b/src/frontend/js/app/nginx/stream/list/item.js index 34595732..a6892ee2 100644 --- a/src/frontend/js/app/nginx/stream/list/item.js +++ b/src/frontend/js/app/nginx/stream/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const template = require('./item.ejs'); diff --git a/src/frontend/js/app/nginx/stream/list/main.js b/src/frontend/js/app/nginx/stream/list/main.js index 905eaa9d..4b1e27e2 100644 --- a/src/frontend/js/app/nginx/stream/list/main.js +++ b/src/frontend/js/app/nginx/stream/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const ItemView = require('./item'); diff --git a/src/frontend/js/app/nginx/stream/main.js b/src/frontend/js/app/nginx/stream/main.js index 0dc99c02..a8eda92c 100644 --- a/src/frontend/js/app/nginx/stream/main.js +++ b/src/frontend/js/app/nginx/stream/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const StreamModel = require('../../../models/stream'); diff --git a/src/frontend/js/app/router.js b/src/frontend/js/app/router.js index 790ef817..a036bfc5 100644 --- a/src/frontend/js/app/router.js +++ b/src/frontend/js/app/router.js @@ -1,5 +1,3 @@ -'use strict'; - const AppRouter = require('marionette.approuter'); const Controller = require('./controller'); diff --git a/src/frontend/js/app/settings/default-site/main.js b/src/frontend/js/app/settings/default-site/main.js index 4bd14e5c..06a45b8b 100644 --- a/src/frontend/js/app/settings/default-site/main.js +++ b/src/frontend/js/app/settings/default-site/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const template = require('./main.ejs'); diff --git a/src/frontend/js/app/settings/list/item.js b/src/frontend/js/app/settings/list/item.js index c79b73b2..03f9ac05 100644 --- a/src/frontend/js/app/settings/list/item.js +++ b/src/frontend/js/app/settings/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const template = require('./item.ejs'); diff --git a/src/frontend/js/app/settings/list/main.js b/src/frontend/js/app/settings/list/main.js index bbe75beb..88e639e8 100644 --- a/src/frontend/js/app/settings/list/main.js +++ b/src/frontend/js/app/settings/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const ItemView = require('./item'); const template = require('./main.ejs'); diff --git a/src/frontend/js/app/settings/main.js b/src/frontend/js/app/settings/main.js index 348f467f..96b2941f 100644 --- a/src/frontend/js/app/settings/main.js +++ b/src/frontend/js/app/settings/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../main'); const SettingModel = require('../../models/setting'); diff --git a/src/frontend/js/app/tokens.js b/src/frontend/js/app/tokens.js index fb85e9f6..4a56bcab 100644 --- a/src/frontend/js/app/tokens.js +++ b/src/frontend/js/app/tokens.js @@ -1,5 +1,3 @@ -'use strict'; - const STORAGE_NAME = 'nginx-proxy-manager-tokens'; /** @@ -28,7 +26,7 @@ const setStorageTokens = function (tokens) { const Tokens = { /** - * @returns {Integer} + * @returns {Number} */ getTokenCount: () => { return getStorageTokens().length; @@ -62,7 +60,7 @@ const Tokens = { * * @param {String} token * @param {String} [name] - * @returns {Integer} + * @returns {Number} */ addToken: (token, name) => { // Get top token and if it's the same, ignore this call @@ -107,7 +105,7 @@ const Tokens = { }, /** - * @returns {Integer} + * @returns {Number} */ dropTopToken: () => { let tokens = getStorageTokens(); diff --git a/src/frontend/js/app/ui/footer/main.js b/src/frontend/js/app/ui/footer/main.js index 5d00cad1..73f515e6 100644 --- a/src/frontend/js/app/ui/footer/main.js +++ b/src/frontend/js/app/ui/footer/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const template = require('./main.ejs'); const Cache = require('../../cache'); diff --git a/src/frontend/js/app/ui/header/main.js b/src/frontend/js/app/ui/header/main.js index a914ae66..9779b45c 100644 --- a/src/frontend/js/app/ui/header/main.js +++ b/src/frontend/js/app/ui/header/main.js @@ -1,5 +1,3 @@ -'use strict'; - const $ = require('jquery'); const Mn = require('backbone.marionette'); const i18n = require('../../i18n'); diff --git a/src/frontend/js/app/ui/main.js b/src/frontend/js/app/ui/main.js index 4783358d..c90c61d5 100644 --- a/src/frontend/js/app/ui/main.js +++ b/src/frontend/js/app/ui/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const template = require('./main.ejs'); const HeaderView = require('./header/main'); diff --git a/src/frontend/js/app/ui/menu/main.js b/src/frontend/js/app/ui/menu/main.js index 43186541..dabe26d3 100644 --- a/src/frontend/js/app/ui/menu/main.js +++ b/src/frontend/js/app/ui/menu/main.js @@ -1,5 +1,3 @@ -'use strict'; - const $ = require('jquery'); const Mn = require('backbone.marionette'); const Controller = require('../../controller'); diff --git a/src/frontend/js/app/user/delete.js b/src/frontend/js/app/user/delete.js index 87aa7d5e..e8ed5c32 100644 --- a/src/frontend/js/app/user/delete.js +++ b/src/frontend/js/app/user/delete.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const template = require('./delete.ejs'); const App = require('../main'); diff --git a/src/frontend/js/app/user/form.js b/src/frontend/js/app/user/form.js index 6fe88f09..ef92ec3e 100644 --- a/src/frontend/js/app/user/form.js +++ b/src/frontend/js/app/user/form.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../main'); const UserModel = require('../../models/user'); diff --git a/src/frontend/js/app/user/password.js b/src/frontend/js/app/user/password.js index 7530ddbf..06c57261 100644 --- a/src/frontend/js/app/user/password.js +++ b/src/frontend/js/app/user/password.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../main'); const template = require('./password.ejs'); diff --git a/src/frontend/js/app/user/permissions.js b/src/frontend/js/app/user/permissions.js index 3621273a..af8049ce 100644 --- a/src/frontend/js/app/user/permissions.js +++ b/src/frontend/js/app/user/permissions.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../main'); const UserModel = require('../../models/user'); diff --git a/src/frontend/js/app/users/list/item.js b/src/frontend/js/app/users/list/item.js index 4b5b2c82..4645a5c4 100644 --- a/src/frontend/js/app/users/list/item.js +++ b/src/frontend/js/app/users/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../main'); const Tokens = require('../../tokens'); diff --git a/src/frontend/js/app/users/list/main.js b/src/frontend/js/app/users/list/main.js index bbe75beb..88e639e8 100644 --- a/src/frontend/js/app/users/list/main.js +++ b/src/frontend/js/app/users/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const ItemView = require('./item'); const template = require('./main.ejs'); diff --git a/src/frontend/js/app/users/main.js b/src/frontend/js/app/users/main.js index db4a389f..95d42c61 100644 --- a/src/frontend/js/app/users/main.js +++ b/src/frontend/js/app/users/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../main'); const UserModel = require('../../models/user'); diff --git a/src/frontend/js/lib/helpers.js b/src/frontend/js/lib/helpers.js index 578fe3ce..21ce7424 100644 --- a/src/frontend/js/lib/helpers.js +++ b/src/frontend/js/lib/helpers.js @@ -1,5 +1,3 @@ -'use strict'; - const numeral = require('numeral'); const moment = require('moment'); diff --git a/src/frontend/js/lib/marionette.js b/src/frontend/js/lib/marionette.js index c2989fde..c88368f8 100644 --- a/src/frontend/js/lib/marionette.js +++ b/src/frontend/js/lib/marionette.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('underscore'); const Mn = require('backbone.marionette'); const i18n = require('../app/i18n'); diff --git a/src/frontend/js/login/main.js b/src/frontend/js/login/main.js index 80d28660..934a073a 100644 --- a/src/frontend/js/login/main.js +++ b/src/frontend/js/login/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const LoginView = require('./ui/login'); diff --git a/src/frontend/js/login/ui/login.js b/src/frontend/js/login/ui/login.js index da1bc858..757eb4e3 100644 --- a/src/frontend/js/login/ui/login.js +++ b/src/frontend/js/login/ui/login.js @@ -1,5 +1,3 @@ -'use strict'; - const $ = require('jquery'); const Mn = require('backbone.marionette'); const template = require('./login.ejs'); diff --git a/src/frontend/js/models/access-list.js b/src/frontend/js/models/access-list.js index 60cd57dd..8cd9306f 100644 --- a/src/frontend/js/models/access-list.js +++ b/src/frontend/js/models/access-list.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/audit-log.js b/src/frontend/js/models/audit-log.js index 2918ff40..c929a0bd 100644 --- a/src/frontend/js/models/audit-log.js +++ b/src/frontend/js/models/audit-log.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/certificate.js b/src/frontend/js/models/certificate.js index 60df86c7..c7d0b2d9 100644 --- a/src/frontend/js/models/certificate.js +++ b/src/frontend/js/models/certificate.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/dead-host.js b/src/frontend/js/models/dead-host.js index eaacf1b3..98ceef29 100644 --- a/src/frontend/js/models/dead-host.js +++ b/src/frontend/js/models/dead-host.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/proxy-host-location.js b/src/frontend/js/models/proxy-host-location.js index 08459138..2a35059f 100644 --- a/src/frontend/js/models/proxy-host-location.js +++ b/src/frontend/js/models/proxy-host-location.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/proxy-host.js b/src/frontend/js/models/proxy-host.js index e169fa02..b82d09fe 100644 --- a/src/frontend/js/models/proxy-host.js +++ b/src/frontend/js/models/proxy-host.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/redirection-host.js b/src/frontend/js/models/redirection-host.js index cb31e6fb..a4f11e21 100644 --- a/src/frontend/js/models/redirection-host.js +++ b/src/frontend/js/models/redirection-host.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/setting.js b/src/frontend/js/models/setting.js index 4ee198df..c70a4e9c 100644 --- a/src/frontend/js/models/setting.js +++ b/src/frontend/js/models/setting.js @@ -1,6 +1,3 @@ -'use strict'; - -const _ = require('underscore'); const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/stream.js b/src/frontend/js/models/stream.js index 69f23111..e4693549 100644 --- a/src/frontend/js/models/stream.js +++ b/src/frontend/js/models/stream.js @@ -1,5 +1,3 @@ -'use strict'; - const Backbone = require('backbone'); const model = Backbone.Model.extend({ diff --git a/src/frontend/js/models/user.js b/src/frontend/js/models/user.js index 2fe809ef..a8e4ed9e 100644 --- a/src/frontend/js/models/user.js +++ b/src/frontend/js/models/user.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('underscore'); const Backbone = require('backbone'); From 4d5adefa41da9b62a20683e6d22bc21c8d1d237d Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 8 May 2019 15:25:48 +1000 Subject: [PATCH 10/17] Added ability to force renew a LE cert, and also fix revoking certs --- src/backend/internal/certificate.js | 70 +++++++++++++++---- src/backend/routes/api/nginx/certificates.js | 34 +++++++-- src/frontend/js/app/api.js | 39 +++++------ .../js/app/nginx/certificates/list/item.ejs | 29 +++++--- .../js/app/nginx/certificates/list/item.js | 17 ++++- .../js/app/nginx/certificates/list/main.js | 2 - src/frontend/js/i18n/messages.json | 9 ++- 7 files changed, 141 insertions(+), 59 deletions(-) diff --git a/src/backend/internal/certificate.js b/src/backend/internal/certificate.js index 6b1bd1cd..fbe5e25e 100644 --- a/src/backend/internal/certificate.js +++ b/src/backend/internal/certificate.js @@ -1,5 +1,3 @@ -'use strict'; - const fs = require('fs'); const _ = require('lodash'); const logger = require('../logger').ssl; @@ -9,7 +7,7 @@ const internalAuditLog = require('./audit-log'); const tempWrite = require('temp-write'); const utils = require('../lib/utils'); const moment = require('moment'); -const debug_mode = process.env.NODE_ENV !== 'production'; +const debug_mode = process.env.NODE_ENV !== 'production' || !!process.env.DEBUG ; const internalNginx = require('./nginx'); const internalHost = require('./host'); const certbot_command = '/usr/bin/certbot'; @@ -21,7 +19,7 @@ function omissions () { const internalCertificate = { allowed_ssl_files: ['certificate', 'certificate_key', 'intermediate_certificate'], - interval_timeout: 1000 * 60 * 60 * 12, // 12 hours + interval_timeout: 1000 * 60 * 60, // 1 hour interval: null, interval_processing: false, @@ -205,7 +203,7 @@ const internalCertificate = { /** * @param {Access} access * @param {Object} data - * @param {Integer} data.id + * @param {Number} data.id * @param {String} [data.email] * @param {String} [data.name] * @return {Promise} @@ -251,7 +249,7 @@ const internalCertificate = { /** * @param {Access} access * @param {Object} data - * @param {Integer} data.id + * @param {Number} data.id * @param {Array} [data.expand] * @param {Array} [data.omit] * @return {Promise} @@ -297,7 +295,7 @@ const internalCertificate = { /** * @param {Access} access * @param {Object} data - * @param {Integer} data.id + * @param {Number} data.id * @param {String} [data.reason] * @returns {Promise} */ @@ -381,7 +379,7 @@ const internalCertificate = { /** * Report use * - * @param {Integer} user_id + * @param {Number} user_id * @param {String} visibility * @returns {Promise} */ @@ -522,7 +520,7 @@ const internalCertificate = { /** * @param {Access} access * @param {Object} data - * @param {Integer} data.id + * @param {Number} data.id * @param {Object} data.files * @returns {Promise} */ @@ -734,6 +732,36 @@ const internalCertificate = { }); }, + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @returns {Promise} + */ + renew: (access, data) => { + return access.can('certificates:update', data) + .then(() => { + return internalCertificate.get(access, data); + }) + .then((certificate) => { + if (certificate.provider === 'letsencrypt') { + return internalCertificate.renewLetsEncryptSsl(certificate) + .then(() => { + return internalCertificate.getCertificateInfoFromFile('/etc/letsencrypt/live/npm-' + certificate.id + '/fullchain.pem') + }) + .then(cert_info => { + return certificateModel + .query() + .patchAndFetchById(certificate.id, { + expires_on: certificateModel.raw('FROM_UNIXTIME(' + cert_info.dates.to + ')') + }); + }); + } else { + throw new error.ValidationError('Only Let\'sEncrypt certificates can be renewed'); + } + }) + }, + /** * @param {Object} certificate the certificate row * @returns {Promise} @@ -762,17 +790,29 @@ const internalCertificate = { revokeLetsEncryptSsl: (certificate, throw_errors) => { logger.info('Revoking Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', ')); - let cmd = certbot_command + ' revoke --cert-path "/etc/letsencrypt/live/npm-' + certificate.id + '/fullchain.pem" ' + (debug_mode ? '--staging' : ''); + let revoke_cmd = certbot_command + ' revoke --cert-path "/etc/letsencrypt/live/npm-' + certificate.id + '/fullchain.pem" ' + (debug_mode ? '--staging' : ''); + let delete_cmd = certbot_command + ' delete --cert-name "npm-' + certificate.id + '" ' + (debug_mode ? '--staging' : ''); if (debug_mode) { - logger.info('Command:', cmd); + logger.info('Command:', revoke_cmd); } - return utils.exec(cmd) - .then(result => { + return utils.exec(revoke_cmd) + .then((result) => { logger.info(result); return result; }) + .then(() => { + if (debug_mode) { + logger.info('Command:', delete_cmd); + } + + return utils.exec(delete_cmd) + .then((result) => { + logger.info(result); + return result; + }) + }) .catch(err => { if (debug_mode) { logger.error(err.message); @@ -796,7 +836,7 @@ const internalCertificate = { /** * @param {Object} in_use_result - * @param {Integer} in_use_result.total_count + * @param {Number} in_use_result.total_count * @param {Array} in_use_result.proxy_hosts * @param {Array} in_use_result.redirection_hosts * @param {Array} in_use_result.dead_hosts @@ -826,7 +866,7 @@ const internalCertificate = { /** * @param {Object} in_use_result - * @param {Integer} in_use_result.total_count + * @param {Number} in_use_result.total_count * @param {Array} in_use_result.proxy_hosts * @param {Array} in_use_result.redirection_hosts * @param {Array} in_use_result.dead_hosts diff --git a/src/backend/routes/api/nginx/certificates.js b/src/backend/routes/api/nginx/certificates.js index 04fafdf7..4c873bc0 100644 --- a/src/backend/routes/api/nginx/certificates.js +++ b/src/backend/routes/api/nginx/certificates.js @@ -1,5 +1,3 @@ -'use strict'; - const express = require('express'); const validator = require('../../../lib/validator'); const jwtdecode = require('../../../lib/express/jwt-decode'); @@ -94,13 +92,13 @@ router certificate_id: { $ref: 'definitions#/definitions/id' }, - expand: { + expand: { $ref: 'definitions#/definitions/expand' } } }, { certificate_id: req.params.certificate_id, - expand: (typeof req.query.expand === 'string' ? req.query.expand.split(',') : null) + expand: (typeof req.query.expand === 'string' ? req.query.expand.split(',') : null) }) .then(data => { return internalCertificate.get(res.locals.access, { @@ -181,6 +179,34 @@ router } }); +/** + * Renew LE Certs + * + * /api/nginx/certificates/123/renew + */ +router + .route('/:certificate_id/renew') + .options((req, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/certificates/123/renew + * + * Renew certificate + */ + .post((req, res, next) => { + internalCertificate.renew(res.locals.access, { + id: parseInt(req.params.certificate_id, 10) + }) + .then(result => { + res.status(200) + .send(result); + }) + .catch(next); + }); + /** * Validate Certs before saving * diff --git a/src/frontend/js/app/api.js b/src/frontend/js/app/api.js index c8d57193..74356f06 100644 --- a/src/frontend/js/app/api.js +++ b/src/frontend/js/app/api.js @@ -1,5 +1,3 @@ -'use strict'; - const $ = require('jquery'); const _ = require('underscore'); const Tokens = require('./tokens'); @@ -11,8 +9,8 @@ const Tokens = require('./tokens'); * @constructor */ const ApiError = function (message, debug, code) { - let temp = Error.call(this, message); - temp.name = this.name = 'ApiError'; + let temp = Error.call(this, message); + temp.name = this.name = 'ApiError'; this.stack = temp.stack; this.message = temp.message; this.debug = debug; @@ -35,7 +33,7 @@ ApiError.prototype = Object.create(Error.prototype, { * @param {Object} [options] * @returns {Promise} */ -function fetch (verb, path, data, options) { +function fetch(verb, path, data, options) { options = options || {}; return new Promise(function (resolve, reject) { @@ -55,7 +53,7 @@ function fetch (verb, path, data, options) { contentType: options.contentType || 'application/json; charset=UTF-8', processData: options.processData || true, crossDomain: true, - timeout: options.timeout ? options.timeout : 15000, + timeout: options.timeout ? options.timeout : 30000, xhrFields: { withCredentials: true }, @@ -99,7 +97,7 @@ function fetch (verb, path, data, options) { * @param {Array} expand * @returns {String} */ -function makeExpansionString (expand) { +function makeExpansionString(expand) { let items = []; _.forEach(expand, function (exp) { items.push(encodeURIComponent(exp)); @@ -114,7 +112,7 @@ function makeExpansionString (expand) { * @param {String} [query] * @returns {Promise} */ -function getAllObjects (path, expand, query) { +function getAllObjects(path, expand, query) { let params = []; if (typeof expand === 'object' && expand !== null && expand.length) { @@ -128,20 +126,7 @@ function getAllObjects (path, expand, query) { return fetch('get', path + (params.length ? '?' + params.join('&') : '')); } -/** - * @param {String} path - * @param {FormData} form_data - * @returns {Promise} - */ -function upload (path, form_data) { - console.log('UPLOAD:', path, form_data); - return fetch('post', path, form_data, { - contentType: 'multipart/form-data', - processData: false - }); -} - -function FileUpload (path, fd) { +function FileUpload(path, fd) { return new Promise((resolve, reject) => { let xhr = new XMLHttpRequest(); let token = Tokens.getTopToken(); @@ -214,7 +199,7 @@ module.exports = { Users: { /** - * @param {Integer|String} user_id + * @param {Number|String} user_id * @param {Array} [expand] * @returns {Promise} */ @@ -639,6 +624,14 @@ module.exports = { */ validate: function (form_data) { return FileUpload('nginx/certificates/validate', form_data); + }, + + /** + * @param {Number} id + * @returns {Promise} + */ + renew: function (id) { + return fetch('post', 'nginx/certificates/' + id + '/renew'); } } }, diff --git a/src/frontend/js/app/nginx/certificates/list/item.ejs b/src/frontend/js/app/nginx/certificates/list/item.ejs index ad22fb51..dd794052 100644 --- a/src/frontend/js/app/nginx/certificates/list/item.ejs +++ b/src/frontend/js/app/nginx/certificates/list/item.ejs @@ -5,16 +5,23 @@
- <% if (provider === 'letsencrypt') { %> - <% domain_names.map(function(host) { - %> - <%- host %> - <% + <% + if (provider === 'letsencrypt') { + domain_names.map(function(host) { + if (host.indexOf('*') === -1) { + %> + <%- host %> + <% + } else { + %> + <%- host %> + <% + } }); - %> - <% } else { %> - <%- nice_name %> - <% } %> + } else { + %><%- nice_name %><% + } + %>
<%- i18n('str', 'created-on', {date: formatDbDate(created_on, 'Do MMMM YYYY')}) %> @@ -31,6 +38,10 @@ diff --git a/src/frontend/js/app/nginx/certificates/list/item.js b/src/frontend/js/app/nginx/certificates/list/item.js index d2897472..69152270 100644 --- a/src/frontend/js/app/nginx/certificates/list/item.js +++ b/src/frontend/js/app/nginx/certificates/list/item.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const moment = require('moment'); const App = require('../../../main'); @@ -10,13 +8,26 @@ module.exports = Mn.View.extend({ tagName: 'tr', ui: { - delete: 'a.delete' + host_link: '.host-link', + renew: 'a.renew', + delete: 'a.delete' }, events: { + 'click @ui.renew': function (e) { + e.preventDefault(); + App.Controller.showNginxCertificateRenew(this.model); + }, + 'click @ui.delete': function (e) { e.preventDefault(); App.Controller.showNginxCertificateDeleteConfirm(this.model); + }, + + 'click @ui.host_link': function (e) { + e.preventDefault(); + let win = window.open($(e.currentTarget).attr('rel'), '_blank'); + win.focus(); } }, diff --git a/src/frontend/js/app/nginx/certificates/list/main.js b/src/frontend/js/app/nginx/certificates/list/main.js index 6472604c..6bc79245 100644 --- a/src/frontend/js/app/nginx/certificates/list/main.js +++ b/src/frontend/js/app/nginx/certificates/list/main.js @@ -1,5 +1,3 @@ -'use strict'; - const Mn = require('backbone.marionette'); const App = require('../../../main'); const ItemView = require('./item'); diff --git a/src/frontend/js/i18n/messages.json b/src/frontend/js/i18n/messages.json index dd095b07..fff42c13 100644 --- a/src/frontend/js/i18n/messages.json +++ b/src/frontend/js/i18n/messages.json @@ -32,7 +32,8 @@ "offline": "Offline", "unknown": "Unknown", "expires": "Expires", - "value": "Value" + "value": "Value", + "please-wait": "Please wait..." }, "login": { "title": "Login to your account" @@ -115,7 +116,7 @@ "access-list": "Access List", "allow-websocket-upgrade": "Websockets Support", "ignore-invalid-upstream-ssl": "Ignore Invalid SSL", - "cutom-forward-host-help": "Use 1.1.1.1/path for sub-folder forwarding" + "custom-forward-host-help": "Use 1.1.1.1/path for sub-folder forwarding" }, "redirection-hosts": { "title": "Redirection Hosts", @@ -169,7 +170,9 @@ "help-content": "TODO", "other-certificate": "Certificate", "other-certificate-key": "Certificate Key", - "other-intermediate-certificate": "Intermediate Certificate" + "other-intermediate-certificate": "Intermediate Certificate", + "force-renew": "Renew Now", + "renew-title": "Renew Let'sEncrypt Certificate" }, "access-lists": { "title": "Access Lists", From 22e8961c8044efc3f36a00a0c463738e427a4de5 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 8 May 2019 15:33:54 +1000 Subject: [PATCH 11/17] Fixes #104 - allow using / location in custom location --- src/backend/internal/nginx.js | 10 +++++++++- src/backend/internal/proxy-host.js | 10 +++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/backend/internal/nginx.js b/src/backend/internal/nginx.js index 556e9fdf..21fdbc0a 100644 --- a/src/backend/internal/nginx.js +++ b/src/backend/internal/nginx.js @@ -162,7 +162,7 @@ const internalNginx = { renderedLocations += await renderer.parseAndRender(template, locationCopy); } - } + }; locationRendering().then(() => resolve(renderedLocations)); }); @@ -211,6 +211,14 @@ const internalNginx = { locationsPromise = internalNginx.renderLocations(host).then((renderedLocations) => { host.locations = renderedLocations; }); + + // Allow someone who is using / custom location path to use it, and skip the default / location + _.map(host.locations, (location) => { + if (location.path === '/') { + host.use_default_location = false; + } + }); + } else { locationsPromise = Promise.resolve(); } diff --git a/src/backend/internal/proxy-host.js b/src/backend/internal/proxy-host.js index 9f1d9be8..c8a75ffd 100644 --- a/src/backend/internal/proxy-host.js +++ b/src/backend/internal/proxy-host.js @@ -25,7 +25,7 @@ const internalProxyHost = { } return access.can('proxy_hosts:create', data) - .then(access_data => { + .then(() => { // Get a list of the domain names and check each of them against existing records let domain_name_check_promises = []; @@ -52,7 +52,7 @@ const internalProxyHost = { .omit(omissions()) .insertAndFetch(data); }) - .then(row => { + .then((row) => { if (create_certificate) { return internalCertificate.createQuickCertificate(access, data) .then(cert => { @@ -69,21 +69,21 @@ const internalProxyHost = { return row; } }) - .then(row => { + .then((row) => { // re-fetch with cert return internalProxyHost.get(access, { id: row.id, expand: ['certificate', 'owner', 'access_list'] }); }) - .then(row => { + .then((row) => { // Configure nginx return internalNginx.configure(proxyHostModel, 'proxy_host', row) .then(() => { return row; }); }) - .then(row => { + .then((row) => { // Audit log data.meta = _.assign({}, data.meta || {}, row.meta); From 92fcae9c54965c4e3cafec8b5a80f3dbc87ee727 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 8 May 2019 15:34:14 +1000 Subject: [PATCH 12/17] Added missing dialog for renewing certs --- .../js/app/nginx/certificates/renew.ejs | 14 +++++++++ .../js/app/nginx/certificates/renew.js | 31 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/frontend/js/app/nginx/certificates/renew.ejs create mode 100644 src/frontend/js/app/nginx/certificates/renew.js diff --git a/src/frontend/js/app/nginx/certificates/renew.ejs b/src/frontend/js/app/nginx/certificates/renew.ejs new file mode 100644 index 00000000..4af186d0 --- /dev/null +++ b/src/frontend/js/app/nginx/certificates/renew.ejs @@ -0,0 +1,14 @@ + diff --git a/src/frontend/js/app/nginx/certificates/renew.js b/src/frontend/js/app/nginx/certificates/renew.js new file mode 100644 index 00000000..73632881 --- /dev/null +++ b/src/frontend/js/app/nginx/certificates/renew.js @@ -0,0 +1,31 @@ +const Mn = require('backbone.marionette'); +const App = require('../../main'); +const template = require('./renew.ejs'); + +module.exports = Mn.View.extend({ + template: template, + className: 'modal-dialog', + + ui: { + waiting: '.waiting', + error: '.error', + close: 'button.cancel' + }, + + onRender: function () { + this.ui.error.hide(); + + App.Api.Nginx.Certificates.renew(this.model.get('id')) + .then((result) => { + this.model.set(result); + setTimeout(() => { + App.UI.closeModal(); + }, 1000); + }) + .catch((err) => { + this.ui.waiting.hide(); + this.ui.error.text(err.message).show(); + this.ui.close.prop('disabled', false); + }); + } +}); From 099ec00155b080fb3e796be3090a5bb2767afd72 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Thu, 9 May 2019 08:58:10 +1000 Subject: [PATCH 13/17] Don't use LE staging when debug mode is on in production --- src/backend/internal/certificate.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/backend/internal/certificate.js b/src/backend/internal/certificate.js index fbe5e25e..f37effef 100644 --- a/src/backend/internal/certificate.js +++ b/src/backend/internal/certificate.js @@ -7,12 +7,13 @@ const internalAuditLog = require('./audit-log'); const tempWrite = require('temp-write'); const utils = require('../lib/utils'); const moment = require('moment'); -const debug_mode = process.env.NODE_ENV !== 'production' || !!process.env.DEBUG ; +const debug_mode = process.env.NODE_ENV !== 'production' || !!process.env.DEBUG; +const le_staging = process.env.NODE_ENV !== 'production'; const internalNginx = require('./nginx'); const internalHost = require('./host'); const certbot_command = '/usr/bin/certbot'; -function omissions () { +function omissions() { return ['is_deleted']; } @@ -36,7 +37,7 @@ const internalCertificate = { internalCertificate.interval_processing = true; logger.info('Renewing SSL certs close to expiry...'); - return utils.exec(certbot_command + ' renew -q ' + (debug_mode ? '--staging' : '')) + return utils.exec(certbot_command + ' renew -q ' + (le_staging ? '--staging' : '')) .then(result => { logger.info(result); @@ -719,7 +720,7 @@ const internalCertificate = { '--email "' + certificate.meta.letsencrypt_email + '" ' + '--preferred-challenges "dns,http" ' + '-n -a webroot -d "' + certificate.domain_names.join(',') + '" ' + - (debug_mode ? '--staging' : ''); + (le_staging ? '--staging' : ''); if (debug_mode) { logger.info('Command:', cmd); @@ -769,7 +770,7 @@ const internalCertificate = { renewLetsEncryptSsl: certificate => { logger.info('Renewing Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', ')); - let cmd = certbot_command + ' renew -n --force-renewal --disable-hook-validation --cert-name "npm-' + certificate.id + '" ' + (debug_mode ? '--staging' : ''); + let cmd = certbot_command + ' renew -n --force-renewal --disable-hook-validation --cert-name "npm-' + certificate.id + '" ' + (le_staging ? '--staging' : ''); if (debug_mode) { logger.info('Command:', cmd); @@ -790,8 +791,8 @@ const internalCertificate = { revokeLetsEncryptSsl: (certificate, throw_errors) => { logger.info('Revoking Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', ')); - let revoke_cmd = certbot_command + ' revoke --cert-path "/etc/letsencrypt/live/npm-' + certificate.id + '/fullchain.pem" ' + (debug_mode ? '--staging' : ''); - let delete_cmd = certbot_command + ' delete --cert-name "npm-' + certificate.id + '" ' + (debug_mode ? '--staging' : ''); + let revoke_cmd = certbot_command + ' revoke --cert-path "/etc/letsencrypt/live/npm-' + certificate.id + '/fullchain.pem" ' + (le_staging ? '--staging' : ''); + let delete_cmd = certbot_command + ' delete --cert-name "npm-' + certificate.id + '" ' + (le_staging ? '--staging' : ''); if (debug_mode) { logger.info('Command:', revoke_cmd); From 3885c0ad6d5b3fc0c5bda0743a9035df2f50b2de Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Thu, 9 May 2019 09:20:49 +1000 Subject: [PATCH 14/17] Add cert renewals to audit log --- src/backend/internal/certificate.js | 14 +++++++++++++- src/frontend/js/i18n/messages.json | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/backend/internal/certificate.js b/src/backend/internal/certificate.js index f37effef..56c8617b 100644 --- a/src/backend/internal/certificate.js +++ b/src/backend/internal/certificate.js @@ -756,7 +756,19 @@ const internalCertificate = { .patchAndFetchById(certificate.id, { expires_on: certificateModel.raw('FROM_UNIXTIME(' + cert_info.dates.to + ')') }); - }); + }) + .then((updated_certificate) => { + // Add to audit log + return internalAuditLog.add(access, { + action: 'renewed', + object_type: 'certificate', + object_id: updated_certificate.id, + meta: updated_certificate + }) + .then(() => { + return certificate; + }); + }) } else { throw new error.ValidationError('Only Let\'sEncrypt certificates can be renewed'); } diff --git a/src/frontend/js/i18n/messages.json b/src/frontend/js/i18n/messages.json index fff42c13..3d4d0ae4 100644 --- a/src/frontend/js/i18n/messages.json +++ b/src/frontend/js/i18n/messages.json @@ -231,6 +231,7 @@ "deleted": "Deleted {name}", "enabled": "Enabled {name}", "disabled": "Disabled {name}", + "renewed": "Renewed {name}", "meta-title": "Details for Event", "view-meta": "View Details", "date": "Date" From 06272d3d2cf99507b353e82af5822926bdca0f5a Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Thu, 9 May 2019 10:03:41 +1000 Subject: [PATCH 15/17] Use correct var when returning updated certificate --- src/backend/internal/audit-log.js | 6 +++--- src/backend/internal/certificate.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/internal/audit-log.js b/src/backend/internal/audit-log.js index 5f7f1da0..52090ebd 100644 --- a/src/backend/internal/audit-log.js +++ b/src/backend/internal/audit-log.js @@ -44,9 +44,9 @@ const internalAuditLog = { * @param {Access} access * @param {Object} data * @param {String} data.action - * @param {Integer} [data.user_id] - * @param {Integer} [data.object_id] - * @param {Integer} [data.object_type] + * @param {Number} [data.user_id] + * @param {Number} [data.object_id] + * @param {Number} [data.object_type] * @param {Object} [data.meta] * @returns {Promise} */ diff --git a/src/backend/internal/certificate.js b/src/backend/internal/certificate.js index 56c8617b..89d49767 100644 --- a/src/backend/internal/certificate.js +++ b/src/backend/internal/certificate.js @@ -766,7 +766,7 @@ const internalCertificate = { meta: updated_certificate }) .then(() => { - return certificate; + return updated_certificate; }); }) } else { From 2d0f7d5126a183b9af4e99b6da8865fe7645464d Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Fri, 10 May 2019 15:26:12 +1000 Subject: [PATCH 16/17] Updated documentation, installation instructions and examples --- doc/DOCKERHUB.md | 13 ++-- doc/INSTALL.md | 112 ++++++++++++++------------------- doc/example/config.json | 6 +- doc/example/docker-compose.yml | 12 ++-- docker-compose.yml | 8 +-- 5 files changed, 68 insertions(+), 83 deletions(-) diff --git a/doc/DOCKERHUB.md b/doc/DOCKERHUB.md index ca66f3d7..e37260f8 100644 --- a/doc/DOCKERHUB.md +++ b/doc/DOCKERHUB.md @@ -6,6 +6,7 @@ ![Stars](https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge) ![Pulls](https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge) +[nginxproxymanager.jc21.com](https://nginxproxymanager.jc21.com) [View on Github](https://github.com/jc21/nginx-proxy-manager) This project comes as a pre-built docker image that enables you to easily forward to your websites @@ -14,17 +15,19 @@ running at home or otherwise, including free SSL, without having to know too muc ## Tags -* latest 2, 2.x.x ([Dockerfile](https://github.com/jc21/nginx-proxy-manager/blob/master/Dockerfile)) -* latest-armhf, 2-armhf, 2.x.x-armhf ([Dockerfile](https://github.com/jc21/nginx-proxy-manager/blob/master/Dockerfile.armhf)) +* latest 2, 2.x.x ([Dockerfile](https://github.com/jc21/nginx-proxy-manager/blob/master/Dockerfile)) * latest-arm64, 2-arm64, 2.x.x-arm64 ([Dockerfile](https://github.com/jc21/nginx-proxy-manager/blob/master/Dockerfile.arm64)) -* 1, 1.x.x ([Dockerfile](https://github.com/jc21/nginx-proxy-manager/blob/1.1.2/Dockerfile)) -* 1-armhf, 1.x.x-armhf ([Dockerfile](https://github.com/jc21/nginx-proxy-manager/blob/1.1.2/Dockerfile.armhf)) +* latest-arm7l, 2-arm7l, 2.x.x-arm7l ([Dockerfile](https://github.com/jc21/nginx-proxy-manager/blob/master/Dockerfile.arm7l)) ## Getting started Please consult the [installation instructions](https://github.com/jc21/nginx-proxy-manager/blob/master/doc/INSTALL.md) for a complete guide or -if you just want to get up and running in the quickest time possible, grab all the files in the [doc/example/](https://github.com/jc21/nginx-proxy-manager/tree/master/doc/example) folder and run `docker-compose up -d` +if you just want to get up and running in the quickest time possible, grab all the files in the [doc/example/](https://github.com/jc21/nginx-proxy-manager/tree/master/doc/example) folder and run: + +```bash +docker-compose up -d +``` ## Screenshots diff --git a/doc/INSTALL.md b/doc/INSTALL.md index 3b06e410..ad74c08d 100644 --- a/doc/INSTALL.md +++ b/doc/INSTALL.md @@ -1,9 +1,13 @@ ## Installation and Configuration -There's a few ways to configure this app depending on: +If you just want to get up and running in the quickest time possible, grab all the files in +the [doc/example/](https://github.com/jc21/nginx-proxy-manager/tree/master/doc/example) +folder and run: + +```bash +docker-compose up -d +``` -- Whether you use `docker-compose` or vanilla docker -- Which architecture you're running it on (raspberry pi also supported - Testers wanted!) ### Configuration File @@ -13,22 +17,22 @@ Don't worry, this is easy to do. The app requires a configuration file to let it know what database you're using. -Here's an example configuration for `mysql` (or mariadb): +Here's an example configuration for `mysql` (or mariadb) that is compatible with the docker-compose example below: ```json { "database": { "engine": "mysql", - "host": "127.0.0.1", - "name": "nginxproxymanager", - "user": "nginxproxymanager", - "password": "password123", + "host": "db", + "name": "npm", + "user": "npm", + "password": "npm", "port": 3306 } } ``` -Once you've created your configuration file it's easy to mount it in the docker container, examples below. +Once you've created your configuration file it's easy to mount it in the docker container. **Note:** After the first run of the application, the config file will be altered to include generated encryption keys unique to your installation. These keys affect the login and session management of the application. If these keys change for any reason, all users will be logged out. @@ -36,37 +40,13 @@ affect the login and session management of the application. If these keys change ### Database -This app doesn't come with a database, you have to provide one yourself. Currently only `mysql/mariadb` is supported. +This app doesn't come with a database, you have to provide one yourself. Currently only `mysql/mariadb` is supported for the minimum versions: -It's easy to use another docker container for your database also and link it as part of the docker stack. Here's an example: +- MySQL v5.7.8+ +- MariaDB v10.2.7+ -```yml -version: "3" -services: - app: - image: jc21/nginx-proxy-manager:latest - restart: always - ports: - - 80:80 - - 81:81 - - 443:443 - volumes: - - ./config.json:/app/config/production.json - - ./data:/data - - ./letsencrypt:/etc/letsencrypt - depends_on: - - db - db: - image: jc21/mariadb-aria - restart: always - environment: - MYSQL_ROOT_PASSWORD: "password123" - MYSQL_DATABASE: "nginxproxymanager" - MYSQL_USER: "nginxproxymanager" - MYSQL_PASSWORD: "password123" - volumes: - - ./data/mysql:/var/lib/mysql -``` +It's easy to use another docker container for your database also and link it as part of the docker stack, so that's what the following examples +are going to use. ### Running the App @@ -80,48 +60,51 @@ services: image: jc21/nginx-proxy-manager:latest restart: always ports: + # Public HTTP Port: - 80:80 - - 81:81 + # Public HTTPS Port: - 443:443 + # Admin Web Port: + - 81:81 volumes: + # Make sure this config.json file exists as per instructions above: - ./config.json:/app/config/production.json - ./data:/data - ./letsencrypt:/etc/letsencrypt + depends_on: + - db + db: + image: mariadb + restart: always + environment: + MYSQL_ROOT_PASSWORD: "npm" + MYSQL_DATABASE: "npm" + MYSQL_USER: "npm" + MYSQL_PASSWORD: "npm" + volumes: + - ./data/mysql:/var/lib/mysql ``` -Vanilla Docker: +Then: ```bash -docker run -d \ - --name nginx-proxy-manager \ - -p 80:80 \ - -p 81:81 \ - -p 443:443 \ - -v /path/to/config.json:/app/config/production.json \ - -v /path/to/data:/data \ - -v /path/to/letsencrypt:/etc/letsencrypt \ - jc21/nginx-proxy-manager:latest +docker-compose up -d ``` -### Running on Raspberry PI / `armhf` +### Running on Raspberry PI / ARM devices -I have created `armhf` and `arm64` docker containers just for you. There may be issues with it, -if you have issues please report them here. +There are docker images for all versions of the Rasberry Pi with the exception of the really old `armv6l` versions. -Note: Rpi v2 and below won't work with these images. +The `latest` docker image is a manifest of all the different architecture docker builds supported, so this means +you don't have to worry about doing anything special and you can follow the common instructions above. -```bash -docker run -d \ - --name nginx-proxy-manager-app \ - -p 80:80 \ - -p 81:81 \ - -p 443:443 \ - -v /path/to/config.json:/app/config/production.json \ - -v /path/to/data:/data \ - -v /path/to/letsencrypt:/etc/letsencrypt \ - jc21/nginx-proxy-manager:latest-armhf -``` +Check out the [dockerhub tags](https://cloud.docker.com/repository/registry-1.docker.io/jc21/nginx-proxy-manager/tags) +for a list of supported architectures and if you want one that doesn't exist, +[create a feature request](https://github.com/jc21/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=). + +Also, if you don't know how to already, follow [this guide to install docker and docker-compose](https://manre-universe.net/how-to-run-docker-and-docker-compose-on-raspbian/) +on Raspbian. ### Initial Run @@ -162,4 +145,3 @@ value by specifying it as a Docker environment variable. The default if not spec ``` ... -e "X_FRAME_OPTIONS=sameorigin" ... ``` - diff --git a/doc/example/config.json b/doc/example/config.json index dfc9f049..64ab577c 100644 --- a/doc/example/config.json +++ b/doc/example/config.json @@ -2,9 +2,9 @@ "database": { "engine": "mysql", "host": "db", - "name": "nginxproxymanager", - "user": "nginxproxymanager", - "password": "password123", + "name": "npm", + "user": "npm", + "password": "npm", "port": 3306 } } diff --git a/doc/example/docker-compose.yml b/doc/example/docker-compose.yml index 4547bbc1..e6707b95 100644 --- a/doc/example/docker-compose.yml +++ b/doc/example/docker-compose.yml @@ -1,7 +1,7 @@ version: "3" services: app: - image: jc21/nginx-proxy-manager:2 + image: jc21/nginx-proxy-manager:latest restart: always ports: - 80:80 @@ -17,12 +17,12 @@ services: # if you want pretty colors in your docker logs: - FORCE_COLOR=1 db: - image: jc21/mariadb-aria + image: mariadb:latest restart: always environment: - MYSQL_ROOT_PASSWORD: "password123" - MYSQL_DATABASE: "nginxproxymanager" - MYSQL_USER: "nginxproxymanager" - MYSQL_PASSWORD: "password123" + MYSQL_ROOT_PASSWORD: "npm" + MYSQL_DATABASE: "npm" + MYSQL_USER: "npm" + MYSQL_PASSWORD: "npm" volumes: - ./data/mysql:/var/lib/mysql diff --git a/docker-compose.yml b/docker-compose.yml index 2ff821b2..ab50c910 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,9 +4,9 @@ services: app: image: jc21/nginx-proxy-manager-base:latest ports: - - 8080:80 - - 8081:81 - - 8443:443 + - 80:80 + - 81:81 + - 43:443 environment: - NODE_ENV=development - FORCE_COLOR=1 @@ -22,7 +22,7 @@ services: - db command: node --max_old_space_size=250 --abort_on_uncaught_exception node_modules/nodemon/bin/nodemon.js db: - image: mariadb:10.3.7 + image: jc21/mariadb-aria environment: MYSQL_ROOT_PASSWORD: "npm" MYSQL_DATABASE: "npm" From 3f089fb239a89a7537098b133d78a8694c11bdb5 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Fri, 10 May 2019 15:31:25 +1000 Subject: [PATCH 17/17] Updated documentation, installation instructions and examples --- doc/DOCKERHUB.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/DOCKERHUB.md b/doc/DOCKERHUB.md index e37260f8..0e1edcea 100644 --- a/doc/DOCKERHUB.md +++ b/doc/DOCKERHUB.md @@ -1,12 +1,11 @@ ![Nginx Proxy Manager](https://public.jc21.com/nginx-proxy-manager/github.png "Nginx Proxy Manager") -# Nginx Proxy Manager +# [Nginx Proxy Manager](https://nginxproxymanager.jc21.com) ![Version](https://img.shields.io/badge/version-2.0.13-green.svg?style=for-the-badge) ![Stars](https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge) ![Pulls](https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge) -[nginxproxymanager.jc21.com](https://nginxproxymanager.jc21.com) [View on Github](https://github.com/jc21/nginx-proxy-manager) This project comes as a pre-built docker image that enables you to easily forward to your websites