11 77918b00 2024-03-07 o "webfinger.net/go/webfinger"
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 77918b00 2024-03-07 o func fingerAll(alist []*mail.Address) ([]string, error) {
28 77918b00 2024-03-07 o actors := make([]string, 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)
36 77918b00 2024-03-07 o actors[i] = a.Followers
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 77918b00 2024-03-07 o actors[i] = actor.ID
45 77918b00 2024-03-07 o return actors, nil
48 77918b00 2024-03-07 o func UserWebFingerFile(username string) (string, error) {
49 77918b00 2024-03-07 o u, err := user.Lookup(username)
50 77918b00 2024-03-07 o if err != nil {
53 77918b00 2024-03-07 o if u.HomeDir == "" {
54 77918b00 2024-03-07 o return "", fmt.Errorf("no home directory")
57 77918b00 2024-03-07 o paths := []string{
58 77918b00 2024-03-07 o path.Join(u.HomeDir, "lib/webfinger"), // Plan 9
59 77918b00 2024-03-07 o path.Join(u.HomeDir, ".config/webfinger"), // Unix-like
60 77918b00 2024-03-07 o path.Join(u.HomeDir, "Application Support/webfinger"), // macOS
62 77918b00 2024-03-07 o for i := range paths {
63 77918b00 2024-03-07 o if _, err := os.Stat(paths[i]); err == nil {
64 77918b00 2024-03-07 o return paths[i], nil
67 77918b00 2024-03-07 o return "", fmt.Errorf("no webfinger file")