This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package cached
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/go-webauthn/webauthn/metadata"
|
||||
)
|
||||
|
||||
// Option describes an optional pattern for this provider.
|
||||
type Option func(provider *Provider) (err error)
|
||||
|
||||
// NewFunc describes the type used to create the underlying provider.
|
||||
type NewFunc func(mds *metadata.Metadata) (provider metadata.Provider, err error)
|
||||
|
||||
// WithPath sets the path name for the cached file. This option is REQUIRED.
|
||||
func WithPath(name string) Option {
|
||||
return func(provider *Provider) (err error) {
|
||||
provider.name = name
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithUpdate is used to enable or disable the update. By default it's set to true.
|
||||
func WithUpdate(update bool) Option {
|
||||
return func(provider *Provider) (err error) {
|
||||
provider.update = update
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithForceUpdate is used to force an update on creation. This will forcibly overwrite the file if possible.
|
||||
func WithForceUpdate(force bool) Option {
|
||||
return func(provider *Provider) (err error) {
|
||||
provider.force = force
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithNew customizes the NewFunc. By default we just create a fairly standard [memory.Provider] with strict defaults.
|
||||
func WithNew(newup NewFunc) Option {
|
||||
return func(provider *Provider) (err error) {
|
||||
provider.newup = newup
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithDecoder sets the decoder to be used for this provider. By default this is a decoder with the entry parsing errors
|
||||
// configured to skip that entry.
|
||||
func WithDecoder(decoder *metadata.Decoder) Option {
|
||||
return func(provider *Provider) (err error) {
|
||||
provider.decoder = decoder
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithMetadataURL configures the URL to get the metadata from. This shouldn't be modified unless you know what you're
|
||||
// doing as we use the [metadata.ProductionMDSURL] which is safe in most instances.
|
||||
func WithMetadataURL(uri string) Option {
|
||||
return func(provider *Provider) (err error) {
|
||||
if _, err = url.ParseRequestURI(uri); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
provider.uri = uri
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithClient configures the [*http.Client] used to get the MDS3 blob.
|
||||
func WithClient(client *http.Client) Option {
|
||||
return func(provider *Provider) (err error) {
|
||||
provider.client = client
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithClock allows injection of a [metadata.Clock] to check the up-to-date status of a blob.
|
||||
func WithClock(clock metadata.Clock) Option {
|
||||
return func(provider *Provider) (err error) {
|
||||
provider.clock = clock
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user