53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
|
// Copyright 2020 the Pinniped contributors. All Rights Reserved.
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
package provider
|
||
|
|
||
|
import (
|
||
|
"net/url"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
type UpstreamOIDCIdentityProvider struct {
|
||
|
// A name for this upstream provider, which will be used as a component of the path for the callback endpoint
|
||
|
// hosted by the Supervisor.
|
||
|
Name string
|
||
|
|
||
|
// The Oauth client ID registered with the upstream provider to be used in the authorization flow.
|
||
|
ClientID string
|
||
|
|
||
|
// The Authorization Endpoint fetched from discovery.
|
||
|
AuthorizationURL url.URL
|
||
|
|
||
|
// Scopes to request in authorization flow.
|
||
|
Scopes []string
|
||
|
}
|
||
|
|
||
|
type DynamicUpstreamIDPProvider interface {
|
||
|
SetIDPList(oidcIDPs []UpstreamOIDCIdentityProvider)
|
||
|
GetIDPList() []UpstreamOIDCIdentityProvider
|
||
|
}
|
||
|
|
||
|
type dynamicUpstreamIDPProvider struct {
|
||
|
oidcProviders []UpstreamOIDCIdentityProvider
|
||
|
mutex sync.RWMutex
|
||
|
}
|
||
|
|
||
|
func NewDynamicUpstreamIDPProvider() DynamicUpstreamIDPProvider {
|
||
|
return &dynamicUpstreamIDPProvider{
|
||
|
oidcProviders: []UpstreamOIDCIdentityProvider{},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (p *dynamicUpstreamIDPProvider) SetIDPList(oidcIDPs []UpstreamOIDCIdentityProvider) {
|
||
|
p.mutex.Lock() // acquire a write lock
|
||
|
defer p.mutex.Unlock()
|
||
|
p.oidcProviders = oidcIDPs
|
||
|
}
|
||
|
|
||
|
func (p *dynamicUpstreamIDPProvider) GetIDPList() []UpstreamOIDCIdentityProvider {
|
||
|
p.mutex.RLock() // acquire a read lock
|
||
|
defer p.mutex.RUnlock()
|
||
|
return p.oidcProviders
|
||
|
}
|