2022-12-22 17:55:36 +01:00
package helpers
import (
"net/http"
"regexp"
"github.com/sirupsen/logrus"
)
2023-01-10 01:21:53 +01:00
// Given a string, a regex and an error description, if the string doesn't match the regex, it sends a bad request error to the client and return false
// Otherwise it returns true without sending anything to the client
2022-12-22 17:55:36 +01:00
func MatchRegexOrBadRequest ( str string , regex string , error_description string , w http . ResponseWriter , l logrus . FieldLogger ) bool {
stat , err := regexp . Match ( regex , [ ] byte ( str ) )
if err != nil {
SendInternalError ( err , "Error while matching username regex" , w , l )
return false
}
if ! stat {
// string didn't match the regex, so it's invalid, let's send a bad request error
SendBadRequest ( w , error_description , l )
return false
}
// string matched the regex, so it's valid
return true
}
2023-01-10 01:21:53 +01:00
// Validates a username (must be between 3 and 16 characters long and can only contain letters, numbers and underscores)
2022-12-22 17:55:36 +01:00
func MatchUsernameOrBadRequest ( username string , w http . ResponseWriter , l logrus . FieldLogger ) bool {
return MatchRegexOrBadRequest ( username ,
` ^[a-zA-Z0-9_] { 3,16}$ ` , "Username must be between 3 and 16 characters long and can only contain letters, numbers and underscores" ,
w ,
l )
}
2022-12-22 18:08:03 +01:00
2023-01-10 01:21:53 +01:00
// Validates a comment (must be between 1 and 255 characters long)
2022-12-22 18:08:03 +01:00
func MatchCommentOrBadRequest ( comment string , w http . ResponseWriter , l logrus . FieldLogger ) bool {
return MatchRegexOrBadRequest ( comment ,
` ^(.) { 1,255}$ ` , "Comment must be between 1 and 255 characters long" ,
w ,
l )
}