package controllers import ( "GinTutorial/global" "GinTutorial/models" "GinTutorial/utils" "net/http" "github.com/gin-gonic/gin" ) func Register(ctx *gin.Context) { var user models.User if err := ctx.ShouldBindJSON(&user); err != nil { ctx.JSON(http.StatusBadRequest, gin.H{ "error": err.Error(), }) return } hashPassword, err := utils.HashPassword(user.Password) if err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) } user.Password = hashPassword if err := global.Db.AutoMigrate(&user); err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } if err := global.Db.Create(&user).Error; err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } token, err := utils.GenerateJWT(user.Username) if err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } ctx.JSON(http.StatusOK, gin.H{ "token": token, }) } func Login(ctx *gin.Context) { var InputUser struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } if err := ctx.ShouldBindJSON(&InputUser); err != nil { ctx.JSON(http.StatusBadRequest, gin.H{ "error": err.Error(), }) return } var user models.User if err := global.Db.Where("username = ?", InputUser.Username).First(&user).Error; err != nil { ctx.JSON(http.StatusUnauthorized, gin.H{ "error": "Invalid username or password", }) return } if !utils.CheckPassword(InputUser.Password, user.Password) { ctx.JSON(http.StatusUnauthorized, gin.H{ "error": "Invalid username or password", }) return } token, err := utils.GenerateJWT(user.Username) if err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } ctx.JSON(http.StatusOK, gin.H{ "token": token, }) }