140 lines
4.6 KiB
Go
140 lines
4.6 KiB
Go
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})
|
|
}
|