diff --git a/charts/planka/Chart.yaml b/charts/planka/Chart.yaml index 713f2b2f..5e3fba61 100644 --- a/charts/planka/Chart.yaml +++ b/charts/planka/Chart.yaml @@ -15,13 +15,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.6 +version: 0.2.7 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "1.21.0" +appVersion: "1.21.1" dependencies: - alias: postgresql diff --git a/client/src/components/Login/Login.jsx b/client/src/components/Login/Login.jsx index 6f547ee2..6303d34b 100755 --- a/client/src/components/Login/Login.jsx +++ b/client/src/components/Login/Login.jsx @@ -28,6 +28,11 @@ const createMessage = (error) => { type: 'error', content: 'common.invalidPassword', }; + case 'Invalid credentials': + return { + type: 'error', + content: 'common.invalidCredentials', + }; case 'Use single sign-on': return { type: 'error', @@ -116,6 +121,10 @@ const Login = React.memo( useEffect(() => { if (wasSubmitting && !isSubmitting && error) { switch (error.message) { + case 'Invalid credentials': + emailOrUsernameField.current.select(); + + break; case 'Invalid email or username': emailOrUsernameField.current.select(); diff --git a/client/src/locales/en-US/login.js b/client/src/locales/en-US/login.js index 5e7f10c3..813522fe 100644 --- a/client/src/locales/en-US/login.js +++ b/client/src/locales/en-US/login.js @@ -3,6 +3,7 @@ export default { common: { emailOrUsername: 'E-mail or username', invalidEmailOrUsername: 'Invalid e-mail or username', + invalidCredentials: 'Invalid credentials', invalidPassword: 'Invalid password', logInToPlanka: 'Log in to Planka', noInternetConnection: 'No internet connection', diff --git a/client/src/locales/ru-RU/core.js b/client/src/locales/ru-RU/core.js index 923deb0a..bad66e44 100644 --- a/client/src/locales/ru-RU/core.js +++ b/client/src/locales/ru-RU/core.js @@ -180,6 +180,7 @@ export default { addAnotherCard: 'Добавить еще одну карточку', addAnotherList: 'Добавить еще один список', addAnotherTask: 'Добавить еще одну задачу', + addCard: 'Добавить карточку', addCard_title: 'Добавить карточку', addComment: 'Добавить комментарий', addList: 'Добавить список', diff --git a/client/src/version.js b/client/src/version.js index a915f239..a191c752 100644 --- a/client/src/version.js +++ b/client/src/version.js @@ -1 +1 @@ -export default '1.21.0'; +export default '1.21.1'; diff --git a/docker-compose.yml b/docker-compose.yml index d28cfd6b..15a3cbc7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,6 +31,8 @@ services: # - DEFAULT_ADMIN_NAME=Demo Demo # - DEFAULT_ADMIN_USERNAME=demo + # - ENABLE_VERBOSE_ON_LOGIN=false # Set to true will show more verbose error messages on login. Should not be disabled without a rate limiter for security reasons. + # - ALLOW_ALL_TO_CREATE_PROJECTS=true # - OIDC_ISSUER= diff --git a/package-lock.json b/package-lock.json index 72c32e27..a56abe00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "planka", - "version": "1.21.0", + "version": "1.21.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "planka", - "version": "1.21.0", + "version": "1.21.1", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index fa2a6a7f..5aa835d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "planka", - "version": "1.21.0", + "version": "1.21.1", "private": true, "homepage": "https://plankanban.github.io/planka", "repository": { diff --git a/server/.env.sample b/server/.env.sample index 19cbc5c9..7293e31f 100644 --- a/server/.env.sample +++ b/server/.env.sample @@ -22,6 +22,8 @@ SECRET_KEY=notsecretkey # DEFAULT_ADMIN_NAME=Demo Demo # DEFAULT_ADMIN_USERNAME=demo +# ENABLE_VERBOSE_ON_LOGIN=false # Set to true will show more verbose error messages on login. Should not be disabled without a rate limiter for security reasons. + # ALLOW_ALL_TO_CREATE_PROJECTS=true # OIDC_ISSUER= diff --git a/server/api/controllers/access-tokens/create.js b/server/api/controllers/access-tokens/create.js index ed9eb8cb..cecc2585 100755 --- a/server/api/controllers/access-tokens/create.js +++ b/server/api/controllers/access-tokens/create.js @@ -10,6 +10,9 @@ const Errors = { INVALID_PASSWORD: { invalidPassword: 'Invalid password', }, + INVALID_CREDENTIALS: { + invalidCredentials: 'Invalid credentials', + }, USE_SINGLE_SIGN_ON: { useSingleSignOn: 'Use single sign-on', }, @@ -40,6 +43,9 @@ module.exports = { invalidPassword: { responseType: 'unauthorized', }, + invalidCredentials: { + responseType: 'unauthorized', + }, useSingleSignOn: { responseType: 'forbidden', }, @@ -57,6 +63,9 @@ module.exports = { sails.log.warn( `Invalid email or username: "${inputs.emailOrUsername}"! (IP: ${remoteAddress})`, ); + if (!sails.config.custom.enableVerboseOnLogin) { + throw Errors.INVALID_CREDENTIALS; + } throw Errors.INVALID_EMAIL_OR_USERNAME; } @@ -66,6 +75,9 @@ module.exports = { if (!bcrypt.compareSync(inputs.password, user.password)) { sails.log.warn(`Invalid password! (IP: ${remoteAddress})`); + if (!sails.config.custom.enableVerboseOnLogin) { + throw Errors.INVALID_CREDENTIALS; + } throw Errors.INVALID_PASSWORD; } diff --git a/server/config/custom.js b/server/config/custom.js index 6d641573..2bb8a03e 100644 --- a/server/config/custom.js +++ b/server/config/custom.js @@ -36,6 +36,8 @@ module.exports.custom = { allowAllToCreateProjects: process.env.ALLOW_ALL_TO_CREATE_PROJECTS === 'true', + enableVerboseOnLogin: process.env.ENABLE_VERBOSE_ON_LOGIN ? process.env.ENABLE_VERBOSE_ON_LOGIN === 'true' : false, + oidcIssuer: process.env.OIDC_ISSUER, oidcClientId: process.env.OIDC_CLIENT_ID, oidcClientSecret: process.env.OIDC_CLIENT_SECRET,