Files
Studia/backend/internal/server/server.go
2025-12-16 23:14:40 +01:00

71 lines
1.8 KiB
Go

package server
import (
"studia/internal/auth"
"studia/internal/config"
"studia/internal/database"
"studia/internal/logger"
"time"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
func StartServer(cfg *config.Config) {
router := gin.Default()
db := database.New(cfg)
// 2. CORS-Konfiguration
// Lese die Frontend-URL aus den Umgebungsvariablen
// frontendURL := os.Getenv("FRONTEND_URL")
// Lokaler Fallback (wichtig für die Entwicklung)
allowedOrigins := []string{
"http://localhost:5173", // Gängiger Vite-Dev-Port
"http://127.0.0.1:5173",
}
if cfg.FrontendURL != "" {
allowedOrigins = append(allowedOrigins, cfg.FrontendURL)
logger.Log.Printf("CORS: Erlaubte Produktiv-URL hinzugefügt: %s\n", cfg.FrontendURL)
} else {
logger.Log.Error().Msg("ACHTUNG: FRONTEND_URL fehlt in den Umgebungsvariablen. Nur lokale URLs erlaubt.")
}
// CORS
// Konfiguriere die CORS-Middleware
config := cors.Config{
// Setze die erlaubten Ursprünge (deine React-URLs)
AllowOrigins: allowedOrigins,
// Erlaube die notwendigen HTTP-Methoden
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"},
// Erlaube Header (z.B. für JSON und Authentifizierung)
AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization"},
// Erlaube Cookies und Credentials (falls du Tokens oder Sessions nutzt)
AllowCredentials: true,
// Wie lange die Preflight-Anfrage (OPTIONS) gecacht werden darf
MaxAge: 12 * time.Hour,
}
router.Use(cors.New(config))
router.POST("/login", func(c *gin.Context) {
err := auth.Login(c, db)
if err != nil {
logger.Log.Error().Msg(err.Error())
}
})
router.POST("/register", func(c *gin.Context) {
er := auth.Register(c, db)
if er != nil {
logger.Log.Error().Msg("register error")
}
})
router.Run(":" + cfg.Port)
}