54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"solacenet-gateway/cache"
|
|
"solacenet-gateway/config"
|
|
"solacenet-gateway/handlers"
|
|
"solacenet-gateway/middleware"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func main() {
|
|
cfg := config.Load()
|
|
|
|
// Initialize Redis cache
|
|
redisCache, err := cache.New(cfg.RedisURL)
|
|
if err != nil {
|
|
log.Printf("Warning: Redis not available, caching disabled: %v", err)
|
|
redisCache = nil
|
|
}
|
|
defer func() {
|
|
if redisCache != nil {
|
|
redisCache.Close()
|
|
}
|
|
}()
|
|
|
|
// Set up Gin router
|
|
if cfg.LogLevel == "production" {
|
|
gin.SetMode(gin.ReleaseMode)
|
|
}
|
|
|
|
router := gin.Default()
|
|
|
|
// Middleware
|
|
router.Use(middleware.AuthMiddleware(cfg))
|
|
if redisCache != nil {
|
|
router.Use(middleware.CapabilityCheckMiddleware(cfg, redisCache))
|
|
}
|
|
router.Use(middleware.RateLimitMiddleware())
|
|
|
|
// Health check
|
|
router.GET("/health", handlers.HealthHandler)
|
|
|
|
// Proxy handler for backend services
|
|
router.Any("/api/*path", handlers.ProxyHandler(cfg))
|
|
|
|
// Start server
|
|
log.Printf("SolaceNet Gateway starting on port %s", cfg.Port)
|
|
if err := router.Run(":" + cfg.Port); err != nil {
|
|
log.Fatal("Failed to start server:", err)
|
|
}
|
|
}
|