]>
Commit | Line | Data |
---|---|---|
63307beb DM |
1 | package PVE::APIServer::Formatter; |
2 | ||
3 | use strict; | |
4 | use warnings; | |
5 | ||
c7154375 DM |
6 | use URI::Escape; |
7 | ||
63307beb DM |
8 | # generic formatter support |
9 | # PVE::APIServer::Formatter::* classes should register themselves here | |
10 | ||
11 | my $formatter_hash = {}; | |
c7154375 | 12 | my $page_formatter_hash = {}; |
63307beb DM |
13 | |
14 | sub 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 | ||
23 | sub 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 | ||
44 | sub 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 | ||
57 | my $login_formatter_hash = {}; | |
58 | ||
59 | sub 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 | ||
68 | sub 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 | ||
78 | sub 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 | ||
5dfe8376 | 85 | $ticket = uri_unescape($ticket) if $ticket; |
63307beb DM |
86 | |
87 | return $ticket; | |
88 | } | |
89 | ||
90 | sub 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 | ||
98 | 1; |