mirror of
https://github.com/sonr-io/common.git
synced 2026-01-11 20:08:57 +00:00
98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package memory
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
"github.com/sonr-io/common/webauthn/metadata"
|
|
)
|
|
|
|
// New returns a new memory Provider given a set of functional Option's.
|
|
func New(opts ...Option) (provider metadata.Provider, err error) {
|
|
p := &Provider{
|
|
undesired: metadata.DefaultUndesiredAuthenticatorStatuses(),
|
|
entry: true,
|
|
anchors: true,
|
|
status: true,
|
|
attestation: true,
|
|
}
|
|
|
|
for _, opt := range opts {
|
|
if err = opt(p); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
if p.mds == nil {
|
|
return nil, fmt.Errorf("memory metadata provider has not been initialized with metadata")
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
// Provider is a concrete implementation of the [metadata.Provider] that utilizes memory for validation. This provider is
|
|
// a simple one-shot that doesn't perform any locking, provide dynamic functionality, or download the metadata at any
|
|
// stage (it expects it's provided via one of the Option's).
|
|
type Provider struct {
|
|
mds map[uuid.UUID]*metadata.Entry
|
|
desired []metadata.AuthenticatorStatus
|
|
undesired []metadata.AuthenticatorStatus
|
|
entry bool
|
|
entryPermitZero bool
|
|
anchors bool
|
|
status bool
|
|
attestation bool
|
|
}
|
|
|
|
func (p *Provider) GetEntry(
|
|
ctx context.Context,
|
|
aaguid uuid.UUID,
|
|
) (entry *metadata.Entry, err error) {
|
|
if p.mds == nil {
|
|
return nil, metadata.ErrNotInitialized
|
|
}
|
|
|
|
var ok bool
|
|
|
|
if entry, ok = p.mds[aaguid]; ok {
|
|
return entry, nil
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
func (p *Provider) GetValidateEntry(ctx context.Context) (require bool) {
|
|
return p.entry
|
|
}
|
|
|
|
func (p *Provider) GetValidateEntryPermitZeroAAGUID(ctx context.Context) (skip bool) {
|
|
return p.entryPermitZero
|
|
}
|
|
|
|
func (p *Provider) GetValidateTrustAnchor(ctx context.Context) (validate bool) {
|
|
return p.anchors
|
|
}
|
|
|
|
func (p *Provider) GetValidateStatus(ctx context.Context) (validate bool) {
|
|
return p.status
|
|
}
|
|
|
|
func (p *Provider) GetValidateAttestationTypes(ctx context.Context) (validate bool) {
|
|
return p.attestation
|
|
}
|
|
|
|
func (p *Provider) ValidateStatusReports(
|
|
ctx context.Context,
|
|
reports []metadata.StatusReport,
|
|
) (err error) {
|
|
if !p.status {
|
|
return nil
|
|
}
|
|
|
|
return metadata.ValidateStatusReports(reports, p.desired, p.undesired)
|
|
}
|
|
|
|
var _ metadata.Provider = (*Provider)(nil)
|