From 0de0e809accb682864810582bd9ce6995fe3b5c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Troncy?= <86081901+Nounoursdestavernes@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:37:02 +0200 Subject: [PATCH 1/5] fix: Update French translation (#849) --- client/src/locales/fr-FR/core.js | 84 ++++++++++++++++++++++++------- client/src/locales/fr-FR/login.js | 2 + 2 files changed, 69 insertions(+), 17 deletions(-) diff --git a/client/src/locales/fr-FR/core.js b/client/src/locales/fr-FR/core.js index c9cd88e9..fe117ccf 100644 --- a/client/src/locales/fr-FR/core.js +++ b/client/src/locales/fr-FR/core.js @@ -15,10 +15,12 @@ export default { translation: { common: { + aboutPlanka: 'À propos de Planka', account: 'Compte', actions: 'Actions', addAttachment_title: 'Ajouter une pièce jointe', addComment: 'Ajouter un commentaire', + addManager_title: 'Ajouter un manager', addMember_title: 'Ajouter un membre', addUser_title: 'Ajouter un utilisateur', administrator: 'Administrateur', @@ -26,32 +28,43 @@ export default { allChangesWillBeAutomaticallySavedAfterConnectionRestored: 'Toutes les modifications seront automatiquement enregistrées
une fois la connexion rétablie.', areYouSureYouWantToDeleteThisAttachment: 'Voulez-vous vraiment supprimer cette pièce jointe?', - areYouSureYouWantToDeleteThisBoard: 'Êtes-vous sûr de vouloir supprimer ce forum?', + areYouSureYouWantToDeleteThisBoard: 'Êtes-vous sûr de vouloir supprimer ce tableau?', areYouSureYouWantToDeleteThisCard: 'Voulez-vous vraiment supprimer cette carte?', areYouSureYouWantToDeleteThisComment: 'Êtes-vous sûr de vouloir supprimer ce commentaire?', - areYouSureYouWantToDeleteThisLabel: 'Voulez-vous vraiment supprimer ce libellé?', + areYouSureYouWantToDeleteThisLabel: 'Voulez-vous vraiment supprimer cette étiquette?', areYouSureYouWantToDeleteThisList: 'Êtes-vous sûr de vouloir supprimer cette liste?', areYouSureYouWantToDeleteThisProject: 'Êtes-vous sûr de vouloir supprimer ce projet?', areYouSureYouWantToDeleteThisTask: 'Êtes-vous sûr de vouloir supprimer cette tâche?', areYouSureYouWantToDeleteThisUser: 'Êtes-vous sûr de vouloir supprimer cet utilisateur?', + areYouSureYouWantToLeaveBoard: 'Êtes-vous sûr de vouloir quitter ce tableau ?', + areYouSureYouWantToLeaveProject: 'Êtes-vous sûr de vouloir quitter ce projet ?', + areYouSureYouWantToRemoveThisManagerFromProject: + 'Êtes-vous sûr de vouloir supprimer ce manager du projet ?', areYouSureYouWantToRemoveThisMemberFromProject: 'Êtes-vous sûr de vouloir supprimer ce membre du projet?', - attachment: 'Attachement', + attachment: 'Pièce jointe', attachments: 'Pièces jointes', authentication: 'Authentification', + background: 'Arrière-plan', board: 'Tableau', boardNotFound_title: 'Carte non trouvée', + canComment: 'Peut commenter', + canEditContentOfBoard: 'Peut éditer le contenu du tableau.', + canOnlyViewBoard: 'Peut uniquement voir le tableau.', cardActions_title: 'Actions sur la carte', cardNotFound_title: 'Carte non trouvée', cardOrActionAreDeleted: "La carte ou l'action sont supprimées.", color: 'Couleur', + copy_inline: 'copie', createBoard_title: 'Créer un tableau', createLabel_title: 'Créer une étiquette', createNewOneOrSelectExistingOne: 'Créez-en un nouveau ou sélectionnez
un existant.', createProject_title: 'Créer un projet', createTextFile_title: 'Créer un fichier texte', currentPassword: 'Mot de passe actuel', + dangerZone_title: 'Zone dangereuse', date: 'Date', + dueDate: "Date d'échéance", dueDate_title: "Date d'échéance", deleteAttachment_title: 'Supprimer la pièce jointe', deleteBoard_title: 'Supprimer le tableau', @@ -63,67 +76,89 @@ export default { deleteTask_title: 'Supprimer la tâche', deleteUser_title: "Supprimer l'utilisateur", description: 'Description', + detectAutomatically: 'Détecter automatiquement', dropFileToUpload: 'Déposer le fichier à télécharger', + editor: 'Éditeur', editAttachment_title: 'Modifier la pièce jointe', editAvatar_title: 'Modifier Avatar', editBoard_title: 'Modifier le tableau', editDueDate_title: "Modifier la date d'échéance", - editEmail_title: "Modifier l'e-mail", + editEmail_title: "Modifier l'email", + editInformation_title: 'Modifier les informations', editLabel_title: "Modifier l'étiquette", editPassword_title: 'Modifier le mot de passe', + editPermissions_title: 'Modifier les permissions', editStopwatch_title: 'Modifier la minuterie', editUsername_title: "Modifier le nom d'utilisateur", email: 'E-mail', emailAlreadyInUse: 'Email déjà utilisé', - enterCardTitle: 'Entrer le titre de la carte...', - enterDescription: 'Entrez la description...', - enterFilename: 'Entrez le nom du fichier', - enterListTitle: 'Entrer le titre de la liste...', + enterCardTitle: 'Saisir le titre de la carte... [Ctrl+Enter] pour ouvrir automatiquement', + enterDescription: 'Saisir la description...', + enterFilename: 'Saisir le nom du fichier', + enterListTitle: 'Saisie le titre de la liste...', enterProjectTitle: 'Saisir le titre du projet', enterTaskDescription: 'Saisir la description de la tâche...', - filterByLabels_title: 'Filtrer par libellés', + filterByLabels_title: 'Filtrer par étiquettes', filterByMembers_title: 'Filtrer par membres', fromComputer_title: "Depuis l'ordinateur", - hours: 'Les heures', + fromTrello: 'Depuis Trello', + general: 'Général', + hours: 'Heures', + importBoard_title: 'Importer un tableau', invalidCurrentPassword: 'Mot de passe actuel invalide', labels: 'Étiquettes', + language: 'Langue', + leaveBoard_title: 'Quitter le tableau', + leaveProject_title: 'Quitter le projet', + linkIsCopied: 'Le lien est copié', list: 'Lister', listActions_title: 'Liste des actions', + managers: 'Managers', + managerActions_title: 'Actions des managers', members: 'Membres', + memberActions_title: 'Actions des membres', minutes: 'Minutes', moveCard_title: 'Déplacer la carte', name: 'Nom', - newEmail: 'Nouveau courriel', + newestFirst: 'Le plus récent en premier', + newEmail: 'Nouveau email', newPassword: 'Nouveau mot de passe', newUsername: "Nouveau nom d'utilisateur", noConnectionToServer: 'Pas de connexion au serveur', - noBoards: 'Pas de planches', + noBoards: 'Pas de tableau', noLists: 'Pas de listes', noProjects: 'Pas de projets', notifications: 'Notifications', noUnreadNotifications: 'Aucune notification non lue.', - openBoard_title: 'Open Board', + oldestFirst: 'Le plus ancien en premier', + openBoard_title: 'Ouvrir le tableau', optional_inline: 'optionnel', organization: 'Organisation', phone: 'Téléphone', preferences: 'Préférences', - pressPasteShortcutToAddAttachmentFromClipboard: 'Conseil', + pressPasteShortcutToAddAttachmentFromClipboard: + 'Conseil: appuyer sur Ctrl-V (Cmd-V sur Mac) pour ajouter une pièce jointe depuis le presse-papiers', project: 'Projet', projectNotFound_title: 'Projet introuvable', + removeManager_title: 'Supprimer le manager', removeMember_title: 'Supprimer le membre', searchLabels: 'Chercher une étiquette...', searchMembers: 'Chercher un membre...', searchUsers: 'Chercher un utilisateur...', searchCards: 'Chercher une carte...', seconds: 'Secondes', - selectBoard: 'Sélectionner une carte', + selectBoard: 'Sélectionner un tableau', selectList: 'Sélectionner une liste', + selectPermissions_title: 'Sélectionner les permissions', selectProject: 'Sélectionner un projet', settings: 'Réglages', + sortList_title: 'Trier la liste', stopwatch: 'Minuteur', subscribeToMyOwnCardsByDefault: 'Abonnez-vous à mes propres cartes par défaut', taskActions_title: 'Actions de tâche', tasks: 'Tâches', + thereIsNoPreviewAvailableForThisAttachment: + "Il n'y a pas de prévisualisation de disponible pour cette pièce jointe.", time: 'Temps', title: 'Titre', userActions_title: "Actions de l'utilisateur", @@ -137,6 +172,8 @@ export default { username: "Nom d'utilisateur", usernameAlreadyInUse: "Nom d'utilisateur déjà utilisé", users: 'Utilisateurs', + version: 'Version', + viewer: 'Spectateur', writeComment: 'Écrire un commentaire...', }, @@ -148,10 +185,12 @@ export default { addCard_title: 'Ajouter une carte', addComment: 'Ajouter un commentaire', addList: 'Ajouter la liste', + addMember: 'Ajouter un membre', addMoreDetailedDescription: 'Ajouter une description plus détaillée', addTask: 'Ajouter une tâche', addToCard: 'Ajouter à la carte', addUser: 'Ajouter un utilisateur', + copyLink_title: 'Copier le lien', createBoard: 'Créer un tableau', createFile: 'Créer un fichier', createLabel: 'Créer une étiquette', @@ -174,14 +213,21 @@ export default { deleteTask_title: 'Supprimer la tâche', deleteUser: "Supprimer l'utilisateur", duplicate: 'Dupliquer', + duplicateCard_title: 'Dupliquer la carte', edit: 'Modifier', editDueDate_title: "Modifier la date d'échéance", - editDescription_title: 'Éditer la description', - editEmail_title: "Modifier l'e-mail", + editDescription_title: 'Modifier la description', + editEmail_title: "Modifier l'email", + editInformation_title: 'Modifier les informations', editPassword_title: 'Modifier le mot de passe', + editPermissions: 'Modifier les permissions', editStopwatch_title: 'Modifier la minuterie', editTitle_title: 'Modifier le titre', editUsername_title: "Modifier le nom d'utilisateur", + hideDetails: 'Cacher les détails', + import: 'Importer', + leaveBoard: 'Quitter le tableau', + leaveProject: 'Quitter le projet', logOut_title: 'Se déconnecter', makeCover_title: 'Faire la jaquette', move: 'Déplacer', @@ -189,11 +235,15 @@ export default { remove: 'Supprimer', removeBackground: "Supprimer l'arrière-plan", removeCover_title: 'Supprimer la jaquette', + removeFromBoard: 'Supprimer le tableau', removeFromProject: 'Supprimer du projet', + removeManager: 'Supprimer le manager', removeMember: 'Supprimer le membre', save: 'Sauvegarder', showAllAttachments: 'Afficher toutes les pièces jointes ({{hidden}} masquées)', + showDetails: 'Afficher les détails', showFewerAttachments: 'Afficher moins de pièces jointes', + sortList_title: 'Trier la liste', start: 'Début', stop: 'Arrêter', subscribe: "S'abonner", diff --git a/client/src/locales/fr-FR/login.js b/client/src/locales/fr-FR/login.js index afbd3161..c584ae88 100644 --- a/client/src/locales/fr-FR/login.js +++ b/client/src/locales/fr-FR/login.js @@ -11,10 +11,12 @@ export default { projectManagement: 'Gestion de projet', serverConnectionFailed: 'Connection au serveur échouée', unknownError: 'Erreur inconnue, réessayez plus tard', + useSingleSignOn: "Utiliser l'authentification unique", }, action: { logIn: 'Se connecter', + logInWithSSO: "Se connecter avec l'authentification unique", }, }, }; From 818ae4a6df0671f4fab42300a7ca1138d0c78a22 Mon Sep 17 00:00:00 2001 From: Maksim Eltyshev Date: Wed, 14 Aug 2024 21:39:43 +0200 Subject: [PATCH 2/5] chore: Update version --- charts/planka/Chart.yaml | 4 ++-- client/src/version.js | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) 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/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/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": { From b2e1fba9a0beb969c7af60d794eab3d7a985f2dd Mon Sep 17 00:00:00 2001 From: Blyamur <409434+blyamur@users.noreply.github.com> Date: Tue, 27 Aug 2024 17:09:31 +0300 Subject: [PATCH 3/5] fix: Update Russian translation (#857) --- client/src/locales/ru-RU/core.js | 1 + 1 file changed, 1 insertion(+) 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: 'Добавить список', From 9a5049472f40d35299ea9b56f76143b09896f40c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20TRONCY?= Date: Wed, 28 Aug 2024 22:25:44 +0200 Subject: [PATCH 4/5] fix: more generic error messages on login --- client/src/components/Login/Login.jsx | 9 +++++++++ client/src/locales/en-US/login.js | 1 + docker-compose.yml | 2 ++ server/.env.sample | 2 ++ server/api/controllers/access-tokens/create.js | 12 ++++++++++++ server/config/custom.js | 2 ++ 6 files changed, 28 insertions(+) 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/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/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..41a548cf 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..e1c39986 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' : true, + oidcIssuer: process.env.OIDC_ISSUER, oidcClientId: process.env.OIDC_CLIENT_ID, oidcClientSecret: process.env.OIDC_CLIENT_SECRET, From 82b03e55426e6c005a5956d0739b171a4a6761b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20TRONCY?= Date: Thu, 29 Aug 2024 00:26:49 +0200 Subject: [PATCH 5/5] feat: correct bool according to the name (inversion of enable and disable) --- server/api/controllers/access-tokens/create.js | 4 ++-- server/config/custom.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/api/controllers/access-tokens/create.js b/server/api/controllers/access-tokens/create.js index 41a548cf..cecc2585 100755 --- a/server/api/controllers/access-tokens/create.js +++ b/server/api/controllers/access-tokens/create.js @@ -63,7 +63,7 @@ module.exports = { sails.log.warn( `Invalid email or username: "${inputs.emailOrUsername}"! (IP: ${remoteAddress})`, ); - if (sails.config.custom.enableVerboseOnLogin) { + if (!sails.config.custom.enableVerboseOnLogin) { throw Errors.INVALID_CREDENTIALS; } throw Errors.INVALID_EMAIL_OR_USERNAME; @@ -75,7 +75,7 @@ module.exports = { if (!bcrypt.compareSync(inputs.password, user.password)) { sails.log.warn(`Invalid password! (IP: ${remoteAddress})`); - if (sails.config.custom.enableVerboseOnLogin) { + 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 e1c39986..2bb8a03e 100644 --- a/server/config/custom.js +++ b/server/config/custom.js @@ -36,7 +36,7 @@ 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' : 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,