mirror of
https://github.com/sonr-io/common.git
synced 2026-01-12 04:09:13 +00:00
93 lines
2.4 KiB
Go
93 lines
2.4 KiB
Go
package cached
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"github.com/sonr-io/common/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
|
|
}
|
|
}
|