74 lines
2.2 KiB
Go
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/")))
|
|
} |