]> git.proxmox.com Git - pve-http-server.git/blame - PVE/APIServer/Formatter.pm
api-server: extract, set and handle API token header
[pve-http-server.git] / PVE / APIServer / Formatter.pm
CommitLineData
63307beb
DM
1package PVE::APIServer::Formatter;
2
3use strict;
4use warnings;
5
c7154375
DM
6use URI::Escape;
7
63307beb
DM
8# generic formatter support
9# PVE::APIServer::Formatter::* classes should register themselves here
10
11my $formatter_hash = {};
c7154375 12my $page_formatter_hash = {};
63307beb
DM
13
14sub register_formatter {
c7154375
DM
15 my ($format, $code) = @_;
16
17 die "formatter '$format' already defined"
18 if defined($formatter_hash->{$format});
19
20 $formatter_hash->{$format} = $code;
21}
22
23sub register_page_formatter {
24 my (%config) = @_;
25
26 my $format = $config{format} ||
27 die "missing format";
63307beb 28
c7154375
DM
29 my $path = $config{path} ||
30 die "missing path";
63307beb 31
c7154375
DM
32 my $method = $config{method} ||
33 die "missing method";
34
35 my $code = $config{code} ||
36 die "missing formatter code";
37
38 die "duplicate page formatter for '$method: $path'"
39 if defined($page_formatter_hash->{$format}->{$method}->{$path});
40
41 $page_formatter_hash->{$format}->{$method}->{$path} = $code;
63307beb
DM
42}
43
44sub get_formatter {
c7154375 45 my ($format, $method, $path) = @_;
63307beb 46
c7154375 47 return undef if !defined($format);
63307beb 48
c7154375
DM
49 if (defined($method) && defined($path)) {
50 my $code = $page_formatter_hash->{$format}->{$method}->{$path};
51 return $code if defined($code);
52 }
63307beb 53
c7154375 54 return $formatter_hash->{$format};
63307beb
DM
55}
56
57my $login_formatter_hash = {};
58
59sub register_login_formatter {
c7154375 60 my ($format, $code) = @_;
63307beb 61
c7154375
DM
62 die "login formatter '$format' already defined"
63 if defined($login_formatter_hash->{$format});
63307beb 64
c7154375 65 $login_formatter_hash->{$format} = $code;
63307beb
DM
66}
67
68sub get_login_formatter {
69 my ($format) = @_;
70
c7154375 71 return undef if !defined($format);
63307beb 72
c7154375 73 return $login_formatter_hash->{$format};
63307beb
DM
74}
75
76# some helper functions
77
e045d070
TM
78sub extract_auth_value {
79 my ($header, $key) = @_;
63307beb 80
e045d070 81 return undef if !$header;
63307beb 82
e045d070 83 my $value = ($header =~ /(?:^|\s)\Q$key\E(?:=| )([^;]*)/)[0];
63307beb 84
e045d070 85 $value = uri_unescape($value) if $value;
63307beb 86
e045d070 87 return $value;
63307beb
DM
88}
89
90sub create_auth_cookie {
91 my ($ticket, $cookie_name) = @_;
92
93 my $encticket = uri_escape($ticket);
94
95 return "${cookie_name}=$encticket; path=/; secure;";
96}
97
362dd8eb
FG
98sub create_auth_header {
99 my ($value, $key) = @_;
100
101 return undef if !$key;
102
103 my $encoded = uri_escape($value);
104 return "${key} ${encoded}";
105}
106
63307beb 1071;