bachelorthesis/Bachelorthesis/Content/Entwicklung/Realisierung/Implementierung/MTA-Entscheider.tex

51 lines
2.2 KiB
TeX

Nachfolgend wird der Hauptteil des Implementierungscodes aufgezeigt, allerdings ohne die Hilfsfunktionen. Dies soll eine Übersicht über den Haraka-spezifischen Algorithmus für den MTA-Entscheider geben.
\begin{minipage}{\linewidth}
\begin{JavaScript}{Haraka MTA-Entscheider}{hentscheider}
exports.hook_data_post = function(next, connection) {
// if we have a myst mail, we need to inject our Protocol
if (is_myst_mail(connection.transaction.header)) {
// we decrypt the mail body and treat it as raw
// mail data
var decrypted_email = myst_decrypt(connection.
transaction.body.bodytext);
// replace the current transaction object
var t = transform_transaction(decrypted_email,
connection);
connection.transaction = t;
// the unpacked mail is a myst mail too,
// relay it
if (is_myst_mail(connection.transaction.header)) {
connection.relaying = true;
}
}
// let the other handlers do what they want, we are
// finished injecting our logic, the rest is still
// SMTP compliant
next();
}
\end{JavaScript}
\end{minipage}
Die Funktionen \verb#myst_decrypt()# und \verb#transform_transaction()# können zunächst leere Funktionen sein. Wichtig ist hier lediglich die Funktion \verb#is_myst_mail()#, welche folgendermaßen definiert ist:
\begin{JavaScript}{Haraka Myst header checker}{hismystmail}
function is_myst_mail(header) {
if (header.get("X-Myst")) {
return true;
}
return false;
}
\end{JavaScript}
Damit ist der erste Teil des MTA-Entscheider bereits implementiert und die Logik für das Entpacken und Erstellen der neuen E-Mail kann implementiert werden.
Die Verschlüsselung und Entschlüsselung ist hier lediglich Base64. Die Funktion \verb#transform_transaction()# wird aufgrund ihrer Komplexität nur im Anhang gezeigt, % toref
da sie ebenso auf interner Haraka-API aufbaut.
Ebenso wichtig ist, anzumerken, dass \verb#connection.relaying = true;# im MTA-Entscheider bedeutet, dass der MTA für alle MystMails ein Open Relay ist. Deshalb kann und sollte ab Zeile 16 weitere Logik darüber entscheiden (z.B. eine Whitelist), ob die E-Mail weitergeleitet werden darf.