package controllers import ( "html" "net/http" "strings" "ccsecrets/models" "github.com/gin-gonic/gin" "golang.org/x/crypto/bcrypt" ) type RegisterInput struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } func Register(c *gin.Context) { var input RegisterInput if err := c.ShouldBindJSON(&input); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } u := models.User{} u.RoleId = 1 u.UserName = input.Username u.Password = input.Password //turn password into hash hashedPassword, err := bcrypt.GenerateFromPassword([]byte(u.Password), bcrypt.DefaultCost) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"Error hashing password": err.Error()}) return } u.Password = string(hashedPassword) //remove spaces in username u.UserName = html.EscapeString(strings.TrimSpace(u.UserName)) _, err = u.SaveUser() if err != nil { c.JSON(http.StatusBadRequest, gin.H{"Error saving user": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"message": "registration success"}) }