Add utility functions for password hashing and data validation
This commit is contained in:
parent
1b490d8770
commit
816ea1610e
|
|
@ -0,0 +1,25 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
func HashPassword(password string) (string, error) {
|
||||
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
|
||||
return string(bytes), err
|
||||
}
|
||||
|
||||
func CheckPasswordHash(password, hash string) bool {
|
||||
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func StringToUint(s string) uint {
|
||||
id, err := strconv.ParseUint(s, 10, 64)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return uint(id)
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
var validate *validator.Validate
|
||||
|
||||
func init() {
|
||||
validate = validator.New()
|
||||
}
|
||||
|
||||
func Validate(data interface{}) error {
|
||||
var errorMessages []string
|
||||
|
||||
err := validate.Struct(data)
|
||||
if err != nil {
|
||||
for _, err := range err.(validator.ValidationErrors) {
|
||||
switch err.Tag() {
|
||||
case "required":
|
||||
errorMessages = append(errorMessages, err.Field()+" is required")
|
||||
case "email":
|
||||
errorMessages = append(errorMessages, err.Field()+" must be a valid email")
|
||||
case "min":
|
||||
errorMessages = append(errorMessages, err.Field()+" must be at least "+err.Param()+" characters long")
|
||||
case "max":
|
||||
errorMessages = append(errorMessages, err.Field()+" must be at most "+err.Param()+" characters long")
|
||||
default:
|
||||
errorMessages = append(errorMessages, err.Field()+" is not valid")
|
||||
}
|
||||
}
|
||||
return errors.New("validation failed: " + joinMessages(errorMessages))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func joinMessages(messages []string) string {
|
||||
result := ""
|
||||
for i, msg := range messages {
|
||||
if i > 0 {
|
||||
result += ", "
|
||||
}
|
||||
result += msg
|
||||
}
|
||||
return result
|
||||
}
|
||||
Loading…
Reference in New Issue