--- src/PVE/ACME.pm | 12 ++++++++++++ src/PVE/ACME/Challenge.pm | 6 ++++++ src/PVE/ACME/StandAlone.pm | 32 +++++++++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/src/PVE/ACME.pm b/src/PVE/ACME.pm index da4cbcc..c82f297 100644 --- a/src/PVE/ACME.pm +++ b/src/PVE/ACME.pm @@ -74,6 +74,18 @@ sub fromjs($) { return from_json($_[0]); } +sub validating_url($$$$) { + my ($acme, $auth, $auth_url, $node_config) = @_; + + my $plugin_type = $node_config->{plugin} ? + $node_config->{plugin} : 'standalone'; + + my $plugin = PVE::ACME::Challenge->lookup($plugin_type); + my $challenge = $plugin->supported_challenge_types(); + print "Use Plugin $plugin with $challenge as challenge\n"; + return $plugin->validating_url($acme, $auth, $auth_url, $node_config); +} + sub fatal($$;$$) { my ($self, $msg, $dump, $noerr) = @_; diff --git a/src/PVE/ACME/Challenge.pm b/src/PVE/ACME/Challenge.pm index 786666c..ced779b 100644 --- a/src/PVE/ACME/Challenge.pm +++ b/src/PVE/ACME/Challenge.pm @@ -15,6 +15,12 @@ sub supported_challenge_types { return {}; } +sub validating_url { + my ($class, $acme, $auth, $auth_url, $node_config) = @_; + + die "implement me\n"; +} + sub setup { my ($class, $acme, $authorization) = @_; diff --git a/src/PVE/ACME/StandAlone.pm b/src/PVE/ACME/StandAlone.pm index 3766862..965fb32 100644 --- a/src/PVE/ACME/StandAlone.pm +++ b/src/PVE/ACME/StandAlone.pm @@ -13,7 +13,37 @@ sub type { } sub supported_challenge_types { - return { 'http-01' => 1 }; + return 'http-01'; +} + +sub validating_url { + my ($class, $acme, $auth, $auth_url, $node_config) = @_; + + print "Setting up webserver\n"; + my $validation = eval { setup($class, $acme, $auth) }; + die "failed setting up webserver - $@\n" if $@; + print "Triggering validation\n"; + eval { + $acme->request_challenge_validation($validation->{url}, $validation->{key_auth}); + print "Sleeping for 5 seconds\n"; + sleep 5; + while (1) { + $auth = $acme->get_authorization($auth_url); + if ($auth->{status} eq 'pending') { + print "Status is still 'pending', trying again in 30 seconds\n"; + sleep 30; + next; + } elsif ($auth->{status} eq 'valid') { + print "Status is 'valid'!\n"; + last; + } + die "validating challenge '$auth_url' failed\n"; + } + }; + my $err = $@; + eval { $validation->teardown() }; + warn "$@\n" if $@; + die $err if $err; } sub setup { -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel