diff --git a/_examples/README.md b/_examples/README.md index 2fde27e1..289a193b 100644 --- a/_examples/README.md +++ b/_examples/README.md @@ -142,6 +142,7 @@ * [i18n](i18n/main.go) * Authentication, Authorization & Bot Detection * [Basic Authentication](auth/basicauth/main.go) + * [CORS](auth/cors) * [JWT](auth/jwt/main.go) * [JWT (community edition)](https://github.com/iris-contrib/middleware/tree/v12/jwt/_example/main.go) * [OAUth2](auth/goth/main.go) diff --git a/_examples/auth/cors/main.go b/_examples/auth/cors/main.go new file mode 100644 index 00000000..6567a832 --- /dev/null +++ b/_examples/auth/cors/main.go @@ -0,0 +1,63 @@ +// Package main integrates the "rs/cors" net/http middleware into Iris. +// That cors third-party middleware cannot be registered through `iris.FromStd` +// as a common middleware because it should be injected before the Iris Router itself, +// it allows/dissallows HTTP Methods too. +// +// This is just an example you can use to run something, based on custom logic, +// before the Iris Router itself. +// +// In the "routing/custom-wrapper" example +// we learn how we can acquire and release an Iris context to fire an Iris Handler +// based on custom logic, before the Iris Router itself. In that example +// we will fire a net/http handler (the "rs/cors" handler one) instead. +// +// https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS +package main + +import ( + "github.com/kataras/iris/v12" + "github.com/rs/cors" +) + +func main() { + app := iris.New() + c := cors.New(cors.Options{ + AllowedOrigins: []string{"*"}, + AllowCredentials: true, + // Enable Debugging for testing, consider disabling in production + Debug: true, + }) + // app.WrapRouter(func(w http.ResponseWriter, r *http.Request, router http.HandlerFunc) { + // [custom logic...] + // if shouldFireNetHTTPHandler { + // ...ServeHTTP(w,r) + // return + // } + // router(w,r) + // }) + // In our case, the cors package has a ServeHTTP + // of the same form of app.WrapRouter's accept input argument, + // so we can just do: + app.WrapRouter(c.ServeHTTP) + + // Serve ./public/index.html, main.js. + app.HandleDir("/", "./public") + + // Register routes here... + app.Get("/data", listData) + + // http://localhost:8080 and click the "fetch data" button. + app.Listen(":8080") +} + +type item struct { + Title string `json:"title"` +} + +func listData(ctx iris.Context) { + ctx.JSON([]item{ + {"Item 1"}, + {"Item 2"}, + {"Item 3"}, + }) +} diff --git a/_examples/auth/cors/public/index.html b/_examples/auth/cors/public/index.html new file mode 100644 index 00000000..7f36d6ce --- /dev/null +++ b/_examples/auth/cors/public/index.html @@ -0,0 +1,18 @@ + + + +
+ + +