From 67178f9b7455972f7730a699018a72cf39190d18 Mon Sep 17 00:00:00 2001 From: Miroito <88556823+Miroito@users.noreply.github.com> Date: Sat, 30 Apr 2022 22:25:29 +0200 Subject: [PATCH] fix: error on duplicate username/email registration (#1168) * fix: error on duplicate username/email registration * Raise 409 http error on duplicate user registration * Add translation to conflict error messages * Update lang files * Remove key in translator parameter --- mealie/lang/messages/af-ZA.json | 4 +++- mealie/lang/messages/ar-SA.json | 4 +++- mealie/lang/messages/ca-ES.json | 4 +++- mealie/lang/messages/cs-CZ.json | 4 +++- mealie/lang/messages/da-DK.json | 4 +++- mealie/lang/messages/de-DE.json | 4 +++- mealie/lang/messages/el-GR.json | 4 +++- mealie/lang/messages/en-GB.json | 4 +++- mealie/lang/messages/en-US.json | 4 +++- mealie/lang/messages/es-ES.json | 4 +++- mealie/lang/messages/fi-FI.json | 4 +++- mealie/lang/messages/fr-CA.json | 4 +++- mealie/lang/messages/fr-FR.json | 4 +++- mealie/lang/messages/he-IL.json | 4 +++- mealie/lang/messages/hu-HU.json | 4 +++- mealie/lang/messages/it-IT.json | 4 +++- mealie/lang/messages/ja-JP.json | 4 +++- mealie/lang/messages/ko-KR.json | 4 +++- mealie/lang/messages/nl-NL.json | 4 +++- mealie/lang/messages/no-NO.json | 4 +++- mealie/lang/messages/pl-PL.json | 4 +++- mealie/lang/messages/pt-BR.json | 4 +++- mealie/lang/messages/pt-PT.json | 4 +++- mealie/lang/messages/ro-RO.json | 4 +++- mealie/lang/messages/ru-RU.json | 4 +++- mealie/lang/messages/sk-SK.json | 4 +++- mealie/lang/messages/sr-SP.json | 4 +++- mealie/lang/messages/sv-SE.json | 4 +++- mealie/lang/messages/tr-TR.json | 4 +++- mealie/lang/messages/uk-UA.json | 4 +++- mealie/lang/messages/vi-VN.json | 4 +++- mealie/lang/messages/zh-CN.json | 4 +++- mealie/lang/messages/zh-TW.json | 4 +++- mealie/services/user_services/registration_service.py | 7 +++++++ 34 files changed, 106 insertions(+), 33 deletions(-) diff --git a/mealie/lang/messages/af-ZA.json b/mealie/lang/messages/af-ZA.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/af-ZA.json +++ b/mealie/lang/messages/af-ZA.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/ar-SA.json b/mealie/lang/messages/ar-SA.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/ar-SA.json +++ b/mealie/lang/messages/ar-SA.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/ca-ES.json b/mealie/lang/messages/ca-ES.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/ca-ES.json +++ b/mealie/lang/messages/ca-ES.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/cs-CZ.json b/mealie/lang/messages/cs-CZ.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/cs-CZ.json +++ b/mealie/lang/messages/cs-CZ.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/da-DK.json b/mealie/lang/messages/da-DK.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/da-DK.json +++ b/mealie/lang/messages/da-DK.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/de-DE.json b/mealie/lang/messages/de-DE.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/de-DE.json +++ b/mealie/lang/messages/de-DE.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/el-GR.json b/mealie/lang/messages/el-GR.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/el-GR.json +++ b/mealie/lang/messages/el-GR.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/en-GB.json b/mealie/lang/messages/en-GB.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/en-GB.json +++ b/mealie/lang/messages/en-GB.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/en-US.json b/mealie/lang/messages/en-US.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/en-US.json +++ b/mealie/lang/messages/en-US.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/es-ES.json b/mealie/lang/messages/es-ES.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/es-ES.json +++ b/mealie/lang/messages/es-ES.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/fi-FI.json b/mealie/lang/messages/fi-FI.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/fi-FI.json +++ b/mealie/lang/messages/fi-FI.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/fr-CA.json b/mealie/lang/messages/fr-CA.json index 180105d5e7ef..bcca667ccfb5 100644 --- a/mealie/lang/messages/fr-CA.json +++ b/mealie/lang/messages/fr-CA.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "Ce nom d'utilisateur est déjà pris", + "email-conflict-error": "Cet email existe déjà" } } diff --git a/mealie/lang/messages/fr-FR.json b/mealie/lang/messages/fr-FR.json index 180105d5e7ef..bcca667ccfb5 100644 --- a/mealie/lang/messages/fr-FR.json +++ b/mealie/lang/messages/fr-FR.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "Ce nom d'utilisateur est déjà pris", + "email-conflict-error": "Cet email existe déjà" } } diff --git a/mealie/lang/messages/he-IL.json b/mealie/lang/messages/he-IL.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/he-IL.json +++ b/mealie/lang/messages/he-IL.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/hu-HU.json b/mealie/lang/messages/hu-HU.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/hu-HU.json +++ b/mealie/lang/messages/hu-HU.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/it-IT.json b/mealie/lang/messages/it-IT.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/it-IT.json +++ b/mealie/lang/messages/it-IT.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/ja-JP.json b/mealie/lang/messages/ja-JP.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/ja-JP.json +++ b/mealie/lang/messages/ja-JP.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/ko-KR.json b/mealie/lang/messages/ko-KR.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/ko-KR.json +++ b/mealie/lang/messages/ko-KR.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/nl-NL.json b/mealie/lang/messages/nl-NL.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/nl-NL.json +++ b/mealie/lang/messages/nl-NL.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/no-NO.json b/mealie/lang/messages/no-NO.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/no-NO.json +++ b/mealie/lang/messages/no-NO.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/pl-PL.json b/mealie/lang/messages/pl-PL.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/pl-PL.json +++ b/mealie/lang/messages/pl-PL.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/pt-BR.json b/mealie/lang/messages/pt-BR.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/pt-BR.json +++ b/mealie/lang/messages/pt-BR.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/pt-PT.json b/mealie/lang/messages/pt-PT.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/pt-PT.json +++ b/mealie/lang/messages/pt-PT.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/ro-RO.json b/mealie/lang/messages/ro-RO.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/ro-RO.json +++ b/mealie/lang/messages/ro-RO.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/ru-RU.json b/mealie/lang/messages/ru-RU.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/ru-RU.json +++ b/mealie/lang/messages/ru-RU.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/sk-SK.json b/mealie/lang/messages/sk-SK.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/sk-SK.json +++ b/mealie/lang/messages/sk-SK.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/sr-SP.json b/mealie/lang/messages/sr-SP.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/sr-SP.json +++ b/mealie/lang/messages/sr-SP.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/sv-SE.json b/mealie/lang/messages/sv-SE.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/sv-SE.json +++ b/mealie/lang/messages/sv-SE.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/tr-TR.json b/mealie/lang/messages/tr-TR.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/tr-TR.json +++ b/mealie/lang/messages/tr-TR.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/uk-UA.json b/mealie/lang/messages/uk-UA.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/uk-UA.json +++ b/mealie/lang/messages/uk-UA.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/vi-VN.json b/mealie/lang/messages/vi-VN.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/vi-VN.json +++ b/mealie/lang/messages/vi-VN.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/zh-CN.json b/mealie/lang/messages/zh-CN.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/zh-CN.json +++ b/mealie/lang/messages/zh-CN.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/lang/messages/zh-TW.json b/mealie/lang/messages/zh-TW.json index 180105d5e7ef..54db43daef80 100644 --- a/mealie/lang/messages/zh-TW.json +++ b/mealie/lang/messages/zh-TW.json @@ -8,6 +8,8 @@ "exceptions": { "permission_denied": "You do not have permission to perform this action", "no-entry-found": "The requested resource was not found", - "integrity-error": "Database integrity error" + "integrity-error": "Database integrity error", + "username-conflict-error": "This username is already taken", + "email-conflict-error": "This email is already in use" } } diff --git a/mealie/services/user_services/registration_service.py b/mealie/services/user_services/registration_service.py index b9b881972477..ee97d337b3ce 100644 --- a/mealie/services/user_services/registration_service.py +++ b/mealie/services/user_services/registration_service.py @@ -4,6 +4,7 @@ from uuid import uuid4 from fastapi import HTTPException, status from mealie.core.security import hash_password +from mealie.lang import local_provider from mealie.repos.repository_factory import AllRepositories from mealie.schema.group.group_preferences import CreateGroupPreferences from mealie.schema.user.registration import CreateUserRegistration @@ -18,6 +19,7 @@ class RegistrationService: def __init__(self, logger: Logger, db: AllRepositories): self.logger = logger self.repos = db + self.t = local_provider() def _create_new_user(self, group: GroupInDB, new_group: bool) -> PrivateUser: new_user = UserIn( @@ -54,6 +56,11 @@ class RegistrationService: def register_user(self, registration: CreateUserRegistration) -> PrivateUser: self.registration = registration + if self.repos.users.get_by_username(registration.username): + raise HTTPException(status.HTTP_409_CONFLICT, {"message": self.t.t("exceptions.username-conflict-error")}) + elif self.repos.users.get(registration.email, "email"): + raise HTTPException(status.HTTP_409_CONFLICT, {"message": self.t.t("exceptions.email-conflict-error")}) + self.logger.info(f"Registering user {registration.username}") token_entry = None new_group = False