@@ -33,6 +33,13 @@ func main() {
33
33
34
34
gin .SetMode (gin .ReleaseMode )
35
35
r := gin .Default ()
36
+
37
+ // if viper get cors is true, then apply corsMiddleware
38
+ if viper .GetBool ("cors" ) {
39
+ log .Printf ("CORS supported! \n " )
40
+ r .Use (corsMiddleware ())
41
+ }
42
+
36
43
registerRoute (r )
37
44
38
45
srv := & http.Server {
@@ -43,6 +50,26 @@ func main() {
43
50
runServer (srv )
44
51
}
45
52
53
+ // corsMiddleware sets up the CORS headers for all responses
54
+ func corsMiddleware () gin.HandlerFunc {
55
+ return func (c * gin.Context ) {
56
+ // Clear any previously set headers
57
+ if c .Request .Method != "POST" {
58
+ c .Writer .Header ().Set ("Access-Control-Allow-Origin" , "*" )
59
+ }
60
+ c .Writer .Header ().Set ("Access-Control-Allow-Credentials" , "true" )
61
+ c .Writer .Header ().Set ("Access-Control-Allow-Headers" , "Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Stainless-OS, X-STAINLESS-LANG, X-STAINLESS-PACKAGE-VERSION, X-STAINLESS-RUNTIME, X-STAINLESS-RUNTIME-VERSION, X-STAINLESS-ARCH" )
62
+ c .Writer .Header ().Set ("Access-Control-Allow-Methods" , "GET, POST, PUT, PATCH, DELETE, OPTIONS" )
63
+
64
+ // Handle preflight requests
65
+ if c .Request .Method == "OPTIONS" {
66
+ c .AbortWithStatus (200 )
67
+ return
68
+ }
69
+ c .Next ()
70
+ }
71
+ }
72
+
46
73
func runServer (srv * http.Server ) {
47
74
go func () {
48
75
log .Printf ("Server listening at %s\n " , srv .Addr )
@@ -66,6 +93,7 @@ func parseFlag() {
66
93
pflag .StringP ("configFile" , "c" , "config.yaml" , "config file" )
67
94
pflag .StringP ("listen" , "l" , ":8080" , "listen address" )
68
95
pflag .BoolP ("version" , "v" , false , "version information" )
96
+ pflag .BoolP ("cors" , "s" , false , "cors support" )
69
97
pflag .Parse ()
70
98
if err := viper .BindPFlags (pflag .CommandLine ); err != nil {
71
99
panic (err )
0 commit comments