36 lines
1.2 KiB
Go
36 lines
1.2 KiB
Go
package handlers
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
|
|
"abuse_registration_poc/internal/models"
|
|
"abuse_registration_poc/internal/utils"
|
|
)
|
|
|
|
// Login mirrors the original API login handler shape: validate user credentials,
|
|
// generate a JWT, and return {message, token}.
|
|
func (h *Handler) Login(writer http.ResponseWriter, request *http.Request) {
|
|
var user models.ValidateUser
|
|
if err := DecodeJSON(request, &user); err != nil {
|
|
log.Printf("Error parsing request data: %v", err)
|
|
WriteJSON(writer, http.StatusBadRequest, map[string]string{"message": "Could not parse request data."})
|
|
return
|
|
}
|
|
|
|
if err := h.users.ValidateCredentials(&user); err != nil {
|
|
log.Printf("Error validating credentials: %v", err)
|
|
WriteJSON(writer, http.StatusUnauthorized, map[string]string{"message": "Could not authenticate user."})
|
|
return
|
|
}
|
|
|
|
token, err := utils.GenerateToken(user.UserName, user.ID, user.Role)
|
|
if err != nil {
|
|
log.Printf("Error generating token: %v", err)
|
|
WriteJSON(writer, http.StatusInternalServerError, map[string]string{"message": "Could not authenticate user."})
|
|
return
|
|
}
|
|
|
|
WriteJSON(writer, http.StatusOK, map[string]string{"message": "Login successful!", "token": token})
|
|
}
|