Files
soft_usite/rest/middlewares/login.go
T

52 lines
1.4 KiB
Go
Executable File

package middlewares
import (
"net/url"
"github.com/gofiber/fiber/v2"
"github.com/gookit/validate"
"github.com/sujit-baniya/fiber-boilerplate/pkg/auth"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
)
func RedirectToHomePageOnLogin(c *fiber.Ctx) error {
if auth.IsLoggedIn(c) {
user, err := auth.User(c)
if err == nil && user != nil && user.Role.HomeUrl != "" {
return c.Redirect(user.Role.HomeUrl)
}
return c.Redirect("/app/servidor")
}
// Si tiene sesión de portal activa, ir al portal
if user, err := auth.PortalUser(c); err == nil && user != nil {
return c.Redirect("/portal/dashboard")
}
return c.Next()
}
func ValidateLoginPost(c *fiber.Ctx) error {
var login models.Login
if err := c.BodyParser(&login); err != nil {
return c.Redirect("/login?error=" + url.QueryEscape(err.Error()))
}
v := validate.Struct(login)
if !v.Validate() {
return c.Redirect("/login?error=" + url.QueryEscape(v.Errors.One()))
}
user, err := login.CheckLogin()
if err != nil {
// Si no está en users, intentar en portal_users
if portalUser, pErr := models.CheckPortalLogin(login.NombreUsuario, login.Password); pErr == nil {
if sErr := auth.SetPortalSession(c, portalUser.ID); sErr != nil {
return c.Redirect("/login?error=Error+interno")
}
return c.Redirect("/portal/dashboard")
}
return c.Redirect("/login?error=" + url.QueryEscape(err.Error()))
}
c.Locals("user", user)
return c.Next()
}