commit 2469f6646d48415c8f7f947815762863adbf3133 from: Oliver Lowe date: Tue Mar 12 02:26:08 2024 UTC apub: return entire actor when doing multiple webfinger lookups We've already looked up the entire actor so may as well return it, then let callers do what they want with the data. commit - 1738cb32b92b94d71cf623fa3e84afaef401a211 commit + 2469f6646d48415c8f7f947815762863adbf3133 blob - 1e25afd5c580e5a4af28ac994ad0df2b418c244e blob + 0b3cec10190214ec99aa7a32c1992548fdb94c62 --- mail.go +++ mail.go @@ -99,20 +99,28 @@ func UnmarshalMail(msg *mail.Message) (*Activity, erro if err != nil { return nil, fmt.Errorf("parse To address list: %w", err) } - wto, err = fingerAll(to) + actors, err := fingerAll(to) if err != nil { return nil, fmt.Errorf("webfinger To addresses: %w", err) } + wto = make([]string, len(actors)) + for i, a := range actors { + wto[i] = a.ID + } } if msg.Header.Get("CC") != "" { cc, err := msg.Header.AddressList("CC") if err != nil { return nil, fmt.Errorf("parse CC address list: %w", err) } - wcc, err = fingerAll(cc) + actors, err := fingerAll(cc) if err != nil { return nil, fmt.Errorf("webfinger CC addresses: %w", err) } + wcc = make([]string, len(actors)) + for i, a := range actors { + wcc[i] = a.ID + } } buf := &bytes.Buffer{} blob - 71d39efe3ee7b43011253ae027a0520cd17bc503 blob + d51eb9237bb67808d536aa8b3ed3dff989ec208e --- webfinger.go +++ webfinger.go @@ -24,8 +24,8 @@ func Finger(address string) (*Actor, error) { return nil, ErrNotExist } -func fingerAll(alist []*mail.Address) ([]string, error) { - actors := make([]string, len(alist)) +func fingerAll(alist []*mail.Address) ([]Actor, error) { + actors := make([]Actor, len(alist)) for i, addr := range alist { if strings.Contains(addr.Address, "+followers") { addr.Address = strings.Replace(addr.Address, "+followers", "", 1) @@ -33,14 +33,14 @@ func fingerAll(alist []*mail.Address) ([]string, error if err != nil { return actors, fmt.Errorf("finger %s: %w", addr.Address, err) } - actors[i] = a.Followers + actors[i] = *a continue } actor, err := Finger(addr.Address) if err != nil { return actors, fmt.Errorf("finger %s: %w", addr.Address, err) } - actors[i] = actor.ID + actors[i] = *actor } return actors, nil }