diff --git a/backend/internal/token.js b/backend/internal/token.js
index 436669bc..8558a3f2 100644
--- a/backend/internal/token.js
+++ b/backend/internal/token.js
@@ -5,6 +5,8 @@ const authModel = require('../models/auth');
const helpers = require('../lib/helpers');
const TokenModel = require('../models/token');
+const ERROR_MESSAGE_INVALID_AUTH = 'Invalid email or password';
+
module.exports = {
/**
@@ -69,15 +71,15 @@ module.exports = {
};
});
} else {
- throw new error.AuthError('Invalid password');
+ throw new error.AuthError(ERROR_MESSAGE_INVALID_AUTH);
}
});
} else {
- throw new error.AuthError('No password auth for user');
+ throw new error.AuthError(ERROR_MESSAGE_INVALID_AUTH);
}
});
} else {
- throw new error.AuthError('No relevant user found');
+ throw new error.AuthError(ERROR_MESSAGE_INVALID_AUTH);
}
});
},
diff --git a/backend/schema/components/stream-object.json b/backend/schema/components/stream-object.json
index 516c7f89..e1774994 100644
--- a/backend/schema/components/stream-object.json
+++ b/backend/schema/components/stream-object.json
@@ -19,7 +19,9 @@
"incoming_port": {
"type": "integer",
"minimum": 1,
- "maximum": 65535
+ "maximum": 65535,
+ "if": {"properties": {"tcp_forwarding": {"const": true}}},
+ "then": {"not": {"oneOf": [{"const": 80}, {"const": 443}]}}
},
"forwarding_host": {
"anyOf": [
diff --git a/backend/yarn.lock b/backend/yarn.lock
index eee0a79f..7a19b11a 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -711,9 +711,9 @@ crc32-stream@^4.0.2:
readable-stream "^3.4.0"
cross-spawn@^7.0.2:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
diff --git a/docker/rootfs/etc/nginx/conf.d/include/assets.conf b/docker/rootfs/etc/nginx/conf.d/include/assets.conf
index b7037343..5a90beb8 100644
--- a/docker/rootfs/etc/nginx/conf.d/include/assets.conf
+++ b/docker/rootfs/etc/nginx/conf.d/include/assets.conf
@@ -1,4 +1,4 @@
-location ~* ^.*\.(css|js|jpe?g|gif|png|webp|woff|eot|ttf|svg|ico|css\.map|js\.map)$ {
+location ~* ^.*\.(css|js|jpe?g|gif|png|webp|woff|woff2|eot|ttf|svg|ico|css\.map|js\.map)$ {
if_modified_since off;
# use the public cache
diff --git a/docs/src/advanced-config/index.md b/docs/src/advanced-config/index.md
index efeaefec..c9b42bcc 100644
--- a/docs/src/advanced-config/index.md
+++ b/docs/src/advanced-config/index.md
@@ -50,7 +50,6 @@ networks:
Let's look at a Portainer example:
```yml
-version: '3.8'
services:
portainer:
@@ -92,8 +91,6 @@ This image supports the use of Docker secrets to import from files and keep sens
You can set any environment variable from a file by appending `__FILE` (double-underscore FILE) to the environmental variable name.
```yml
-version: '3.8'
-
secrets:
# Secrets are single-line text files where the sole content is the secret
# Paths in this example assume that secrets are kept in local folder called ".secrets"
diff --git a/docs/src/setup/index.md b/docs/src/setup/index.md
index b7aac170..bcc950b0 100644
--- a/docs/src/setup/index.md
+++ b/docs/src/setup/index.md
@@ -9,7 +9,6 @@ outline: deep
Create a `docker-compose.yml` file:
```yml
-version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
@@ -55,7 +54,6 @@ are going to use.
Here is an example of what your `docker-compose.yml` will look like when using a MariaDB container:
```yml
-version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
diff --git a/frontend/js/app/dashboard/main.js b/frontend/js/app/dashboard/main.js
index c2e82f85..4765d061 100644
--- a/frontend/js/app/dashboard/main.js
+++ b/frontend/js/app/dashboard/main.js
@@ -50,8 +50,7 @@ module.exports = Mn.View.extend({
onRender: function () {
let view = this;
- if (typeof view.stats.hosts === 'undefined') {
- Api.Reports.getHostStats()
+ Api.Reports.getHostStats()
.then(response => {
if (!view.isDestroyed()) {
view.stats.hosts = response;
@@ -61,7 +60,6 @@ module.exports = Mn.View.extend({
.catch(err => {
console.log(err);
});
- }
},
/**
diff --git a/frontend/js/app/nginx/access/list/item.ejs b/frontend/js/app/nginx/access/list/item.ejs
index 2ee37a50..fe043c98 100644
--- a/frontend/js/app/nginx/access/list/item.ejs
+++ b/frontend/js/app/nginx/access/list/item.ejs
@@ -1,6 +1,6 @@
- |
diff --git a/frontend/js/app/nginx/certificates/list/item.ejs b/frontend/js/app/nginx/certificates/list/item.ejs
index 20d6f239..9a0d6b27 100644
--- a/frontend/js/app/nginx/certificates/list/item.ejs
+++ b/frontend/js/app/nginx/certificates/list/item.ejs
@@ -1,6 +1,6 @@
|
- |
diff --git a/frontend/js/app/nginx/dead/list/item.ejs b/frontend/js/app/nginx/dead/list/item.ejs
index d447bd1e..dede3b63 100644
--- a/frontend/js/app/nginx/dead/list/item.ejs
+++ b/frontend/js/app/nginx/dead/list/item.ejs
@@ -1,6 +1,6 @@
|
- |
diff --git a/frontend/js/app/nginx/proxy/list/item.ejs b/frontend/js/app/nginx/proxy/list/item.ejs
index a5936804..3eeaa6d2 100644
--- a/frontend/js/app/nginx/proxy/list/item.ejs
+++ b/frontend/js/app/nginx/proxy/list/item.ejs
@@ -1,6 +1,6 @@
|
- |
diff --git a/frontend/js/app/nginx/redirection/list/item.ejs b/frontend/js/app/nginx/redirection/list/item.ejs
index 4f25d973..dff186fd 100644
--- a/frontend/js/app/nginx/redirection/list/item.ejs
+++ b/frontend/js/app/nginx/redirection/list/item.ejs
@@ -1,6 +1,6 @@
|
- |
diff --git a/frontend/js/app/nginx/stream/list/item.ejs b/frontend/js/app/nginx/stream/list/item.ejs
index a8ff83d4..2b4cb626 100644
--- a/frontend/js/app/nginx/stream/list/item.ejs
+++ b/frontend/js/app/nginx/stream/list/item.ejs
@@ -1,6 +1,6 @@
|
- |
diff --git a/frontend/js/app/user/form.ejs b/frontend/js/app/user/form.ejs
index aeb268f7..9ba84438 100644
--- a/frontend/js/app/user/form.ejs
+++ b/frontend/js/app/user/form.ejs
@@ -1,10 +1,10 @@
-
-
diff --git a/frontend/js/app/user/form.js b/frontend/js/app/user/form.js
index ef92ec3e..617a75fc 100644
--- a/frontend/js/app/user/form.js
+++ b/frontend/js/app/user/form.js
@@ -19,7 +19,7 @@ module.exports = Mn.View.extend({
events: {
- 'click @ui.save': function (e) {
+ 'submit @ui.form': function (e) {
e.preventDefault();
this.ui.error.hide();
let view = this;
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index c37fc95d..02655441 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -2648,9 +2648,9 @@ electron-to-chromium@^1.3.47:
integrity sha512-67V62Z4CFOiAtox+o+tosGfVk0QX4DJgH609tjT8QymbJZVAI/jWnAthnr8c5hnRNziIRwkc9EMQYejiVz3/9Q==
elliptic@^6.5.3, elliptic@^6.5.4:
- version "6.5.7"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.7.tgz#8ec4da2cb2939926a1b9a73619d768207e647c8b"
- integrity sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.0.tgz#5919ec723286c1edf28685aa89261d4761afa210"
+ integrity sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==
dependencies:
bn.js "^4.11.9"
brorand "^1.1.0"
diff --git a/test/cypress/e2e/ui/Login.cy.js b/test/cypress/e2e/ui/Login.cy.js
index 2b17ffa8..3b765920 100644
--- a/test/cypress/e2e/ui/Login.cy.js
+++ b/test/cypress/e2e/ui/Login.cy.js
@@ -67,7 +67,7 @@ describe('Login', () => {
// Expect a 401 from the backend
cy.get('@login').its('response.statusCode').should('eq', 401);
// Expect an error message on the UI
- cy.get('div[data-cy="password-error"]').should('contain.text', 'Invalid password');
+ cy.get('div[data-cy="password-error"]').should('contain.text', 'Invalid email or password');
});
it('should show an error message if the email is incorrect', () => {
@@ -85,7 +85,7 @@ describe('Login', () => {
// Expect a 401 from the backend
cy.get('@login').its('response.statusCode').should('eq', 401);
// Expect an error message on the UI
- cy.get('div[data-cy="password-error"]').should('contain.text', 'No relevant user found');
+ cy.get('div[data-cy="password-error"]').should('contain.text', 'Invalid email or password');
});
});
});
@@ -150,7 +150,7 @@ describe('Login', () => {
// Expect a 401 from the backend
cy.get('@login').its('response.statusCode').should('eq', 401);
// Expect an error message on the UI
- cy.get('div[data-cy="password-error"]').should('contain.text', 'Invalid password');
+ cy.get('div[data-cy="password-error"]').should('contain.text', 'Invalid email or password');
});
it('should show an error message if the email is incorrect', () => {
@@ -168,7 +168,7 @@ describe('Login', () => {
// Expect a 401 from the backend
cy.get('@login').its('response.statusCode').should('eq', 401);
// Expect an error message on the UI
- cy.get('div[data-cy="password-error"]').should('contain.text', 'No relevant user found');
+ cy.get('div[data-cy="password-error"]').should('contain.text', 'Invalid email or password');
});
});
diff --git a/test/yarn.lock b/test/yarn.lock
index 4fa9e51f..b79e90e8 100644
--- a/test/yarn.lock
+++ b/test/yarn.lock
@@ -132,9 +132,9 @@
integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==
"@eslint/plugin-kit@^0.2.0":
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz#8712dccae365d24e9eeecb7b346f85e750ba343d"
- integrity sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz#812980a6a41ecf3a8341719f92a6d1e784a2e0e8"
+ integrity sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==
dependencies:
levn "^0.4.1"
@@ -628,9 +628,9 @@ core-util-is@1.0.2:
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cross-spawn@^7.0.0, cross-spawn@^7.0.2:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
|