Skip to content
Snippets Groups Projects
Select Git revision
  • 4d95463ecd3613171b4e4aadc5686686551d917e
  • master default
2 results

ConfigParser.cs

Blame
  • Zpracování mailových nedoručenek (DSN)

    Princip

    Kdykoliv OSMO odesílá mail, umí do obálkového FROM přidat token (oddělený od jména uživatele pluskem), do kterého je zakódováno, kterého uživatele nebo pokusu o registraci se mail týká.

    Pokud přijde nedoručenka, OSMO ji zpracuje a z tokenu v adrese jejího adresáta určí, ke komu patří. K uživatelům a probíhajícím registracím si pak poznamená informaci o nefunkčnosti e-mailové adresy a umí ji uživateli zobrazit.

    Implementace

    Nedoručenky se posílají na osmo-auto+token@mo.mff.cuni.cz, což se přepíše na mo-web+dsn@gimli.ms.mff.cuni.cz.

    Účet mo-web má nakonfigurovaný následující filtr pro Sieve:

    require ["envelope", "subaddress", "include", "mailbox", "vnd.dovecot.execute"];
    
    # Základní systémová pravidla
    include :global "default";
    
    if envelope :detail :matches "To" ["dsn", "dsn+*"] {
        if execute :pipe "osmo-send-dsn" ["https://osmo.matematickaolympiada.cz/"] {
            redirect "spravce+osmo-dsn-ok@example.org";
        } else {
            redirect "spravce+osmo-dsn-error@example.org";
        }
    } else {
        redirect "spravce+osmo-unknown@example.org";
    }

    To spustí program bin/send-dsn, nainstalovaný jako /usr/local/lib/dovecot/sieve-execute/osmo-send-dsn, a ten předá nedoručenku webové části OSMO. Pokud zrovna webová část neběží nebo neumí nedoručenku zpracovat, osmo-send-dsn selže, takže Sieve nedoručenku přepošle správci.

    Webová část si vyparsuje token z hlavičkového To, takže interní přeposílání během doručování ji nezmate.

    Skript bin/send-dsn je minimalistický, stačí mu Python se standardní knihovnou Pythonu a balíčkem requests. Skript může běžet pod jiným uživatelem, nebo dokonce na jiném stroji než zbytek OSMO.

    Komunikace mezi bin/send-dsn a zbytkem OSMO je autorizována tajným klíčem. Web OSMO si ho přečte z DSN_API_KEY z configu, send-dsn ho hledá jako jediný řádek souboru ~/.config/osmo/dsn-api-key.