Commit Diff


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;