up
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package controllers
|
||||
|
||||
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/utils"
|
||||
)
|
||||
|
||||
func SmtpConfigView(c *fiber.Ctx) error {
|
||||
cfg, _ := models.GetSmtpConfig()
|
||||
return c.Render("renovaciones/smtp", fiber.Map{
|
||||
"user": c.Locals("user"),
|
||||
"modules": c.Locals("userModules"),
|
||||
"config": cfg,
|
||||
}, "layouts/main")
|
||||
}
|
||||
|
||||
func GetSmtpConfig(c *fiber.Ctx) error {
|
||||
cfg, err := models.GetSmtpConfig()
|
||||
if err != nil {
|
||||
return c.JSON(fiber.Map{"ok": false, "config": nil})
|
||||
}
|
||||
// No exponer contraseña en claro
|
||||
cfg.Password = "***"
|
||||
return c.JSON(fiber.Map{"ok": true, "config": cfg})
|
||||
}
|
||||
|
||||
func SaveSmtpConfig(c *fiber.Ctx) error {
|
||||
type Input struct {
|
||||
Host string `json:"host"`
|
||||
Port int `json:"port"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Encryption string `json:"encryption"`
|
||||
FromAddress string `json:"from_address"`
|
||||
FromName string `json:"from_name"`
|
||||
}
|
||||
var inp Input
|
||||
if err := c.BodyParser(&inp); err != nil {
|
||||
return c.Status(400).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
// Cifrar contraseña solo si se provee una nueva (no es placeholder)
|
||||
passEncrypted := inp.Password
|
||||
if inp.Password != "" && inp.Password != "***" {
|
||||
passEncrypted = utils.Encrypt(inp.Password, app.Http.Server.Key)
|
||||
} else if inp.Password == "***" {
|
||||
// Mantener contraseña ya guardada
|
||||
if existing, err := models.GetSmtpConfig(); err == nil {
|
||||
passEncrypted = existing.Password
|
||||
}
|
||||
}
|
||||
|
||||
cfg := models.SmtpConfig{
|
||||
Host: inp.Host,
|
||||
Port: inp.Port,
|
||||
Username: inp.Username,
|
||||
Password: passEncrypted,
|
||||
Encryption: inp.Encryption,
|
||||
FromAddress: inp.FromAddress,
|
||||
FromName: inp.FromName,
|
||||
}
|
||||
|
||||
if err := models.SaveSmtpConfig(cfg); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
// Recargar el mailer en memoria con la nueva config
|
||||
app.Http.Mail.Host = cfg.Host
|
||||
app.Http.Mail.Port = cfg.Port
|
||||
app.Http.Mail.Username = cfg.Username
|
||||
app.Http.Mail.Password = utils.Decrypt(passEncrypted, app.Http.Server.Key)
|
||||
app.Http.Mail.Encryption = cfg.Encryption
|
||||
app.Http.Mail.FromAddress = cfg.FromAddress
|
||||
app.Http.Mail.FromName = cfg.FromName
|
||||
app.Http.Mail.SetupMailer()
|
||||
|
||||
return c.JSON(fiber.Map{"message": "Configuración guardada", "ok": true})
|
||||
}
|
||||
|
||||
func TestSmtpConfig(c *fiber.Ctx) error {
|
||||
var body struct {
|
||||
Email string `json:"email"`
|
||||
}
|
||||
if err := c.BodyParser(&body); err != nil || body.Email == "" {
|
||||
return c.Status(400).JSON(fiber.Map{"error": "Email de destino requerido"})
|
||||
}
|
||||
htmlBody := "<h2>Test SMTP</h2><p>La configuración SMTP funciona correctamente.</p>"
|
||||
if err := app.Http.Mail.Send(body.Email, "Test SMTP - U-site", htmlBody); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
return c.JSON(fiber.Map{"message": "Correo de prueba enviado", "ok": true})
|
||||
}
|
||||
Reference in New Issue
Block a user