46 lines
2 KiB
Go
46 lines
2 KiB
Go
package backend
|
|
|
|
import "time"
|
|
|
|
// RawMessage ist eine 1:1 aus der Quelle geholte Nachricht: der Rohkoerper
|
|
// plus die Metadaten, die den sauberen Umzug ausmachen.
|
|
type RawMessage struct {
|
|
MessageID string // aus Header, Schluessel fuer Idempotenz
|
|
Body []byte // kompletter RFC822-Rohtext, wird NICHT umgeschrieben
|
|
Flags []string // \Seen \Answered \Flagged ... 1:1 uebernehmen
|
|
InternalDate time.Time // Original-Zeit, per APPEND erhalten
|
|
}
|
|
|
|
// Folder ist ein Ordner der Quelle MIT den Infos, die 11-folders.go fuer die
|
|
// Rollen-Zuordnung braucht: dekodierter Name (Umlaute als Klartext, NICHT
|
|
// modified-UTF-7), SPECIAL-USE-Attribute und der Hierarchie-Trenner.
|
|
type Folder struct {
|
|
Name string // dekodiert, z.B. "Gelöschte Objekte" oder "INBOX.Sent"
|
|
Attrs []string // z.B. ["\\Sent"] aus SPECIAL-USE
|
|
Delim string // "." oder "/" — servereigener Trenner
|
|
}
|
|
|
|
// SourceMailbox abstrahiert Quelle (IMAP primaer, POP3 Fallback), damit
|
|
// 07-migrate.go gegen ein Interface arbeitet.
|
|
type SourceMailbox interface {
|
|
Folders() ([]Folder, error) // rekursiver Ordnerbaum
|
|
Fetch(folder string) ([]RawMessage, error) // Stream: BODY[] FLAGS INTERNALDATE
|
|
Close() error
|
|
}
|
|
|
|
// OpenIMAPSource verbindet die Quelle per go-imap/v2.
|
|
//
|
|
// Verschluesselung nach a.SrcSecurity:
|
|
// - "tls": imapclient.DialTLS (impliziter TLS, Port 993)
|
|
// - "starttls": imapclient.DialStartTLS auf Klartext-Port 143
|
|
// - "none": imapclient.Dial (REINER KLARTEXT, alte Provider!)
|
|
//
|
|
// a.SrcInsecure -> tls.Config{InsecureSkipVerify:true} fuer kaputte/selbst-
|
|
// signierte Zerts. go-imap dekodiert modified-UTF-7-Ordnernamen selbst; wir
|
|
// geben in Folder.Name den Klartext weiter.
|
|
func OpenIMAPSource(a Account) (SourceMailbox, error) {
|
|
// TODO Codex: nach SrcSecurity verbinden, Login, imapSource zurueckgeben.
|
|
// Folders() = LIST "" "*" mit SPECIAL-USE + Delim; Fetch() = SELECT +
|
|
// UID FETCH BODY[] FLAGS INTERNALDATE, streamend um RAM zu schonen.
|
|
return nil, nil
|
|
}
|