38 lines
1.5 KiB
TeX
38 lines
1.5 KiB
TeX
|
Um die initiale MystMail zu erstellen, die die Informationen über die Hops verschlüsselt in sich trägt, wird diese der Einfachheit halber im MSA, also gewissermaßen einem SMTP-Gateway, generiert.
|
||
|
|
||
|
Die Liste der Hops ist statisch und vordefiniert für Testzwecke. Es liegt somit kein Zufallsalgorithmus vor. Die Verschlüsselung ist ebenso lediglich Pseudoverschlüsselung und kodiert gemäß Base64.
|
||
|
|
||
|
\begin{minipage}{\linewidth}
|
||
|
\begin{JavaScript}{Haraka Myst Erstellung}{hcreatemystmail}
|
||
|
function create_myst_mail(transaction) {
|
||
|
// recipient is always the last hop
|
||
|
var recipient = transaction.rcpt_to[0].host;
|
||
|
var hops = get_hops();
|
||
|
hops.push(recipient);
|
||
|
|
||
|
// innermost mail, untouched
|
||
|
var old_mail = get_raw_mail(transaction.body);
|
||
|
|
||
|
var i;
|
||
|
var new_mail = old_mail;
|
||
|
for (i = hops.length - 1; i >= 0; i--) {
|
||
|
if (i == 0) {
|
||
|
// first hop, "from" must be the actual sender
|
||
|
var sender = transaction.mail_from.host;
|
||
|
new_mail = create_mail_for_hop(sender, hops[i],
|
||
|
date, new_mail);
|
||
|
} else {
|
||
|
new_mail = create_mail_for_hop(hops[i-1],
|
||
|
hops[i], date, new_mail);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return new_mail;
|
||
|
}
|
||
|
\end{JavaScript}
|
||
|
\end{minipage}
|
||
|
|
||
|
Die Hilfsfunktionen lassen sich im Anhang einsehen. % toref
|
||
|
|
||
|
Nachdem die Mail erstellt ist, wird ähnlich wie beim MTA-Entscheider im Hook \verb#data_post# angesetzt und das Transaktions-Objekt manipuliert, um die dort enthaltene E-Mail mit der MystMail auszutauschen. Der entsprechende Code ist etwas kompliziert und ebenfalls im Anhang einsehbar.
|
||
|
|