97 lines
2.5 KiB
Go
Executable File
97 lines
2.5 KiB
Go
Executable File
package controllers
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2" //nolint:goimports
|
|
"github.com/gookit/validate"
|
|
"github.com/sujit-baniya/fiber-boilerplate/app"
|
|
"github.com/sujit-baniya/fiber-boilerplate/pkg/auth"
|
|
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
|
|
"github.com/sujit-baniya/fiber-boilerplate/pkg/services"
|
|
)
|
|
|
|
func OAuthToken(c *fiber.Ctx) error { //nolint:wsl
|
|
var login models.Login
|
|
if err := c.BodyParser(&login); err != nil {
|
|
return c.Status(401).JSON(fiber.Map{
|
|
"error": true,
|
|
"message": "Invalid Credentials",
|
|
})
|
|
}
|
|
|
|
v := validate.Struct(login)
|
|
if !v.Validate() {
|
|
return c.Status(401).JSON(fiber.Map{
|
|
"error": true,
|
|
"message": v.Errors.All(),
|
|
})
|
|
}
|
|
user, err := login.CheckLogin() //nolint:wsl
|
|
if err != nil {
|
|
return c.Status(401).JSON(fiber.Map{
|
|
"error": true,
|
|
"message": err.Error(),
|
|
})
|
|
}
|
|
token, err := auth.Login(c, user.ID, app.Http.Token.ApiJwtSecret) //nolint:wsl
|
|
if err != nil {
|
|
return c.Status(401).JSON(fiber.Map{
|
|
"error": true,
|
|
"message": err.Error(),
|
|
})
|
|
}
|
|
return c.JSON(fiber.Map{
|
|
"token": token.Hash,
|
|
"expires_in": token.Expire,
|
|
})
|
|
}
|
|
|
|
func ApiLoginPost(c *fiber.Ctx) error { //nolint:wsl
|
|
// Obtener el usuario del contexto
|
|
user, ok := c.Locals("user").(*models.User)
|
|
if !ok || user == nil {
|
|
return c.JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "Usuario no encontrado o no autenticado",
|
|
})
|
|
}
|
|
|
|
// Generar el token JWT para el usuario
|
|
token, err := auth.Login(c, user.ID, app.Http.Token.AppJwtSecret)
|
|
if err != nil {
|
|
return c.JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "Error al generar el token: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
// Retornar respuesta con el usuario y el token
|
|
return c.JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "Inicio de sesión exitoso",
|
|
"user": user,
|
|
"token": token,
|
|
})
|
|
}
|
|
|
|
func ApiRegisterPost(c *fiber.Ctx) error {
|
|
register := c.Locals("register").(models.RegisterForm)
|
|
user, err := register.Signup()
|
|
if err != nil {
|
|
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": true, "message": "Error on register request", "data": err.Error()}) //nolint:errcheck
|
|
|
|
}
|
|
store := app.Http.Session.Get(c) // get/create new session
|
|
store.Set("user_id", user.ID) // save to storage
|
|
_ = store.Save()
|
|
|
|
go services.SendConfirmationEmail(user.Email, services.GetPublicURL(), user.NombreUsuario)
|
|
return c.JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "Registered successfully! Please confirm your email",
|
|
})
|
|
}
|
|
|
|
func RefreshOauthToken(c *fiber.Ctx) error {
|
|
return nil
|
|
}
|