From 7161f649fa0688c3c966da761a2afef435c6f748 Mon Sep 17 00:00:00 2001 From: Elara6331 Date: Sun, 17 Mar 2024 18:28:46 -0700 Subject: [PATCH] Add LookupWebFinger functions --- client.go | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/client.go b/client.go index d6831aa..777b423 100644 --- a/client.go +++ b/client.go @@ -64,29 +64,60 @@ type Client struct { // Lookup looks up the profile descriptor for the given resource. func (c Client) Lookup(resource string) (*Descriptor, error) { + wfdesc, err := webfinger.LookupAcct(resource) + if err != nil { + return nil, err + } + out := &Descriptor{} - return out, c.lookup(resource, "", false, out) + return out, c.lookup(wfdesc, "", false, out) } // LookupID looks up the profile descriptor that matches the given ID // for the given resource. func (c Client) LookupID(resource, id string) (*Descriptor, error) { + wfdesc, err := webfinger.LookupAcct(resource) + if err != nil { + return nil, err + } + out := &Descriptor{} - return out, c.lookup(resource, id, false, out) + return out, c.lookup(wfdesc, id, false, out) } // Lookup looks up all the available profile descriptors for the given resource. func (c Client) LookupAll(resource string) (map[string]*Descriptor, error) { - out := map[string]*Descriptor{} - return out, c.lookup(resource, "", true, &out) -} - -func (c Client) lookup(resource, id string, all bool, dest any) error { wfdesc, err := webfinger.LookupAcct(resource) if err != nil { - return err + return nil, err } + out := map[string]*Descriptor{} + return out, c.lookup(wfdesc, "", true, &out) +} + +// LookupWebFinger is the same as [Client.Lookup], but it accepts an existing WebFinger +// descriptor rather than looking one up. +func (c Client) LookupWebFinger(wfdesc *webfinger.Descriptor) (*Descriptor, error) { + out := &Descriptor{} + return out, c.lookup(wfdesc, "", false, out) +} + +// LookupWebFingerID is the same as [Client.LookupID], but it accepts an existing WebFinger +// descriptor rather than looking one up. +func (c Client) LookupWebFingerID(wfdesc *webfinger.Descriptor, id string) (*Descriptor, error) { + out := &Descriptor{} + return out, c.lookup(wfdesc, id, false, out) +} + +// LookupAllWebFinger is the same as [Client.LookupAll], but it accepts an existing WebFinger +// descriptor rather than looking one up. +func (c Client) LookupAllWebFinger(wfdesc *webfinger.Descriptor) (map[string]*Descriptor, error) { + out := map[string]*Descriptor{} + return out, c.lookup(wfdesc, "", true, out) +} + +func (c Client) lookup(wfdesc *webfinger.Descriptor, id string, all bool, dest any) error { pfdLink, ok := wfdesc.LinkByType("application/x-pfd+json") if !ok { return errors.New("server does not support the profilefed protocol")