@@ -2,18 +2,9 @@ package main
22
33import (
44 "bytes"
5- "connectrpc.com/grpcreflect"
6- "connectrpc.com/vanguard"
75 "context"
86 "errors"
97 "fmt"
10- "github.com/arl/statsviz"
11- sentrygin "github.com/getsentry/sentry-go/gin"
12- "github.com/gin-contrib/cors"
13- "github.com/gin-contrib/static"
14- openapi2 "go.dot.industries/brease/openapi"
15- trace2 "go.dot.industries/brease/trace"
16- "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
178 "io"
189 "log"
1910 "net/http"
@@ -22,6 +13,19 @@ import (
2213 "strings"
2314 "time"
2415
16+ connectcors "connectrpc.com/cors"
17+ "connectrpc.com/grpcreflect"
18+ "connectrpc.com/vanguard"
19+ "github.com/arl/statsviz"
20+ sentrygin "github.com/getsentry/sentry-go/gin"
21+ "github.com/gin-contrib/cors"
22+ "github.com/gin-contrib/static"
23+ cors2 "github.com/rs/cors"
24+ openapi2 "go.dot.industries/brease/openapi"
25+ trace2 "go.dot.industries/brease/trace"
26+ "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
27+ "golang.org/x/exp/slog"
28+
2529 "buf.build/gen/go/dot/brease/connectrpc/go/brease/auth/v1/authv1connect"
2630 "buf.build/gen/go/dot/brease/connectrpc/go/brease/context/v1/contextv1connect"
2731 "connectrpc.com/connect"
@@ -153,16 +157,27 @@ func newApp(db storage.Database, logger *zap.Logger) *gin.Engine {
153157
154158 // config CORS
155159 config := cors .DefaultConfig ()
160+ config .AllowCredentials = true
161+ config .AllowMethods = append (connectcors .AllowedMethods (), "OPTIONS" )
162+ config .AllowHeaders = connectcors .AllowedHeaders ()
163+ config .ExposeHeaders = connectcors .ExposedHeaders ()
164+ var allowedOrigins []string
156165 originsStr := env .Getenv ("BREASE_CORS_ALLOW_ORIGINS" , "*" )
157166 if originsStr == "*" {
158167 config .AllowAllOrigins = true
168+ allowedOrigins = append (allowedOrigins , "*" )
159169 } else {
160170 origins := strings .Split (originsStr , "," )
161171 config .AllowOrigins = append (config .AllowOrigins , origins ... )
172+ allowedOrigins = append (allowedOrigins , origins ... )
162173 logger .Info (
163174 "CORS origins" ,
164175 zap .Strings ("origins" , origins ),
165176 )
177+ config .AllowOriginFunc = func (origin string ) bool {
178+ slog .Error ("Trying origin check" , "origin" , origin , "allowedOrigin" , origins )
179+ return true
180+ }
166181 }
167182
168183 r .Use (cors .New (config ))
@@ -244,7 +259,7 @@ func newApp(db storage.Database, logger *zap.Logger) *gin.Engine {
244259 }
245260
246261 mux := http .NewServeMux ()
247- mux .Handle ("/" , transcoder )
262+ mux .Handle ("/" , withCORS ( transcoder , allowedOrigins ) )
248263
249264 // add grpc reflection support for tools like `buf curl` or `grpcurl`
250265 mux .Handle (grpcreflect .NewHandlerV1 (grpcreflect .NewStaticReflector (authv1connect .AuthServiceName , contextv1connect .ContextServiceName )))
@@ -255,6 +270,22 @@ func newApp(db storage.Database, logger *zap.Logger) *gin.Engine {
255270 return r
256271}
257272
273+ // withCORS adds CORS support to a Connect HTTP handler.
274+ func withCORS (h http.Handler , origins []string ) http.Handler {
275+ middleware := cors2 .New (cors2.Options {
276+ AllowedOrigins : origins ,
277+ AllowCredentials : true ,
278+ AllowedMethods : connectcors .AllowedMethods (),
279+ AllowedHeaders : connectcors .AllowedHeaders (),
280+ ExposedHeaders : connectcors .ExposedHeaders (),
281+ AllowOriginFunc : func (origin string ) bool {
282+ slog .Info ("Trying origin check" , "origin" , origin , "allowedOrigin" , origins )
283+ return true
284+ },
285+ })
286+ return middleware .Handler (h )
287+ }
288+
258289func auditLogStore (logger * zap.Logger ) auditlog.Store {
259290 stores := auditlog.Stores {auditlogstore .NewLog (auditlogstore.LogConfig {Verbosity : 5 }, logger )}
260291 if redisURL := env .Getenv ("REDIS_URL" , "" ); redisURL != "" {
0 commit comments