Files
Containr/app/backend/internal/api/auth_proxy.go
T
2026-04-10 12:02:36 +02:00

56 lines
1.2 KiB
Go

package api
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
"strings"
"containr/internal/config"
"github.com/gin-gonic/gin"
)
func setupAuthProxyRoutes(router *gin.Engine, cfg *config.Config) {
targetURL, err := parseAuthProxyTarget(cfg.BetterAuthProxyURL)
if err != nil {
log.Printf("Warning: auth proxy disabled: %v", err)
return
}
proxy := httputil.NewSingleHostReverseProxy(targetURL)
proxy.ErrorHandler = func(writer http.ResponseWriter, request *http.Request, proxyErr error) {
log.Printf("Auth proxy error: %v", proxyErr)
writer.Header().Set("Content-Type", "application/json")
writer.WriteHeader(http.StatusBadGateway)
_, _ = writer.Write([]byte(`{"error":"Auth service unavailable"}`))
}
handler := func(c *gin.Context) {
proxy.ServeHTTP(c.Writer, c.Request)
c.Abort()
}
router.Any("/api/auth", handler)
router.Any("/api/auth/*proxyPath", handler)
}
func parseAuthProxyTarget(rawTarget string) (*url.URL, error) {
trimmed := strings.TrimSpace(rawTarget)
if trimmed == "" {
trimmed = "http://127.0.0.1:3001"
}
targetURL, err := url.Parse(trimmed)
if err != nil {
return nil, err
}
if targetURL.Scheme == "" || targetURL.Host == "" {
return nil, url.InvalidHostError(trimmed)
}
return targetURL, nil
}