11 "webfinger.net/go/webfinger"
14 func Finger(address string) (*Actor, error) {
15 jrd, err := webfinger.Lookup(address, nil)
19 for i := range jrd.Links {
20 if jrd.Links[i].Type == ContentType {
21 return LookupActor(jrd.Links[i].Href)
24 return nil, ErrNotExist
27 func fingerAll(alist []*mail.Address) ([]string, error) {
28 actors := make([]string, len(alist))
29 for i, addr := range alist {
30 if strings.Contains(addr.Address, "+followers") {
31 addr.Address = strings.Replace(addr.Address, "+followers", "", 1)
32 a, err := Finger(addr.Address)
34 return actors, fmt.Errorf("finger %s: %w", addr.Address, err)
36 actors[i] = a.Followers
39 actor, err := Finger(addr.Address)
41 return actors, fmt.Errorf("finger %s: %w", addr.Address, err)
48 func UserWebFingerFile(username string) (string, error) {
49 u, err := user.Lookup(username)
54 return "", fmt.Errorf("no home directory")
58 path.Join(u.HomeDir, "lib/webfinger"), // Plan 9
59 path.Join(u.HomeDir, ".config/webfinger"), // Unix-like
60 path.Join(u.HomeDir, "Application Support/webfinger"), // macOS
62 for i := range paths {
63 if _, err := os.Stat(paths[i]); err == nil {
67 return "", fmt.Errorf("no webfinger file")