diff --git a/src/PVE/ACME/Challenge.pm b/src/PVE/ACME/Challenge.pm index 0137cf2..5fb9cbe 100644 --- a/src/PVE/ACME/Challenge.pm +++ b/src/PVE/ACME/Challenge.pm @@ -48,22 +48,26 @@ sub parse_config { } sub supported_challenge_types { - return {}; + return []; } sub extract_challenge { - my ($self, $challenges, $c_type) = @_; + my ($self, $challenges) = @_; die "no challenges defined\n" if !$challenges; - die "no challenge type is defined \n" if !$c_type; - my $tmp_challenges = [ grep {$_->{type} eq $c_type} @$challenges ]; - die "no $c_type challenge defined in authorization\n" - if ! scalar $tmp_challenges; + my $supported_types = $self->supported_challenge_types(); - my $challenge = $tmp_challenges->[0]; + # preference returned by plugin! + foreach my $supported_type (@$supported_types) { + foreach my $challenge (@$challenges) { + next if $challenge->{type} ne $supported_type; - return $challenge; + return $challenge; + } + } + + die "plugin does not support any of the requested challenge types\n"; } sub get_subplugins { diff --git a/src/PVE/ACME/DNSChallenge.pm b/src/PVE/ACME/DNSChallenge.pm index 041bc79..7f7f125 100644 --- a/src/PVE/ACME/DNSChallenge.pm +++ b/src/PVE/ACME/DNSChallenge.pm @@ -11,7 +11,7 @@ use base qw(PVE::ACME::Challenge); my $ACME_PATH = '/usr/share/proxmox-acme/proxmox-acme'; sub supported_challenge_types { - return { 'dns-01' => 1 }; + return ["dns-01"]; } sub type { @@ -143,12 +143,6 @@ sub options { }; } -sub extract_challenge { - my ($self, $challenge) = @_; - - return PVE::ACME::Challenge->extract_challenge($challenge, 'dns-01'); -} - sub get_subplugins { return $api_name_list; } diff --git a/src/PVE/ACME/StandAlone.pm b/src/PVE/ACME/StandAlone.pm index b47a927..6a6f05a 100644 --- a/src/PVE/ACME/StandAlone.pm +++ b/src/PVE/ACME/StandAlone.pm @@ -9,7 +9,7 @@ use HTTP::Response; use base qw(PVE::ACME::Challenge); sub supported_challenge_types { - return { 'http-01' => 1 }; + return ['http-01']; } sub type { @@ -27,12 +27,6 @@ sub options { }; } -sub extract_challenge { - my ($self, $challenge) = @_; - - return PVE::ACME::Challenge->extract_challenge($challenge, 'http-01'); -} - sub get_subplugins { return []; }