Commit Diff


commit - 2469f6646d48415c8f7f947815762863adbf3133
commit + d802abd847c6b52b945a90acdc5e26935f8859f8
blob - b51d6126a1a803d43253f2f12cb04b127470f2f9
blob + 394107211718e1725e4598c31f9e1b2d8b3fb3bf
--- apub.go
+++ apub.go
@@ -54,6 +54,7 @@ type Activity struct {
 	} `json:"source,omitempty"`
 	PublicKey *PublicKey      `json:"publicKey,omitempty"`
 	Audience  string          `json:"audience,omitempty"`
+	Href      string          `json:"href,omitempty"`
 	Tag       []Activity      `json:"tag,omitempty"`
 	Object    json.RawMessage `json:"object,omitempty"`
 }
blob - 0b3cec10190214ec99aa7a32c1992548fdb94c62
blob + bed76fae19b3fa04905356980c77324b465eb3ae
--- mail.go
+++ mail.go
@@ -92,6 +92,7 @@ func UnmarshalMail(msg *mail.Message) (*Activity, erro
 	}
 
 	var wto, wcc []string
+	var tags []Activity
 	if msg.Header.Get("To") != "" {
 		to, err := msg.Header.AddressList("To")
 		// ignore missing To line. Some ActivityPub servers only have the
@@ -104,7 +105,10 @@ func UnmarshalMail(msg *mail.Message) (*Activity, erro
 			return nil, fmt.Errorf("webfinger To addresses: %w", err)
 		}
 		wto = make([]string, len(actors))
+		tags = make([]Activity, len(actors))
 		for i, a := range actors {
+			addr := strings.Trim(to[i].Address, "<>")
+			tags[i] = Activity{Type: "Mention", Href: a.ID, Name: "@" + addr}
 			wto[i] = a.ID
 		}
 	}
@@ -139,6 +143,7 @@ func UnmarshalMail(msg *mail.Message) (*Activity, erro
 		Content:      strings.TrimSpace(buf.String()),
 		InReplyTo:    strings.Trim(msg.Header.Get("In-Reply-To"), "<>"),
 		Published:    &date,
+		Tag:          tags,
 	}, nil
 }
 
blob - 719f8db1b08a80ce3600fde0a0a856af9267803f
blob + 61bf051284c44bab0c9c0ee8b84609ae5bcdff77
--- mail_test.go
+++ mail_test.go
@@ -26,7 +26,7 @@ func TestMailAddress(t *testing.T) {
 		{
 			"testdata/actor/lemmy.json",
 			"<Spotlight7573@lemmy.world>",
-			"<@>", // empty mail.Address
+			"<@>", // zero mail.Address
 		},
 	}
 	for _, tt := range tests {
@@ -94,7 +94,15 @@ func TestUnmarshalMail(t *testing.T) {
 	if testing.Short() {
 		t.Skip("skipping network calls to unmarshal mail message to Activity")
 	}
-	if _, err := UnmarshalMail(msg); err != nil {
+	a, err := UnmarshalMail(msg)
+	if err != nil {
 		t.Fatal(err)
 	}
+	if len(a.Tag) != 1 {
+		t.Fatalf("wanted 1 tag in unmarshalled activity, got %d", len(a.Tag))
+	}
+	want := "@henfredemars@infosec.pub"
+	if a.Tag[0].Name != want {
+		t.Errorf("wanted tag name %s, got %s", want, a.Tag[0].Name)
+	}
 }