Compare commits

...

3 commits

Author SHA1 Message Date
Tim Möhlmann
1ed551c74c feat: 2.12 releases 2023-11-16 13:19:48 +02:00
Kory Prince
dd5b1ca368
feat: Allow CORS policy to be configured (#485) 2023-11-16 12:08:25 +02:00
Tim Möhlmann
b0be181b1f chore: v2 maintenance releases 2023-10-13 10:27:08 +03:00
4 changed files with 33 additions and 9 deletions

View file

@ -2,6 +2,7 @@ name: Release
on: on:
push: push:
branches: branches:
- "2.11.x"
- main - main
- next - next
tags-ignore: tags-ignore:

View file

@ -1,5 +1,6 @@
module.exports = { module.exports = {
branches: [ branches: [
{name: "2.12.x"},
{name: "main"}, {name: "main"},
{name: "next", prerelease: true}, {name: "next", prerelease: true},
], ],

View file

@ -9,16 +9,15 @@ We currently support the following version of the OIDC framework:
| Version | Supported | Branch | Details | | Version | Supported | Branch | Details |
| -------- | ------------------ | ----------- | ------------------------------------ | | -------- | ------------------ | ----------- | ------------------------------------ |
| 0.x.x | :x: | | not maintained | | 0.x.x | :x: | | not maintained |
| <1.13 | :x: | | not maintained | | <2.11 | :x: | | not maintained |
| 1.13.x | :lock: :warning: | [1.13.x][1] | security only, [community effort][2] | | 2.11.x | :lock: :warning: | [2.11.x][1] | security only, [community effort][2] |
| 2.x.x | :heavy_check_mark: | [main][3] | supported | | 3.x.x | :heavy_check_mark: | [main][3] | supported |
| 3.0.0-xx | :white_check_mark: | [next][4] | [developement branch][5] | | 4.0.0-xx | :white_check_mark: | [next][4] | [development branch] |
[1]: https://github.com/zitadel/oidc/tree/1.13.x [1]: https://github.com/zitadel/oidc/tree/2.11.x
[2]: https://github.com/zitadel/oidc/discussions/378 [2]: https://github.com/zitadel/oidc/discussions/458
[3]: https://github.com/zitadel/oidc/tree/main [3]: https://github.com/zitadel/oidc/tree/main
[4]: https://github.com/zitadel/oidc/tree/next [4]: https://github.com/zitadel/oidc/tree/next
[5]: https://github.com/zitadel/oidc/milestone/2
## Reporting a vulnerability ## Reporting a vulnerability

View file

@ -90,9 +90,19 @@ type OpenIDProvider interface {
type HttpInterceptor func(http.Handler) http.Handler type HttpInterceptor func(http.Handler) http.Handler
type corsOptioner interface {
CORSOptions() *cors.Options
}
func CreateRouter(o OpenIDProvider, interceptors ...HttpInterceptor) *mux.Router { func CreateRouter(o OpenIDProvider, interceptors ...HttpInterceptor) *mux.Router {
router := mux.NewRouter() router := mux.NewRouter()
router.Use(cors.New(defaultCORSOptions).Handler) if co, ok := o.(corsOptioner); ok {
if opts := co.CORSOptions(); opts != nil {
router.Use(cors.New(*opts).Handler)
}
} else {
router.Use(cors.New(defaultCORSOptions).Handler)
}
router.Use(intercept(o.IssuerFromRequest, interceptors...)) router.Use(intercept(o.IssuerFromRequest, interceptors...))
router.HandleFunc(healthEndpoint, healthHandler) router.HandleFunc(healthEndpoint, healthHandler)
router.HandleFunc(readinessEndpoint, readyHandler(o.Probes())) router.HandleFunc(readinessEndpoint, readyHandler(o.Probes()))
@ -186,6 +196,7 @@ func newProvider(config *Config, storage Storage, issuer func(bool) (IssuerFromR
storage: storage, storage: storage,
endpoints: DefaultEndpoints, endpoints: DefaultEndpoints,
timer: make(<-chan time.Time), timer: make(<-chan time.Time),
corsOpts: &defaultCORSOptions,
} }
for _, optFunc := range opOpts { for _, optFunc := range opOpts {
@ -229,6 +240,7 @@ type Provider struct {
timer <-chan time.Time timer <-chan time.Time
accessTokenVerifierOpts []AccessTokenVerifierOpt accessTokenVerifierOpts []AccessTokenVerifierOpt
idTokenHintVerifierOpts []IDTokenHintVerifierOpt idTokenHintVerifierOpts []IDTokenHintVerifierOpt
corsOpts *cors.Options
} }
func (o *Provider) IssuerFromRequest(r *http.Request) string { func (o *Provider) IssuerFromRequest(r *http.Request) string {
@ -387,6 +399,10 @@ func (o *Provider) Probes() []ProbesFn {
} }
} }
func (o *Provider) CORSOptions() *cors.Options {
return o.corsOpts
}
func (o *Provider) HttpHandler() http.Handler { func (o *Provider) HttpHandler() http.Handler {
return o.httpHandler return o.httpHandler
} }
@ -534,12 +550,19 @@ func WithIDTokenHintVerifierOpts(opts ...IDTokenHintVerifierOpt) Option {
} }
} }
func WithCORSOptions(opts *cors.Options) Option {
return func(o *Provider) error {
o.corsOpts = opts
return nil
}
}
func intercept(i IssuerFromRequest, interceptors ...HttpInterceptor) func(handler http.Handler) http.Handler { func intercept(i IssuerFromRequest, interceptors ...HttpInterceptor) func(handler http.Handler) http.Handler {
issuerInterceptor := NewIssuerInterceptor(i) issuerInterceptor := NewIssuerInterceptor(i)
return func(handler http.Handler) http.Handler { return func(handler http.Handler) http.Handler {
for i := len(interceptors) - 1; i >= 0; i-- { for i := len(interceptors) - 1; i >= 0; i-- {
handler = interceptors[i](handler) handler = interceptors[i](handler)
} }
return cors.New(defaultCORSOptions).Handler(issuerInterceptor.Handler(handler)) return issuerInterceptor.Handler(handler)
} }
} }