Files
soft_usite/rest/controllers/auth_controller.go
T
2025-08-05 14:48:12 -05:00

99 lines
2.7 KiB
Go
Executable File

package controllers
import (
"time"
"net/url"
"github.com/gofiber/fiber/v2" //nolint:goimports
"github.com/gofiber/fiber/v2/middleware/session"
"github.com/sujit-baniya/fiber-boilerplate/app"
"github.com/sujit-baniya/fiber-boilerplate/pkg/auth"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
)
func LoginGet(c *fiber.Ctx) error {
data := getFlashData(c)
data["title"] = "Login | "
return c.Render("auth/login", data, "layouts/landing")
}
func LoginPost(c *fiber.Ctx) error {
// Verificar si falta la contraseña
if c.Locals("missing_password") == true {
return c.Redirect("/update-credentials") // Redirige directamente
}
// Obtener el usuario desde el contexto
user := c.Locals("user").(*models.Users)
// Intentar realizar el login
_, err := auth.Login(c, user.ID, app.Http.Token.AppJwtSecret)
if err != nil {
// Si hay error, podrías mandar de nuevo al login con mensaje
return c.Redirect("/login?error=" + url.QueryEscape(err.Error()))
}
// Si todo está bien, redirige al inicio de la app
return c.Redirect("/app/servidor")
}
var store = session.New()
func LogoutPost(c *fiber.Ctx) error {
// Verifica si el usuario está autenticado
if auth.IsLoggedIn(c) {
// Cierra la sesión en el backend
err := auth.Logout(c)
if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, "Logout failed")
}
}
// Elimina la sesión actual
sess, err := store.Get(c)
if err == nil {
_ = sess.Destroy()
}
// Limpia ambas cookies de sesión
c.ClearCookie("session_id")
c.ClearCookie("Verify-Rest-Token")
// Limpia la cookie CSRF
c.Cookie(&fiber.Cookie{
Name: "Verify-Rest-Token", // Nombre de la cookie CSRF, ajusta si usas un nombre diferente
Value: "",
Expires: time.Now().Add(-1 * time.Hour), // Establece la cookie para que expire en el pasado
HTTPOnly: true,
Secure: true,
SameSite: "Strict",
})
// Limpia la cookie CSRF
c.Cookie(&fiber.Cookie{
Name: "session_id", // Nombre de la cookie CSRF, ajusta si usas un nombre diferente
Value: "",
Expires: time.Now().Add(-1 * time.Hour), // Establece la cookie para que expire en el pasado
HTTPOnly: true,
Secure: true,
SameSite: "Strict",
})
// Ajusta encabezados de caché para evitar almacenamientos no deseados en caché
c.Set("X-DNS-Prefetch-Control", "off")
c.Set("Pragma", "no-cache")
c.Set("Expires", "Fri, 01 Jan 1990 00:00:00 GMT")
c.Set("Cache-Control", "no-cache, must-revalidate, no-store, max-age=0, private")
// Redirige al usuario a la página de inicio de sesión
return c.Redirect("/login")
}
func getFlashData(c *fiber.Ctx) fiber.Map {
data := app.Http.Flash.Get(c)
if data == nil {
data = fiber.Map{}
}
return data
}