# Config for smtp.t tests.

worker_processes  1;

master_process off;
daemon         off;

events {
    worker_connections  1024;
}

mail {
    proxy_pass_error_message  on;
    auth_http  http://localhost:8080/mail/auth;
    xclient    off;

    server {
        listen     localhost:10025;
        protocol   smtp;
        smtp_auth  login plain none;
    }

    server {
        listen     localhost:10026;
        protocol   smtp;
        smtp_greeting_delay  100ms;
    }
}

http {
    access_log    off;

    server {
        listen       localhost:8080;
        server_name  localhost;

        location = /mail/auth {
            set $reply ERROR;

            if ($http_auth_smtp_to ~ example.com) {
                set $reply OK;
            }
            if ($http_auth_pass ~ secret) {
                set $reply OK;
            }

            add_header Auth-Status $reply;
            add_header Auth-Server 127.0.0.1;
            add_header Auth-Port 25;
            add_header Auth-Wait 1;
            return 204;
        }
    }
}
