acme-common: use validation_method option instead of guessing
authorSergey Ponomarev <stokito@gmail.com>
Wed, 28 Feb 2024 19:59:27 +0000 (21:59 +0200)
committerToke Høiland-Jørgensen <toke@toke.dk>
Fri, 1 Mar 2024 16:01:40 +0000 (17:01 +0100)
The new validation_method option can be: dns, webroot or standalone.
Previously we guessed the challenge type:
1. if the DNS provider is specified then it's dns
2. if standalone=1
3. fallback to webroot

The logic is preserved and if the validation_method wasn't set explicitly we'll guess it in old manner.

Signed-off-by: Sergey Ponomarev <stokito@gmail.com>
net/acme-common/files/acme.config
net/acme-common/files/acme.init

index 75fd1cf096a3929e38ddb0c47f12d72e3cb69185..c67c24e78b7ab4d1e8c608c0f3c9ec82dd492593 100644 (file)
@@ -8,6 +8,7 @@ config cert 'example_wildcard'
        list domains example.org
        list domains sub.example.org
        list domains *.sub.example.org
+       option validation_method dns
        option dns "dns_freedns"
        list credentials 'FREEDNS_User="ssladmin@example.org"'
        list credentials 'FREEDNS_Password="1234"'
@@ -19,3 +20,4 @@ config cert 'example'
        option staging 1
        list domains example.org
        list domains sub.example.org
+       validation_method webroot
index d4ff510630db16dc525d334883c9327a2a5dc133..808d18732f387ad91fc55e41ae96eca68f613f88 100644 (file)
@@ -56,8 +56,8 @@ load_options() {
        export acme_server
        config_get days "$section" days
        export days
-       config_get standalone "$section" standalone 0
-       export standalone
+       config_get standalone "$section" standalone
+       [ -n "$standalone" ] && log warn "Option \"standalone\" is deprecated."
        config_get dns_wait "$section" dns_wait
        export dns_wait
        config_get webroot "$section" webroot
@@ -65,6 +65,20 @@ load_options() {
                log warn "Option \"webroot\" is deprecated, please remove it and change your web server's config so it serves ACME challenge requests from $CHALLENGE_DIR."
                CHALLENGE_DIR=$webroot
        fi
+
+       config_get validation_method "$section" validation_method
+       # if validation_method isn't set then guess it
+       if [ -z "$validation_method" ]; then
+               if [ -n "$dns" ]; then
+                       validation_method="dns"
+               elif [ "$standalone" = 1 ]; then
+                       validation_method="standalone"
+               else
+                       validation_method="webroot"
+               fi
+               log warn "Please set \"option validation_method $validation_method\"."
+       fi
+       export validation_method
 }
 
 first_arg() {
@@ -78,11 +92,11 @@ get_cert() {
        [ "$enabled" = 1 ] || return
 
        load_options "$section"
-       if [ -z "$dns" ] && [ "$standalone" = 0 ]; then
+       if [ "$validation_method" = "webroot" ]; then
                mkdir -p "$CHALLENGE_DIR"
        fi
 
-       if [ "$standalone" = 1 ] && [ -z "$NFT_HANDLE" ]; then
+       if [ "$validation_method" = "standalone" ] && [ -z "$NFT_HANDLE" ]; then
                if ! NFT_HANDLE=$(nft -a -e insert rule inet fw4 input tcp dport 80 counter accept comment ACME | grep -o 'handle [0-9]\+'); then
                        return 1
                fi