]> git.proxmox.com Git - proxmox-acme.git/commitdiff
plugins: unify extract_challenge
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 17 Apr 2020 12:27:42 +0000 (14:27 +0200)
committerFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 17 Apr 2020 12:33:41 +0000 (14:33 +0200)
we have a list of supported challenge types per plugin, so we only need
one generic implementation.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
src/PVE/ACME/Challenge.pm
src/PVE/ACME/DNSChallenge.pm
src/PVE/ACME/StandAlone.pm

index 0137cf22274fe85dc98b7a8592dbfbe8437a9e70..5fb9cbe4adc66f8c135e5a866ad05af5b4036767 100644 (file)
@@ -48,22 +48,26 @@ sub parse_config {
 }
 
 sub supported_challenge_types {
 }
 
 sub supported_challenge_types {
-    return {};
+    return [];
 }
 
 sub extract_challenge {
 }
 
 sub extract_challenge {
-    my ($self, $challenges, $c_type) = @_;
+    my ($self, $challenges) = @_;
 
     die "no challenges defined\n" if !$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 {
 }
 
 sub get_subplugins {
index 041bc791b5cd13434784e56b3b0ac8eedbb229c9..7f7f1256639d1864301c4d3798d4b84358994b0e 100644 (file)
@@ -11,7 +11,7 @@ use base qw(PVE::ACME::Challenge);
 my $ACME_PATH = '/usr/share/proxmox-acme/proxmox-acme';
 
 sub supported_challenge_types {
 my $ACME_PATH = '/usr/share/proxmox-acme/proxmox-acme';
 
 sub supported_challenge_types {
-    return { 'dns-01' => 1 };
+    return ["dns-01"];
 }
 
 sub type {
 }
 
 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;
 }
 sub get_subplugins {
     return $api_name_list;
 }
index b47a927a082201708e206edb68352440a6e784b5..6a6f05abaede87203671606daa869398a2b255dc 100644 (file)
@@ -9,7 +9,7 @@ use HTTP::Response;
 use base qw(PVE::ACME::Challenge);
 
 sub supported_challenge_types {
 use base qw(PVE::ACME::Challenge);
 
 sub supported_challenge_types {
-    return { 'http-01' => 1 };
+    return ['http-01'];
 }
 
 sub type {
 }
 
 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 [];
 }
 sub get_subplugins {
     return [];
 }