asgard.git

commit 73d44380bcd089c3800c462f7f8e1e3f3275ef10

Author: Adam <git@apiote.xyz>

implement downloading latest diary

 eostre_2.go | 24 +++++++++++++-----------


diff --git a/eostre_2.go b/eostre_2.go
index 6f24ab811042c0adc3b842371fada474d6a7d0e6..9f49a27f7ff9b1d893578a0f848dbd8ca4a34b70 100644
--- a/eostre_2.go
+++ b/eostre_2.go
@@ -45,9 +45,9 @@ 	messages := make(chan *imap.Message, 10)
 	done := make(chan error, 1)
 	section := &imap.BodySectionName{}
 	go func() {
-		done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope, section.FetchItem(), imap.FetchFlags, imap.FetchUid}, messages)
+		done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope, section.FetchItem(), imap.FetchFlags, imap.FetchUid, imap.FetchInternalDate}, messages)
 	}()
-	var latestMessage *message.Entity
+	var latestMessage message.Entity
 	var latestDate time.Time
 	for msg := range messages {
 		subject := msg.Envelope.Subject
@@ -56,7 +56,7 @@ 			log.Printf("ignoring subject %s\n", subject)
 			continue
 		}
 		sender := msg.Envelope.From[0]
-		if sender.Address() != config.Eostre.AuthorisedSender {
+		if sender.Address() != config.Eostre.DiarySender {
 			log.Printf("ignoring from %s as not authorised\n", sender)
 			continue
 		}
@@ -79,16 +79,21 @@ 		if t != "application/age" {
 			log.Printf("%d is not age\n", msg.Uid)
 			continue
 		}
-		if msg.Envelope.Date.After(latestDate) {
-			latestDate = msg.Envelope.Date
-			latestMessage = m
+		log.Printf("msg %v is after %v?\n", msg.InternalDate, latestDate)
+		if msg.InternalDate.After(latestDate) {
+			log.Printf("yes\n")
+			latestDate = msg.InternalDate
+			latestMessage = *m
 		}
 	}
+	if latestMessage.Header.Len() == 0 {
+		return fmt.Errorf("No messages with diary")
+	}
 	identity, err := age.ParseX25519Identity(config.Eostre.DiaryPrivateKey)
 	if err != nil {
 		log.Fatalf("Failed to parse private key: %v", err)
 	}
-	r, err := age.Decrypt(latestMessage.Body, identity) // TODO check if body is base64-decoded
+	r, err := age.Decrypt(latestMessage.Body, identity)
 	if err != nil {
 		log.Fatalf("Failed to open encrypted file: %v", err)
 	}
@@ -134,8 +139,6 @@ 	in.Close()
 	w.Close()
 	os.Remove("diary.epub")
 
-	a := b.Bytes()
-
 	now := time.Now().Format("20060102T150405Z0700")
 	msg := strings.NewReader("To: " + config.Eostre.DiaryRecipient + "\r\n" +
 		"From: " + config.Eostre.DiarySender + "\r\n" +
@@ -146,9 +149,8 @@ 		"Subject: Diary\r\n" +
 		"Content-Type: application/age; name=diary.epub.age\r\n" +
 		"Content-Transfer-Encoding: base64\r\n" +
 		"\r\n" +
-		string(a),
+		string(b.Bytes()),
 	)
-	fmt.Println(string(a))
 	c, err := smtp.DialTLS(config.Eostre.DiarySmtpAddress, nil)
 	if err != nil {
 		log.Fatalf("Failed smtp dial: %v", err)