Signed-off-by: Tim Marx <t.m...@proxmox.com>
---
 PVE/APIServer/AnyEvent.pm  |  5 +++++
 PVE/APIServer/Formatter.pm | 12 ++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/PVE/APIServer/AnyEvent.pm b/PVE/APIServer/AnyEvent.pm
index 2e8ca47..c8f7b6d 100644
--- a/PVE/APIServer/AnyEvent.pm
+++ b/PVE/APIServer/AnyEvent.pm
@@ -1223,6 +1223,11 @@ sub unshift_read_header {
                    my $cookie = $r->header('Cookie');
                    my $ticket = 
PVE::APIServer::Formatter::extract_auth_cookie($cookie, $self->{cookie_name});
 
+                   if (!defined $ticket) {
+                       my $authHeader = $r->header('Authorization');
+                       $ticket = 
PVE::APIServer::Formatter::extract_ticket_from_auth_header($authHeader, 
$self->{cookie_name});
+                   }
+
                    my ($rel_uri, $format) = &$split_abs_uri($path, 
$self->{base_uri});
                    if (!$format) {
                        $self->error($reqstate, HTTP_NOT_IMPLEMENTED, "no such 
uri");
diff --git a/PVE/APIServer/Formatter.pm b/PVE/APIServer/Formatter.pm
index 0c459bd..f626180 100644
--- a/PVE/APIServer/Formatter.pm
+++ b/PVE/APIServer/Formatter.pm
@@ -87,6 +87,18 @@ sub extract_auth_cookie {
     return $ticket;
 }
 
+sub extract_ticket_from_auth_header {
+    my ($auth_header, $type) = @_;
+
+    return undef if !$auth_header;
+
+    my $ticket = ($auth_header =~ /(?:^|\s)\Q$type\E ([^;]*)/)[0];
+
+    $ticket = uri_unescape($ticket) if $ticket;
+
+    return $ticket;
+}
+
 sub create_auth_cookie {
     my ($ticket, $cookie_name) = @_;
 
-- 
2.20.1

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to