mikkeloscar/gin-swagger

CORS problems

Closed this issue · 2 comments

In order to run swagger-ui with API test, I have to enable CORS.

Now, I add code in each EndPoint. eg.:

func GetPersonEndpoint(handler func(ctx *gin.Context, params *GetPersonParams) *api.Response) gin.HandlerFunc {
return func(ctx *gin.Context) {

        //------------------------- BEGIN: ADDED CODE ------------------------
        ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
        ctx.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
        ctx.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
        ctx.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")

        if ctx.Request.Method == "OPTIONS" {
            ctx.AbortWithStatus(204)
            return
        }
        ctx.Next()

        //------------------------- END: ADDED CODE ------------------------

       //.......................

}

}

I tried https://github.com/gin-contrib/cors but did not success!

Is there any better solution for this situation?

Thank you very much in advance!
Best regards,
jo

package main

import (
	"log"
	"time"

	"github.com/mikkeloscar/gin-swagger/example/restapi"
	"github.com/gin-contrib/cors"
)

func main() {
	var apiConfig restapi.Config

	err := apiConfig.WithDefaultFlags().Parse()
	if err != nil {
		log.Fatal(err)
	}

	svc := &ExampleService{Health: false}

	api := restapi.NewServer(svc, &apiConfig)

	api.Routes.Use(cors.New(cors.Config{
		AllowOrigins:     []string{"https://foo.com"},
		AllowMethods:     []string{"PUT", "PATCH"},
		AllowHeaders:     []string{"Origin"},
		ExposeHeaders:    []string{"Content-Length"},
		AllowCredentials: true,
		AllowOriginFunc: func(origin string) bool {
			return origin == "https://github.com"
		},
		MaxAge: 12 * time.Hour,
	}))

	err = api.RunWithSigHandler()
	if err != nil {
		log.Fatal(err)
	}
}

Thanks for providing a full example. Will close this as solved.