Files
2025-06-26 08:28:52 -07:00

74 lines
2.2 KiB
Go

package main
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
"wild-cloud-central/internal/config"
"wild-cloud-central/internal/handlers"
)
func main() {
// Create application instance
app := handlers.NewApp()
// Initialize data directory
if err := app.DataManager.Initialize(); err != nil {
log.Fatalf("Failed to initialize data directory: %v", err)
}
// Load configuration if it exists
paths := app.DataManager.GetPaths()
if cfg, err := config.Load(paths.ConfigFile); err != nil {
log.Printf("No configuration found, starting with empty config: %v", err)
} else {
app.Config = cfg
log.Printf("Configuration loaded successfully")
}
// Set up HTTP router
router := mux.NewRouter()
setupRoutes(app, router)
// Use default server settings if config is empty
host := "0.0.0.0"
port := 5055
if app.Config != nil && app.Config.Server.Host != "" {
host = app.Config.Server.Host
}
if app.Config != nil && app.Config.Server.Port != 0 {
port = app.Config.Server.Port
}
addr := fmt.Sprintf("%s:%d", host, port)
log.Printf("Starting wild-cloud-central server on %s", addr)
if err := http.ListenAndServe(addr, router); err != nil {
log.Fatal("Server failed to start:", err)
}
}
func setupRoutes(app *handlers.App, router *mux.Router) {
// Add CORS middleware
router.Use(app.CORSMiddleware)
// API v1 routes
router.HandleFunc("/api/v1/health", app.HealthHandler).Methods("GET")
router.HandleFunc("/api/v1/config", app.GetConfigHandler).Methods("GET")
router.HandleFunc("/api/v1/config", app.UpdateConfigHandler).Methods("PUT")
router.HandleFunc("/api/v1/config", app.CreateConfigHandler).Methods("POST")
router.HandleFunc("/api/v1/config/yaml", app.GetConfigYamlHandler).Methods("GET")
router.HandleFunc("/api/v1/config/yaml", app.UpdateConfigYamlHandler).Methods("PUT")
router.HandleFunc("/api/v1/dnsmasq/config", app.GetDnsmasqConfigHandler).Methods("GET")
router.HandleFunc("/api/v1/dnsmasq/restart", app.RestartDnsmasqHandler).Methods("POST")
router.HandleFunc("/api/v1/pxe/assets", app.DownloadPXEAssetsHandler).Methods("POST")
// UI-specific endpoints
router.HandleFunc("/api/status", app.StatusHandler).Methods("GET")
// Serve static files
router.PathPrefix("/").Handler(http.FileServer(http.Dir("./static/")))
}