From 903b0b39181c208e9411ee61849d2671e7c56dc5 Mon Sep 17 00:00:00 2001 From: Elias Schneider Date: Tue, 3 Sep 2024 22:35:18 +0200 Subject: [PATCH] feat: add support for more username formats --- backend/internal/dto/user_dto.go | 5 ----- backend/internal/dto/validations.go | 5 ++++- backend/internal/utils/controller_error_util.go | 2 +- frontend/src/routes/settings/admin/users/user-form.svelte | 5 ++++- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/backend/internal/dto/user_dto.go b/backend/internal/dto/user_dto.go index 9f3429d..1f34001 100644 --- a/backend/internal/dto/user_dto.go +++ b/backend/internal/dto/user_dto.go @@ -23,8 +23,3 @@ type OneTimeAccessTokenCreateDto struct { UserID string `json:"userId" binding:"required"` ExpiresAt time.Time `json:"expiresAt" binding:"required"` } - -type LoginUserDto struct { - Username string `json:"username" binding:"required"` - Password string `json:"password" binding:"required"` -} diff --git a/backend/internal/dto/validations.go b/backend/internal/dto/validations.go index 57d1c75..1f9197f 100644 --- a/backend/internal/dto/validations.go +++ b/backend/internal/dto/validations.go @@ -20,7 +20,10 @@ var validateUrlList validator.Func = func(fl validator.FieldLevel) bool { } var validateUsername validator.Func = func(fl validator.FieldLevel) bool { - regex := "^[a-z0-9_]*$" + // [a-zA-Z0-9] : The username must start with an alphanumeric character + // [a-zA-Z0-9_.@-]* : The rest of the username can contain alphanumeric characters, dots, underscores, hyphens, and "@" symbols + // [a-zA-Z0-9]$ : The username must end with an alphanumeric character + regex := "^[a-zA-Z0-9][a-zA-Z0-9_.@-]*[a-zA-Z0-9]$" matched, _ := regexp.MatchString(regex, fl.Field().String()) return matched } diff --git a/backend/internal/utils/controller_error_util.go b/backend/internal/utils/controller_error_util.go index dea05d9..7d62ce7 100644 --- a/backend/internal/utils/controller_error_util.go +++ b/backend/internal/utils/controller_error_util.go @@ -46,7 +46,7 @@ func handleValidationError(validationErrors validator.ValidationErrors) string { case "email": errorMessage = fmt.Sprintf("%s must be a valid email address", fieldName) case "username": - errorMessage = fmt.Sprintf("%s must contain only lowercase letters, numbers, and underscores", fieldName) + errorMessage = fmt.Sprintf("%s must only contain lowercase letters, numbers, underscores, dots, hyphens, and '@' symbols and not start or end with a special character", fieldName) case "url": errorMessage = fmt.Sprintf("%s must be a valid URL", fieldName) case "min": diff --git a/frontend/src/routes/settings/admin/users/user-form.svelte b/frontend/src/routes/settings/admin/users/user-form.svelte index be3fa19..36fcf42 100644 --- a/frontend/src/routes/settings/admin/users/user-form.svelte +++ b/frontend/src/routes/settings/admin/users/user-form.svelte @@ -32,7 +32,10 @@ .string() .min(2) .max(30) - .regex(/^[a-z0-9_]+$/, 'Only lowercase letters, numbers, and underscores are allowed'), + .regex( + /^[a-z0-9_@.-]+$/, + "Username can only contain lowercase letters, numbers, underscores, dots, hyphens, and '@' symbols" + ), email: z.string().email(), isAdmin: z.boolean() });