commit 6f092909c92185b689e43e27ae1e2603f6368834 from: Oliver Lowe date: Fri Mar 15 06:32:20 2024 UTC cmd/apsend: accept activitypub json input This lets it send activity which cannot be converted to mail such as Follow commit - 8a4431dbcec73c849fba0b624ae24f6ce1303bcc commit + 6f092909c92185b689e43e27ae1e2603f6368834 blob - 5ad0de9649498f47f2554e606336495f5627d036 blob + 3f51c82a2505398b289ee6233753264189ca2d7c --- cmd/apsend/apsend.go +++ cmd/apsend/apsend.go @@ -49,13 +49,16 @@ func wrapCreate(activity *apub.Activity) (*apub.Activi }, nil } +var jflag bool var tflag bool var Fflag bool func init() { - // log.SetFlags... + log.SetFlags(0) + log.SetPrefix("apsend: ") flag.BoolVar(&Fflag, "F", false, "file a copy for the sender") flag.BoolVar(&tflag, "t", false, "read recipients from message") + flag.BoolVar(&jflag, "t", false, "read ActivityPub JSON") flag.Parse() } @@ -70,18 +73,29 @@ func main() { os.Exit(1) } - bmsg, err := io.ReadAll(os.Stdin) - if err != nil { - log.Fatal(err) + var activity *apub.Activity + var bmsg []byte + var err error + if jflag { + var err error + activity, err = apub.Decode(os.Stdin) + if err != nil { + log.Fatalln("decode activity:", err) + } + } else { + bmsg, err = io.ReadAll(os.Stdin) + if err != nil { + log.Fatal(err) + } + msg, err := mail.ReadMessage(bytes.NewReader(bmsg)) + if err != nil { + log.Fatal(err) + } + activity, err = apub.UnmarshalMail(msg) + if err != nil { + log.Fatalln("unmarshal activity from message:", err) + } } - msg, err := mail.ReadMessage(bytes.NewReader(bmsg)) - if err != nil { - log.Fatal(err) - } - activity, err := apub.UnmarshalMail(msg) - if err != nil { - log.Fatalln("unmarshal activity from message:", err) - } var remote []string for _, rcpt := range flag.Args() { @@ -112,7 +126,10 @@ func main() { // overwrite auto generated ID from mail clients if !strings.HasPrefix(activity.ID, "https://") { activity.ID = from.Outbox + "/" + strconv.Itoa(int(activity.Published.Unix())) - bmsg, _ = apub.MarshalMail(activity) + bmsg, err = apub.MarshalMail(activity) + if err != nil { + log.Fatalf("remarshal %s activity to mail: %v", activity.Type, err) + } } // Permit this activity for the public, too;