package controllers import ( "github.com/gofiber/fiber/v2" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" "github.com/sujit-baniya/fiber-boilerplate/pkg/services" ) // ─── Configuración ──────────────────────────────────────────────────────────── // HostingerConfigPage renderiza la vista de gestión de Hostinger. func HostingerConfigPage(c *fiber.Ctx) error { cfg, _ := models.GetHostingerConfig() if err := c.Render("hostinger", fiber.Map{ "Title": "Hostinger API", "Config": cfg, }, "layouts/main"); err != nil { return c.SendStatus(fiber.StatusInternalServerError) } return nil } // SaveHostingerConfig guarda o actualiza el token de Hostinger. func SaveHostingerConfig(c *fiber.Ctx) error { type body struct { ID uint `json:"id" form:"id"` Token string `json:"token" form:"token"` Nota string `json:"nota" form:"nota"` } var b body if err := c.BodyParser(&b); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "body inválido"}) } if b.Token == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "token requerido"}) } cfg := models.HostingerConfig{ Nota: b.Nota, Token: b.Token, } cfg.ID = b.ID if err := models.SaveHostingerConfig(cfg); err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"message": "Configuración guardada"}) } // ─── Helpers ───────────────────────────────────────────────────────────────── func hostingerClient() (*services.HostingerClient, error) { cfg, err := models.GetHostingerConfig() if err != nil { return nil, err } return services.NewHostingerClient(cfg.Token), nil } // ─── Endpoints de datos ─────────────────────────────────────────────────────── // GetHostingerVPS devuelve la lista de VPS/VMs. func GetHostingerVPS(c *fiber.Ctx) error { client, err := hostingerClient() if err != nil { return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{ "error": "No se encontró configuración activa de Hostinger", }) } data, err := client.GetVPSList() if err != nil { return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"data": data}) } // GetHostingerDomains devuelve el portafolio de dominios. func GetHostingerDomains(c *fiber.Ctx) error { client, err := hostingerClient() if err != nil { return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{ "error": "No se encontró configuración activa de Hostinger", }) } data, err := client.GetDomains() if err != nil { return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"data": data}) } // GetHostingerDNS devuelve los registros DNS de un dominio (:domain). func GetHostingerDNS(c *fiber.Ctx) error { domain := c.Params("domain") if domain == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "dominio requerido"}) } client, err := hostingerClient() if err != nil { return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{ "error": "No se encontró configuración activa de Hostinger", }) } data, err := client.GetDNSRecords(domain) if err != nil { return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"data": data, "domain": domain}) } // GetHostingerOrders devuelve las órdenes de facturación. func GetHostingerOrders(c *fiber.Ctx) error { client, err := hostingerClient() if err != nil { return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{ "error": "No se encontró configuración activa de Hostinger", }) } data, err := client.GetOrders() if err != nil { return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"data": data}) } // GetHostingerHosting devuelve las cuentas de hosting. func GetHostingerHosting(c *fiber.Ctx) error { client, err := hostingerClient() if err != nil { return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{ "error": "No se encontró configuración activa de Hostinger", }) } data, err := client.GetHostingAccounts() if err != nil { return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"data": data}) }