~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
47 lines · 1.3 KB Raw History
package atprotoauth

import (
	"context"
	"fmt"
	"time"

	"github.com/bluesky-social/indigo/atproto/identity"
	"github.com/bluesky-social/indigo/atproto/syntax"
)

const LookupTimeout = 10 * time.Second

type admitPlcAndWeb struct {
	dir identity.Directory
}

var _ identity.Directory = admitPlcAndWeb{}

func (a admitPlcAndWeb) LookupDID(ctx context.Context, did syntax.DID) (*identity.Identity, error) {
	switch did.Method() {
	case "plc", "web":
		ctx, cancel := context.WithTimeout(ctx, LookupTimeout)
		defer cancel()
		return a.dir.LookupDID(ctx, did)
	}
	return nil, fmt.Errorf(
		"%w: %s is a did:%s, and this door admits the methods the directory resolves and a revocation can reach (did:plc, did:web); a did:key is the RENEWAL credential and belongs to the mint",
		ErrBadIssuer, did, did.Method(),
	)
}

func (a admitPlcAndWeb) LookupHandle(ctx context.Context, h syntax.Handle) (*identity.Identity, error) {
	ctx, cancel := context.WithTimeout(ctx, LookupTimeout)
	defer cancel()
	return a.dir.LookupHandle(ctx, h)
}

func (a admitPlcAndWeb) Lookup(ctx context.Context, at syntax.AtIdentifier) (*identity.Identity, error) {
	ctx, cancel := context.WithTimeout(ctx, LookupTimeout)
	defer cancel()
	return a.dir.Lookup(ctx, at)
}

func (a admitPlcAndWeb) Purge(ctx context.Context, at syntax.AtIdentifier) error {
	return a.dir.Purge(ctx, at)
}