use strict; package HTML::FormFu::Constraint::File::MIME; $HTML::FormFu::Constraint::File::MIME::VERSION = '2.07'; # ABSTRACT: MIME Type Constraint use Moose; use MooseX::Attribute::Chained; extends 'HTML::FormFu::Constraint'; use List::Util 1.33 qw( any ); use Scalar::Util qw( blessed ); has regex => ( is => 'rw', traits => ['Chained'] ); has types => ( is => 'rw', traits => ['Chained'] ); sub constrain_value { my ( $self, $value ) = @_; return 1 if !defined $value || $value eq ''; return if !blessed($value) || !$value->isa('HTML::FormFu::Upload'); my $input = $value->headers->content_type; my $types = $self->types; my $regex = $self->regex; if ( defined $types ) { if ( ref $types ne 'ARRAY' ) { $types = [$types]; } return 1 if any { $input eq $_ } @$types; } if ( defined $regex ) { return $input =~ /$regex/x; } return; } __PACKAGE__->meta->make_immutable; 1; __END__ =pod =encoding UTF-8 =head1 NAME HTML::FormFu::Constraint::File::MIME - MIME Type Constraint =head1 VERSION version 2.07 =head1 DESCRIPTION Constraint an uploaded file's MIME-type (Content-Type). L is checked before L. =head1 METHODS =head2 types Arguments: $mime_type Arguments: \@mime_types Optional. Accepts a single MIME-type or an arrayref of MIME-types. Each is checked against the uploaded file's MIME-type (as given by the browser), and the constraint passes if any one of the given types matches. =head2 regex Arguments: $regex Optional. Accepts a string to be interpreted as a regex, and is checked against the uploaded files's MIME-type (as given by the browser). The regex uses the C flag, so that whitespace in the given string is ignored. =head1 SEE ALSO Is a sub-class of, and inherits methods from L L =head1 AUTHOR Carl Franks, C =head1 LICENSE This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Carl Franks =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2018 by Carl Franks. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut