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)