8 77918b00 2024-03-07 o "webfinger.net/go/webfinger"
11 b6986e8e 2024-03-12 o // Finger is convenience function returning the corresponding Actor,
12 b6986e8e 2024-03-12 o // if any, of an address resolvable by WebFinger.
13 b6986e8e 2024-03-12 o // It is equivalent to doing webfinger.Lookup then LookupActor.
14 77918b00 2024-03-07 o func Finger(address string) (*Actor, error) {
15 77918b00 2024-03-07 o jrd, err := webfinger.Lookup(address, nil)
16 77918b00 2024-03-07 o if err != nil {
17 77918b00 2024-03-07 o return nil, err
19 77918b00 2024-03-07 o for i := range jrd.Links {
20 77918b00 2024-03-07 o if jrd.Links[i].Type == ContentType {
21 77918b00 2024-03-07 o return LookupActor(jrd.Links[i].Href)
24 77918b00 2024-03-07 o return nil, ErrNotExist
27 2469f664 2024-03-12 o func fingerAll(alist []*mail.Address) ([]Actor, error) {
28 2469f664 2024-03-12 o actors := make([]Actor, len(alist))
29 77918b00 2024-03-07 o for i, addr := range alist {
30 77918b00 2024-03-07 o if strings.Contains(addr.Address, "+followers") {
31 77918b00 2024-03-07 o addr.Address = strings.Replace(addr.Address, "+followers", "", 1)
32 77918b00 2024-03-07 o a, err := Finger(addr.Address)
33 77918b00 2024-03-07 o if err != nil {
34 77918b00 2024-03-07 o return actors, fmt.Errorf("finger %s: %w", addr.Address, err)
39 77918b00 2024-03-07 o actor, err := Finger(addr.Address)
40 77918b00 2024-03-07 o if err != nil {
41 77918b00 2024-03-07 o return actors, fmt.Errorf("finger %s: %w", addr.Address, err)
43 2469f664 2024-03-12 o actors[i] = *actor
45 77918b00 2024-03-07 o return actors, nil