]> git.proxmox.com Git - pve-http-server.git/blame - PVE/APIServer/Formatter.pm
rework formatter registration
[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
78sub extract_auth_cookie {
79 my ($cookie, $cookie_name) = @_;
80
81 return undef if !$cookie;
82
83 my $ticket = ($cookie =~ /(?:^|\s)\Q$cookie_name\E=([^;]*)/)[0];
84
85 if ($ticket && $ticket =~ m/^PVE%3A/) {
86 $ticket = uri_unescape($ticket);
87 }
88
89 return $ticket;
90}
91
92sub create_auth_cookie {
93 my ($ticket, $cookie_name) = @_;
94
95 my $encticket = uri_escape($ticket);
96
97 return "${cookie_name}=$encticket; path=/; secure;";
98}
99
1001;