/* User Handlers Add handlers for user registration and login: */ package user import ( "bamort/database" "bamort/models" "net/http" "github.com/gin-gonic/gin" "golang.org/x/crypto/bcrypt" ) func RegisterUser(c *gin.Context) { var user models.User if err := c.ShouldBindJSON(&user); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(user.PasswordHash), bcrypt.DefaultCost) user.PasswordHash = string(hashedPassword) if err := database.DB.Create(&user).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create user"}) return } c.JSON(http.StatusCreated, gin.H{"message": "User registered successfully:"}) } func LoginUser(c *gin.Context) { var user models.User var input struct { Username string `json:"username"` Password string `json:"password"` } if err := c.ShouldBindJSON(&input); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if err := database.DB.Where("username = ?", input.Username).First(&user).Error; err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid username. or password"}) return } if err := bcrypt.CompareHashAndPassword([]byte(user.PasswordHash), []byte(input.Password)); err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid username or password."}) return } c.JSON(http.StatusOK, gin.H{"message": "Login successful"}) } // Apply middleware to protected routes func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { token := c.GetHeader("Authorization") if token == "" { c.JSON(http.StatusUnauthorized, gin.H{"error": "Unauthorized"}) c.Abort() return } // Add token validation logic here c.Next() } }