]>
git.proxmox.com Git - pve-http-server.git/blob - PVE/APIServer/Formatter.pm
1 package PVE
::APIServer
::Formatter
;
8 # generic formatter support
9 # PVE::APIServer::Formatter::* classes should register themselves here
11 my $formatter_hash = {};
12 my $page_formatter_hash = {};
14 sub register_formatter
{
15 my ($format, $code) = @_;
17 die "formatter '$format' already defined"
18 if defined($formatter_hash->{$format});
20 $formatter_hash->{$format} = $code;
23 sub register_page_formatter
{
26 my $format = $config{format
} ||
29 my $path = $config{path
} ||
32 my $method = $config{method} ||
35 my $code = $config{code
} ||
36 die "missing formatter code";
38 die "duplicate page formatter for '$method: $path'"
39 if defined($page_formatter_hash->{$format}->{$method}->{$path});
41 $page_formatter_hash->{$format}->{$method}->{$path} = $code;
45 my ($format, $method, $path) = @_;
47 return undef if !defined($format);
49 if (defined($method) && defined($path)) {
50 my $code = $page_formatter_hash->{$format}->{$method}->{$path};
51 return $code if defined($code);
54 return $formatter_hash->{$format};
57 my $login_formatter_hash = {};
59 sub register_login_formatter
{
60 my ($format, $code) = @_;
62 die "login formatter '$format' already defined"
63 if defined($login_formatter_hash->{$format});
65 $login_formatter_hash->{$format} = $code;
68 sub get_login_formatter
{
71 return undef if !defined($format);
73 return $login_formatter_hash->{$format};
76 # some helper functions
78 sub extract_auth_cookie
{
79 my ($cookie, $cookie_name) = @_;
81 return undef if !$cookie;
83 my $ticket = ($cookie =~ /(?:^|\s)\Q$cookie_name\E=([^;]*)/)[0];
85 if ($ticket && $ticket =~ m/^PVE%3A/) {
86 $ticket = uri_unescape
($ticket);
92 sub create_auth_cookie
{
93 my ($ticket, $cookie_name) = @_;
95 my $encticket = uri_escape
($ticket);
97 return "${cookie_name}=$encticket; path=/; secure;";