From 122626b3d578721ffdbfbbbf47da4b09942f7635 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabian=20Gr=C3=BCnbichler?= Date: Fri, 17 Apr 2020 14:27:42 +0200 Subject: [PATCH] plugins: unify extract_challenge MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit we have a list of supported challenge types per plugin, so we only need one generic implementation. Signed-off-by: Fabian Grünbichler --- src/PVE/ACME/Challenge.pm | 20 ++++++++++++-------- src/PVE/ACME/DNSChallenge.pm | 8 +------- src/PVE/ACME/StandAlone.pm | 8 +------- 3 files changed, 14 insertions(+), 22 deletions(-) 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(); + + # preference returned by plugin! + foreach my $supported_type (@$supported_types) { + foreach my $challenge (@$challenges) { + next if $challenge->{type} ne $supported_type; - my $challenge = $tmp_challenges->[0]; + 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 []; } -- 2.39.2