Some checks failed
Go Benchmark / Performance Regression Check (push) Has been cancelled
Cerberus Integration / Cerberus Security Stack Integration (push) Has been cancelled
Upload Coverage to Codecov / Backend Codecov Upload (push) Has been cancelled
Upload Coverage to Codecov / Frontend Codecov Upload (push) Has been cancelled
CodeQL - Analyze / CodeQL analysis (go) (push) Has been cancelled
CodeQL - Analyze / CodeQL analysis (javascript-typescript) (push) Has been cancelled
CrowdSec Integration / CrowdSec Bouncer Integration (push) Has been cancelled
Docker Build, Publish & Test / build-and-push (push) Has been cancelled
Quality Checks / Auth Route Protection Contract (push) Has been cancelled
Quality Checks / Codecov Trigger/Comment Parity Guard (push) Has been cancelled
Quality Checks / Backend (Go) (push) Has been cancelled
Quality Checks / Frontend (React) (push) Has been cancelled
Rate Limit integration / Rate Limiting Integration (push) Has been cancelled
Security Scan (PR) / Trivy Binary Scan (push) Has been cancelled
Supply Chain Verification (PR) / Verify Supply Chain (push) Has been cancelled
WAF integration / Coraza WAF Integration (push) Has been cancelled
Docker Build, Publish & Test / Security Scan PR Image (push) Has been cancelled
Repo Health Check / Repo health (push) Has been cancelled
History Rewrite Dry-Run / Dry-run preview for history rewrite (push) Has been cancelled
Prune Renovate Branches / prune (push) Has been cancelled
Renovate / renovate (push) Has been cancelled
Nightly Build & Package / sync-development-to-nightly (push) Has been cancelled
Nightly Build & Package / Trigger Nightly Validation Workflows (push) Has been cancelled
Nightly Build & Package / build-and-push-nightly (push) Has been cancelled
Nightly Build & Package / test-nightly-image (push) Has been cancelled
Nightly Build & Package / verify-nightly-supply-chain (push) Has been cancelled
39 lines
1.2 KiB
Go
Executable File
39 lines
1.2 KiB
Go
Executable File
// Package server provides the HTTP server and router configuration.
|
|
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// NewRouter creates a new Gin router with frontend static file serving.
|
|
func NewRouter(frontendDir string) *gin.Engine {
|
|
router := gin.Default()
|
|
// Gin trusts all proxies by default. In v1.11.x, SetTrustedProxies(nil) disables
|
|
// trusting forwarded headers entirely, making Context.ClientIP() use the remote
|
|
// socket address. Only enable trusted proxies via an explicit allow-list.
|
|
_ = router.SetTrustedProxies(nil)
|
|
|
|
// Serve frontend static files
|
|
if frontendDir != "" {
|
|
router.Static("/assets", frontendDir+"/assets")
|
|
router.StaticFile("/", frontendDir+"/index.html")
|
|
router.StaticFile("/banner.png", frontendDir+"/banner.png")
|
|
router.StaticFile("/logo.png", frontendDir+"/logo.png")
|
|
router.StaticFile("/favicon.png", frontendDir+"/favicon.png")
|
|
router.NoRoute(func(c *gin.Context) {
|
|
// API routes should never fall back to the SPA HTML.
|
|
path := c.Request.URL.Path
|
|
if path == "/api" || strings.HasPrefix(path, "/api/") {
|
|
c.JSON(http.StatusNotFound, gin.H{"error": "not found"})
|
|
return
|
|
}
|
|
c.File(frontendDir + "/index.html")
|
|
})
|
|
}
|
|
|
|
return router
|
|
}
|