source: repository/lib/Metabrik/File/Type.pm

Last change on this file was 992:6bd6acfc81d5, checked in by GomoR <gomor@…>, 2 weeks ago
  • update: copyright notice
  • new: support for Kali Linux operating system
  • remove: api::onyphe is no more included, it use handled in its own repository
File size: 4.5 KB
Line 
1#
2# $Id$
3#
4# file::type Brik
5#
6package Metabrik::File::Type;
7use strict;
8use warnings;
9
10use base qw(Metabrik::System::Package);
11
12sub brik_properties {
13   return {
14      revision => '$Revision$',
15      tags => [ qw(unstable) ],
16      author => 'GomoR <GomoR[at]metabrik.org>',
17      license => 'http://opensource.org/licenses/BSD-3-Clause',
18      commands => {
19         install => [ ], # Inherited
20         get_mime_type => [ qw(file|file_list) ],
21         get_magic_type => [ qw(file|file_list) ],
22         is_mime_type => [ qw(file|file_list mime_type) ],
23         is_magic_type => [ qw(file|file_list mime_type) ],
24         get_types => [ qw(file|file_list) ],
25      },
26      require_modules => {
27         'File::LibMagic' => [ ],
28      },
29      need_packages => {
30         ubuntu => [ qw(libmagic-dev) ],
31         debian => [ qw(libmagic-dev) ],
32         kali => [ qw(libmagic-dev) ],
33      },
34   };
35}
36
37sub get_mime_type {
38   my $self = shift;
39   my ($files) = @_;
40
41   $self->brik_help_run_undef_arg('get_mime_type', $files) or return;
42   my $ref = $self->brik_help_run_invalid_arg('get_mime_type', $files, 'ARRAY', 'SCALAR')
43      or return;
44
45   my $magic = File::LibMagic->new;
46
47   if ($ref eq 'ARRAY') {
48      my $types = {};
49      for my $file (@$files) {
50         my $type = $self->get_mime_type($file) or next;
51         $types->{$file} = $type;
52      }
53
54      return $types;
55   }
56   else {
57      $self->brik_help_run_file_not_found('get_mime_type', $files) or return;
58      my $info = $magic->info_from_filename($files);
59
60      return $info->{mime_type};
61   }
62
63   # Error
64   return;
65}
66
67sub get_magic_type {
68   my $self = shift;
69   my ($files) = @_;
70
71   $self->brik_help_run_undef_arg('get_magic_type', $files) or return;
72   my $ref = $self->brik_help_run_invalid_arg('get_magic_type', $files, 'ARRAY', 'SCALAR')
73      or return;
74
75   my $magic = File::LibMagic->new;
76
77   if ($ref eq 'ARRAY') {
78      my $types = {};
79      for my $file (@$files) {
80         my $type = $self->get_magic_type($file) or next;
81         $types->{$file} = $type;
82      }
83      return $types;
84   }
85   else {
86      $self->brik_help_run_file_not_found('get_magic_type', $files) or return;
87      my $info = $magic->info_from_filename($files);
88      return $info->{description};
89   }
90
91   # Error
92   return;
93}
94
95sub is_mime_type {
96   my $self = shift;
97   my ($files, $mime_type) = @_;
98
99   $self->brik_help_run_undef_arg('is_mime_type', $files) or return;
100   my $ref = $self->brik_help_run_invalid_arg('is_mime_type', $files, 'ARRAY', 'SCALAR')
101      or return;
102
103   my $types = {};
104   if ($ref eq 'ARRAY') {
105      $self->brik_help_run_empty_array_arg('is_mime_type', $files) or return;
106      for my $file (@$files) {
107         my $res = $self->is_mime_type($file, $mime_type) or next;
108         $types->{$files} = $res;
109      }
110   }
111   else {
112      my $type = $self->get_mime_type($files, $mime_type) or return;
113      if ($type eq $mime_type) {
114         $types->{$files} = 1;
115      }
116      else {
117         $types->{$files} = 0;
118      }
119   }
120
121   return $ref eq 'ARRAY' ? $types : $types->{$files};
122}
123
124sub is_magic_type {
125   my $self = shift;
126   my ($files, $magic_type) = @_;
127
128   $self->brik_help_run_undef_arg('is_magic_type', $files) or return;
129   my $ref = $self->brik_help_run_invalid_arg('is_magic_type', $files, 'ARRAY', 'SCALAR')
130      or return;
131
132   my $types = {};
133   if ($ref eq 'ARRAY') {
134      $self->brik_help_run_empty_array_arg('is_magic_type', $files) or return;
135      for my $file (@$files) {
136         my $res = $self->is_magic_type($file, $magic_type) or next;
137         $types->{$files} = $res;
138      }
139   }
140   else {
141      my $type = $self->get_magic_type($files, $magic_type) or return;
142      if ($type eq $magic_type) {
143         $types->{$files} = 1;
144      }
145      else {
146         $types->{$files} = 0;
147      }
148   }
149
150   return $ref eq 'ARRAY' ? $types : $types->{$files};
151}
152
153sub get_types {
154   my $self = shift;
155   my ($files) = @_;
156
157   $self->brik_help_run_undef_arg('get_types', $files) or return;
158   my $ref = $self->brik_help_run_invalid_arg('get_types', $files, 'ARRAY', 'SCALAR')
159      or return;
160
161   my $mime = $self->get_mime_type($files) or return;
162   my $magic = $self->get_magic_type($files) or return;
163
164   return {
165      mime => $mime,
166      magic => $magic,
167   };
168}
169
1701;
171
172__END__
173
174=head1 NAME
175
176Metabrik::File::Type - file::type Brik
177
178=head1 COPYRIGHT AND LICENSE
179
180Copyright (c) 2014-2019, Patrice E<lt>GomoRE<gt> Auffret
181
182You may distribute this module under the terms of The BSD 3-Clause License.
183See LICENSE file in the source distribution archive.
184
185=head1 AUTHOR
186
187Patrice E<lt>GomoRE<gt> Auffret
188
189=cut
Note: See TracBrowser for help on using the repository browser.