#REGTEST_TYPE=devel

# This test uses the "new ssl crl-file" and "del ssl crl-file" commands to create
# a new CRL file or delete an unused CRL file.
#
# It requires socat to upload the CRL file.
#
# If this test does not work anymore:
# - Check that you have socat

varnishtest "Test the 'new ssl crl-file' and 'del ssl crl-file' commands of the CLI"
#REQUIRE_VERSION=2.5
#REQUIRE_OPTIONS=OPENSSL
#REQUIRE_BINARIES=socat
feature ignore_unknown_macro

server s1 -repeat 3 {
  rxreq
  txresp
} -start

haproxy h1 -conf {
    global
        tune.ssl.default-dh-param 2048
        tune.ssl.capture-cipherlist-size 1
        stats socket "${tmpdir}/h1/stats" level admin
        crt-base ${testdir}

    defaults
        mode http
        option httplog
        log stderr local0 debug err
        option logasap
        timeout connect 100ms
        timeout client  1s
        timeout server  1s

    listen clear-lst
        bind "fd@${clearlst}"
        balance roundrobin
        use_backend with_crl_be if { path /with-crl }
        default_backend default_be

    backend default_be
        server s1 "${tmpdir}/ssl.sock" ssl verify none crt ${testdir}/client3_revoked.pem sni str(www.test1.com)

    backend with_crl_be
        server s1 "${tmpdir}/ssl.sock" ssl verify none crt ${testdir}/client3_revoked.pem sni str(with-crl.com)

    listen ssl-lst
        bind "${tmpdir}/ssl.sock" ssl strict-sni crt-list ${testdir}/localhost.crt-list ca-file ${testdir}/ca-auth.crt verify required crt-ignore-err all
        http-response add-header X-SSL-Client-Verify %[ssl_c_verify]
        server s1 ${s1_addr}:${s1_port}
} -start

# Request using the default backend and the www.test1.com sni
client c1 -connect ${h1_clearlst_sock} {
    txreq
    rxresp
    expect resp.status == 200
    # The backend has no CRL so the connection should succeed
    expect resp.http.X-SSL-Client-Verify == 0
} -run

# This connection should fail because the with-crl.com sni is not mentioned in the crt-list yet.
client c1 -connect ${h1_clearlst_sock} {
    txreq -url "/with-crl"
    rxresp
    expect resp.status == 503
} -run

# Create a new unlinked CRL file
haproxy h1 -cli {
    send "new ssl crl-file new_crlfile.crt"
    expect ~ "New CRL file created 'new_crlfile.crt'!"
}

shell {
    printf "set ssl crl-file new_crlfile.crt <<\n$(cat ${testdir}/crl-auth.pem)\n\n" | socat "${tmpdir}/h1/stats" -
    echo "commit ssl crl-file new_crlfile.crt" | socat "${tmpdir}/h1/stats" -
}

haproxy h1 -cli {
    send "show ssl crl-file"
    expect ~ ".*new_crlfile.crt"

    send "show ssl crl-file new_crlfile.crt"
    expect ~ ".*Issuer:.*/CN=HAProxy Technologies CA Test Client Auth"
}

# Add a new certificate that will use the new CA file
shell {
    echo "new ssl cert ${testdir}/set_cafile_server.pem" | socat "${tmpdir}/h1/stats" -
    printf "set ssl cert ${testdir}/set_cafile_server.pem <<\n$(cat ${testdir}/set_cafile_server.pem)\n\n" | socat "${tmpdir}/h1/stats" -
    echo "commit ssl cert ${testdir}/set_cafile_server.pem" | socat "${tmpdir}/h1/stats" -
}

# Create a new crt-list line that will use the new CA file
shell {
    printf "add ssl crt-list ${testdir}/localhost.crt-list <<\n${testdir}/set_cafile_server.pem [crl-file new_crlfile.crt] with-crl.com\n\n" | socat "${tmpdir}/h1/stats" -
}

client c1 -connect ${h1_clearlst_sock} {
    txreq -url "/with-crl"
    rxresp
    expect resp.status == 200
    # The frontend's certificate is revoked in the newly added CRL, connection should fail
    expect resp.http.X-SSL-Client-Verify == 23
} -run

# Request using the default backend and the www.test1.com sni
client c1 -connect ${h1_clearlst_sock} {
    txreq
    rxresp
    expect resp.status == 200
    # The backend has no CRL for this SNI so the connection should still succeed
    expect resp.http.X-SSL-Client-Verify == 0
} -run

# Delete the newly added crt-list line and CRL file
haproxy h1 -cli {
    send "del ssl crt-list ${testdir}/localhost.crt-list ${testdir}/set_cafile_server.pem"
    expect ~ "Entry '${testdir}/set_cafile_server.pem' deleted in crtlist '${testdir}/localhost.crt-list'!"

    send "del ssl crl-file new_crlfile.crt"
    expect ~ "CRL file 'new_crlfile.crt' deleted!"

    send "show ssl crl-file"
    expect !~ "new_crlfile.crt"
}

# The connection should now fail since the crt-list line was deleted
client c1 -connect ${h1_clearlst_sock} {
    txreq -url "/with-crl"
    rxresp
    expect resp.status == 503
} -run

