add: Login system

This commit is contained in:
$(pass /github/name)
2024-09-03 20:20:24 +02:00
parent f648b53fe1
commit 569c0acaee
8 changed files with 189 additions and 44 deletions

View File

@@ -3,6 +3,8 @@ package controllers
import (
"fmt"
"GoMembership/internal/constants"
"GoMembership/internal/middlewares"
"GoMembership/internal/models"
"GoMembership/internal/services"
@@ -25,6 +27,51 @@ type RegistrationData struct {
User models.User `json:"user"`
}
func (uc *UserController) LoginUser(c *gin.Context) {
var input struct {
Email string `json:"email"`
Password string `json:"password"`
}
if err := c.ShouldBindJSON(&input); err != nil {
logger.Error.Printf("Couldn't decode input: %v", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"error": "Couldn't decode request data"})
return
}
user, err := uc.Service.GetUserByEmail(input.Email)
if err != nil {
logger.Error.Printf("Error during user(%v) retrieval: %v\n", input.Email, err)
c.JSON(http.StatusNotFound, gin.H{"error": "Couldn't find user"})
return
}
ok, err := user.PasswordMatches(input.Password)
if err != nil {
logger.Error.Printf("Error during Password comparison: %v", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"error": "couldn't calculate match"})
return
}
if !ok {
logger.Error.Printf("Wrong Password: %v %v", user.FirstName, user.LastName)
c.JSON(http.StatusNotAcceptable, gin.H{"error": "Wrong Password"})
return
}
token, err := middlewares.GenerateToken(user.ID)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to generate JWT token"})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "Login successful",
"token": token,
})
}
func (uc *UserController) RegisterUser(c *gin.Context) {
var regData RegistrationData
@@ -48,6 +95,9 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
}
regData.User.Membership.SubscriptionModel = *selectedModel
// logger.Info.Printf("REGISTERING user: %#v", regData.User)
regData.User.RoleID = constants.Roles.Member
// Register User
id, token, err := uc.Service.RegisterUser(&regData.User)
if err != nil {
@@ -93,8 +143,8 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
// Proceed without returning error since user registration is successful
}
c.JSON(http.StatusCreated, gin.H{
"status": "success",
"id": regData.User.ID,
"message": "Registration successuful",
"id": regData.User.ID,
})
}