diff --git a/pkg/services/mail_service.go b/pkg/services/mail_service.go index 89bf12d..80108cd 100755 --- a/pkg/services/mail_service.go +++ b/pkg/services/mail_service.go @@ -77,3 +77,33 @@ func GeneratePasswordResetURL(email string, baseURL string) string { uri := fmt.Sprintf("%s/reset-password?t=%s", baseURL, token) return uri } + +// SendPortalCredentialsEmail envía al usuario del portal su URL de acceso y contraseña inicial. +func SendPortalCredentialsEmail(email, nombre, password string) { + loginURL := fmt.Sprintf("%s/portal/login", app.Http.Server.Url) + htmlBody := fmt.Sprintf(` + +
+
+
U
+

Portal de Clientes

+

Acceso a tu espacio de trabajo

+
+

Hola %s,

+

Tu cuenta en el Portal de Clientes ha sido creada. Usa los siguientes datos para ingresar:

+
+

Email: %s

+

Contraseña: %s

+

Enlace de acceso: %s

+
+ Ingresar al Portal +

Si no esperabas este correo, puedes ignorarlo.

+
+`, nombre, email, password, loginURL, loginURL, loginURL) + + go func() { + if err := app.Http.Mail.Send(email, "Acceso a tu Portal de Clientes - U-site", htmlBody, ""); err != nil { + log.Printf("[Portal] Error enviando credenciales a %s: %v", email, err) + } + }() +} diff --git a/resources/views/portal_usuarios.html b/resources/views/portal_usuarios.html index 96a59df..2433f18 100644 --- a/resources/views/portal_usuarios.html +++ b/resources/views/portal_usuarios.html @@ -1,6 +1,6 @@
-
+

Usuarios del Portal

Accesos del portal de clientes

@@ -11,6 +11,15 @@
+ +
+ + Los usuarios inician sesión en: + /portal/login + +
+
@@ -58,6 +67,9 @@ + @@ -145,15 +157,33 @@ + +
+
+

Enviar credenciales

+

Se enviará el correo con los datos de acceso al portal a .

+
+ + +
+

+
+ + +
+
+
+ diff --git a/rest/controllers/portal_usuario_controller.go b/rest/controllers/portal_usuario_controller.go index c6f2dd9..c2634e0 100644 --- a/rest/controllers/portal_usuario_controller.go +++ b/rest/controllers/portal_usuario_controller.go @@ -8,6 +8,7 @@ import ( "github.com/gofiber/fiber/v2" "github.com/sujit-baniya/fiber-boilerplate/app" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" + "github.com/sujit-baniya/fiber-boilerplate/pkg/services" ) func PortalUsuariosIndex(c *fiber.Ctx) error { @@ -172,3 +173,29 @@ func RemovePortalAcceso(c *fiber.Ctx) error { } return c.JSON(fiber.Map{"ok": true}) } + +// SendPortalCredentials envía las credenciales de acceso al portal al correo del usuario. +func SendPortalCredentials(c *fiber.Ctx) error { + id, err := strconv.ParseUint(c.Params("id"), 10, 32) + if err != nil { + return c.Status(400).JSON(fiber.Map{"error": "ID inválido"}) + } + u, err := models.GetPortalUserByID(uint(id)) + if err != nil { + return c.Status(404).JSON(fiber.Map{"error": "Usuario no encontrado"}) + } + + type Req struct { + Password string `json:"password"` + } + var req Req + _ = c.BodyParser(&req) + + password := req.Password + if password == "" { + password = "(la contraseña que configuraste)" + } + + services.SendPortalCredentialsEmail(u.Email, u.Nombre, password) + return c.JSON(fiber.Map{"ok": true, "message": "Correo enviado a " + u.Email}) +} diff --git a/rest/routes/user.go b/rest/routes/user.go index b3b8a0b..5eafd6a 100755 --- a/rest/routes/user.go +++ b/rest/routes/user.go @@ -254,6 +254,7 @@ func UserRoutes(app fiber.Router) { protected.Delete("/portal-usuarios/:id", controllers.DeletePortalUsuario) protected.Post("/portal-usuarios/:id/acceso", controllers.AddPortalAcceso) protected.Delete("/portal-usuarios/:id/acceso/:clienteID", controllers.RemovePortalAcceso) + protected.Post("/portal-usuarios/:id/send-credentials", controllers.SendPortalCredentials) protected.Get("/facturas", middlewares.MenuMiddleware, controllers.FacturasIndex) protected.Get("/loadfacturas", controllers.LoadFacturas)