@@ -3,7 +3,6 @@ package middlewares
33import (
44 "net/http"
55 "net/url"
6- "slices"
76 "strings"
87
98 "github.com/codeshelldev/secured-signal-api/internals/config"
@@ -47,48 +46,26 @@ func corsHandler(next http.Handler) http.Handler {
4746
4847 w .Header ().Set ("Access-Control-Allow-Origin" , origin )
4948
49+ // add Origin header to Vary (if needed)
50+ if w .Header ().Get ("Vary" ) != "*" {
51+ w .Header ().Add ("Vary" , "Origin" )
52+ }
53+
5054 // CORS preflight request
5155 if req .Method == "OPTIONS" {
52- requestedMethod := req . Header . Get ( "Access-Control-Request-Method" )
56+ allowedMethods := matchingOrigin . Methods . ValueOrFallback ( defaultMethods )
5357
54- if requestedMethod != "" {
55- allowedMethods := matchingOrigin .Methods .ValueOrFallback (defaultMethods )
56-
57- if len (allowedMethods ) != 0 {
58- // only set if any (matching) methods
59- w .Header ().Set ("Access-Control-Allow-Methods" , strings .Join (allowedMethods , "," ))
60- }
58+ if len (allowedMethods ) != 0 {
59+ // only set if any methods
60+ w .Header ().Set ("Access-Control-Allow-Methods" , strings .Join (allowedMethods , "," ))
6161 }
6262
63- requestedHeaders := req .Header .Get ("Access-Control-Request-Headers" )
64-
65- if requestedHeaders != "" {
66- allowedHeaders := matchingOrigin .Headers .ValueOrFallback (defaultHeaders )
67-
68- matchingHeaders := []string {}
69-
70- // echo back allowed and requested headers
71- for header := range strings .SplitSeq (requestedHeaders , "," ) {
72- header = strings .TrimSpace (header )
73-
74- var match string
75-
76- if slices .ContainsFunc (allowedHeaders , func (allowed string ) bool {
77- if strings .EqualFold (header , allowed ) {
78- match = allowed
79- return true
80- }
8163
82- return false
83- }) {
84- matchingHeaders = append (matchingHeaders , match )
85- }
86- }
64+ allowedHeaders := matchingOrigin .Headers .ValueOrFallback (defaultHeaders )
8765
88- if len (matchingHeaders ) != 0 {
89- // only set if any (matching) headers
90- w .Header ().Set ("Access-Control-Allow-Headers" , strings .Join (matchingHeaders , "," ))
91- }
66+ if len (allowedHeaders ) != 0 {
67+ // only set if any headers
68+ w .Header ().Set ("Access-Control-Allow-Headers" , strings .Join (allowedHeaders , "," ))
9269 }
9370
9471 w .WriteHeader (http .StatusNoContent )
0 commit comments