1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-21 14:19:44 +02:00

fix: more generic error messages on login

This commit is contained in:
Aurélien TRONCY 2024-08-28 22:25:44 +02:00
parent b2e1fba9a0
commit 9a5049472f
6 changed files with 28 additions and 0 deletions

View file

@ -28,6 +28,11 @@ const createMessage = (error) => {
type: 'error', type: 'error',
content: 'common.invalidPassword', content: 'common.invalidPassword',
}; };
case 'Invalid credentials':
return {
type: 'error',
content: 'common.invalidCredentials',
};
case 'Use single sign-on': case 'Use single sign-on':
return { return {
type: 'error', type: 'error',
@ -116,6 +121,10 @@ const Login = React.memo(
useEffect(() => { useEffect(() => {
if (wasSubmitting && !isSubmitting && error) { if (wasSubmitting && !isSubmitting && error) {
switch (error.message) { switch (error.message) {
case 'Invalid credentials':
emailOrUsernameField.current.select();
break;
case 'Invalid email or username': case 'Invalid email or username':
emailOrUsernameField.current.select(); emailOrUsernameField.current.select();

View file

@ -3,6 +3,7 @@ export default {
common: { common: {
emailOrUsername: 'E-mail or username', emailOrUsername: 'E-mail or username',
invalidEmailOrUsername: 'Invalid e-mail or username', invalidEmailOrUsername: 'Invalid e-mail or username',
invalidCredentials: 'Invalid credentials',
invalidPassword: 'Invalid password', invalidPassword: 'Invalid password',
logInToPlanka: 'Log in to Planka', logInToPlanka: 'Log in to Planka',
noInternetConnection: 'No internet connection', noInternetConnection: 'No internet connection',

View file

@ -31,6 +31,8 @@ services:
# - DEFAULT_ADMIN_NAME=Demo Demo # - DEFAULT_ADMIN_NAME=Demo Demo
# - DEFAULT_ADMIN_USERNAME=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 # - ALLOW_ALL_TO_CREATE_PROJECTS=true
# - OIDC_ISSUER= # - OIDC_ISSUER=

View file

@ -22,6 +22,8 @@ SECRET_KEY=notsecretkey
# DEFAULT_ADMIN_NAME=Demo Demo # DEFAULT_ADMIN_NAME=Demo Demo
# DEFAULT_ADMIN_USERNAME=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 # ALLOW_ALL_TO_CREATE_PROJECTS=true
# OIDC_ISSUER= # OIDC_ISSUER=

View file

@ -10,6 +10,9 @@ const Errors = {
INVALID_PASSWORD: { INVALID_PASSWORD: {
invalidPassword: 'Invalid password', invalidPassword: 'Invalid password',
}, },
INVALID_CREDENTIALS: {
invalidCredentials: 'Invalid credentials',
},
USE_SINGLE_SIGN_ON: { USE_SINGLE_SIGN_ON: {
useSingleSignOn: 'Use single sign-on', useSingleSignOn: 'Use single sign-on',
}, },
@ -40,6 +43,9 @@ module.exports = {
invalidPassword: { invalidPassword: {
responseType: 'unauthorized', responseType: 'unauthorized',
}, },
invalidCredentials: {
responseType: 'unauthorized',
},
useSingleSignOn: { useSingleSignOn: {
responseType: 'forbidden', responseType: 'forbidden',
}, },
@ -57,6 +63,9 @@ module.exports = {
sails.log.warn( sails.log.warn(
`Invalid email or username: "${inputs.emailOrUsername}"! (IP: ${remoteAddress})`, `Invalid email or username: "${inputs.emailOrUsername}"! (IP: ${remoteAddress})`,
); );
if (sails.config.custom.enableVerboseOnLogin) {
throw Errors.INVALID_CREDENTIALS;
}
throw Errors.INVALID_EMAIL_OR_USERNAME; throw Errors.INVALID_EMAIL_OR_USERNAME;
} }
@ -66,6 +75,9 @@ module.exports = {
if (!bcrypt.compareSync(inputs.password, user.password)) { if (!bcrypt.compareSync(inputs.password, user.password)) {
sails.log.warn(`Invalid password! (IP: ${remoteAddress})`); sails.log.warn(`Invalid password! (IP: ${remoteAddress})`);
if (sails.config.custom.enableVerboseOnLogin) {
throw Errors.INVALID_CREDENTIALS;
}
throw Errors.INVALID_PASSWORD; throw Errors.INVALID_PASSWORD;
} }

View file

@ -36,6 +36,8 @@ module.exports.custom = {
allowAllToCreateProjects: process.env.ALLOW_ALL_TO_CREATE_PROJECTS === 'true', allowAllToCreateProjects: process.env.ALLOW_ALL_TO_CREATE_PROJECTS === 'true',
enableVerboseOnLogin: process.env.ENABLE_VERBOSE_ON_LOGIN ? process.env.ENABLE_VERBOSE_ON_LOGIN === 'true' : true,
oidcIssuer: process.env.OIDC_ISSUER, oidcIssuer: process.env.OIDC_ISSUER,
oidcClientId: process.env.OIDC_CLIENT_ID, oidcClientId: process.env.OIDC_CLIENT_ID,
oidcClientSecret: process.env.OIDC_CLIENT_SECRET, oidcClientSecret: process.env.OIDC_CLIENT_SECRET,