2024-08-23 17:04:19 +02:00
|
|
|
package dto
|
|
|
|
|
|
|
|
|
|
import (
|
2025-07-27 06:34:23 +02:00
|
|
|
"log/slog"
|
|
|
|
|
"os"
|
2024-08-23 17:04:19 +02:00
|
|
|
"regexp"
|
2025-03-28 02:00:55 -07:00
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin/binding"
|
|
|
|
|
"github.com/go-playground/validator/v10"
|
2024-08-23 17:04:19 +02:00
|
|
|
)
|
|
|
|
|
|
2025-06-30 05:04:30 -07:00
|
|
|
// [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
|
|
|
|
|
var validateUsernameRegex = regexp.MustCompile("^[a-zA-Z0-9][a-zA-Z0-9_.@-]*[a-zA-Z0-9]$")
|
|
|
|
|
|
2024-08-23 17:04:19 +02:00
|
|
|
var validateUsername validator.Func = func(fl validator.FieldLevel) bool {
|
2025-06-30 05:04:30 -07:00
|
|
|
return validateUsernameRegex.MatchString(fl.Field().String())
|
2024-08-23 17:04:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func init() {
|
2025-07-27 06:34:23 +02:00
|
|
|
v, _ := binding.Validator.Engine().(*validator.Validate)
|
|
|
|
|
err := v.RegisterValidation("username", validateUsername)
|
|
|
|
|
if err != nil {
|
|
|
|
|
slog.Error("Failed to register custom validation", slog.Any("error", err))
|
|
|
|
|
os.Exit(1)
|
|
|
|
|
return
|
2024-08-23 17:04:19 +02:00
|
|
|
}
|
|
|
|
|
}
|