diff --git a/app/auth.go b/app/auth.go index 75a84ef..a2db4d9 100644 --- a/app/auth.go +++ b/app/auth.go @@ -14,7 +14,7 @@ import ( type RegisterForm struct { Name string `form:"name" validate:"required,max=40"` - Handle string `form:"handle" validate:"required,min=3,max=20"` + Handle string `form:"handle" validate:"required,min=3,max=30"` Email string `form:"email" validate:"required,email"` Password string `form:"password" validate:"required,min=8"` } @@ -51,9 +51,17 @@ func (a *App) login(w http.ResponseWriter, r *http.Request) { func (a *App) register(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": - templating.Render(w, r, "base", "register") + templating.Render(w, r, "base", "register", map[string]any{ + "HandleRegex": lib.HandleRegex.String(), + }) case "POST": form, _ := md.GetForm[RegisterForm](r) + + if !lib.HandleRegex.Match([]byte(form.Handle)) { + http.Redirect(w, r, "?err=ErrInvalidHandle", http.StatusSeeOther) + return + } + password, err := lib.GenerateHash(form.Password) if err != nil { http.Error(w, "Something went wrong while generating your password's hash. Please try again!", 500) diff --git a/lib/messages.go b/lib/messages.go index f7eec38..2715f5b 100644 --- a/lib/messages.go +++ b/lib/messages.go @@ -18,11 +18,13 @@ var Errors = map[string]error{ "InvalidCredentials": errors.New("Invalid credentials."), "AlreadyAuthenticated": errors.New("Already authenticated."), "RequireAuth": errors.New("You must be logged in to access this content."), - "UserNotFound": errors.New("User not found"), "InvalidSession": errors.New("Session expired or invalid"), "WarnOffline": errors.New("It looks like the server is offline. Some features might not work properly."), // TODO: maybe warnings? + "UserNotFound": errors.New("User not found"), + "UserInvalidHandle": errors.New("That handle is invalid"), + "GitInvalidBranchName": errors.New("Invalid branch name."), "GitBranchTooLong": errors.New("Branch too long!"), "GitBranchTooShort": errors.New("Branch too short!"), diff --git a/views/register.html b/views/register.html index 55b51a0..d900489 100644 --- a/views/register.html +++ b/views/register.html @@ -6,8 +6,14 @@
~ - +
+
+ View handle regex/rules. + {{.HandleRegex}}
+ TL;DR: Doesn't start with a dash, has alphanumeric characters, doesn't contain two consecutive + dashes, and is between 3 and 30 characters. +
@@ -15,7 +21,8 @@