]> git.proxmox.com Git - pmg-api.git/blob - src/PMG/API2/MimeTypes.pm
2c1db5da664bf8e42127c5426f6788feb15da1b0
[pmg-api.git] / src / PMG / API2 / MimeTypes.pm
1 package PMG::API2::MimeTypes;
2
3 use strict;
4 use warnings;
5
6 use PVE::RESTHandler;
7
8 use base qw(PVE::RESTHandler);
9
10 my $mime = [];
11
12 my $load_mime_types = sub {
13 my $mtypes = {
14 'message/delivery-status' => undef,
15 'message/disposition-notification' => undef,
16 'message/external-body' => undef,
17 'message/news' => undef,
18 'message/partial' => undef,
19 'message/rfc822' => undef,
20 'multipart/alternative' => undef,
21 'multipart/digest' => undef,
22 'multipart/encrypted' => undef,
23 'multipart/mixed' => undef,
24 'multipart/related' => undef,
25 'multipart/report' => undef,
26 'multipart/signed' => undef,
27 };
28
29 # get mimetypes out of /usr/share/mime/globs
30
31 open(DAT, "/usr/share/mime/globs") ||
32 die ("Could not open file $!: ERROR");
33
34 while (my $row = <DAT>) {
35 next if $row =~ m/^\#/;
36
37 if ($row =~ m/([A-Za-z0-9-_\.]*)\/([A-Za-z0-9-_\+\.]*):\*\.(\S{1,10})\s*$/) {
38
39 my $m = "$1/$2";
40 my $end = $3;
41
42 $m =~ s/\./\\\./g; # quote '.'
43 $m =~ s/\+/\\\+/g; # quote '+'
44
45 if (defined ($end)) {
46 $mtypes->{"$m"} = $mtypes->{"$m"} ? $mtypes->{"$m"} . ",$end" : $end;
47 }
48 }
49 }
50 close(DAT);
51
52 # sort and add wildcard entries
53 my $lasttype='';
54
55 foreach my $mt (sort (keys %$mtypes)) {
56 my ($type, $subtype) = split ('/', $mt);
57
58 if ($type ne $lasttype) {
59 push (@$mime, { mimetype => "$type/.*", text => "$type/.*"});
60 $lasttype = $type;
61 }
62
63 my $text = $mtypes->{$mt} ? "$mt ($mtypes->{$mt})" : $mt;
64
65 push (@$mime, { mimetype => $mt, text => $text });
66 }
67 };
68
69 $load_mime_types->();
70
71 __PACKAGE__->register_method ({
72 name => 'index',
73 path => '',
74 method => 'GET',
75 description => "Get Mime Types List",
76 parameters => {
77 additionalProperties => 0,
78 },
79 returns => {
80 type => 'array',
81 items => {
82 type => "object",
83 properties => {
84 mimetype => { type => 'string'},
85 text => { type => 'string' },
86 },
87 },
88 },
89 code => sub {
90 my ($param) = @_;
91
92 return $mime;
93 }});
94
95 1;