NAME

Brick::File - This is the description

SYNOPSIS

see Brick

DESCRIPTION

See Brick::Constraints for the general discussion of constraint creation.

Utilities

is_mime_type( HASH_REF )

Passes if the file matches one of the listed MIME types.

mime_types		array reference of possible MIME types
file_field		the name of the file to check
has_file_extension( HASH_REF )

This constraint checks the filename against a list of extensions which are the elements of ARRAY_REF.

field			the name of the field holding the filename
extensions		an array reference of possible extensions
is_clamav_clean( HASH_REF )

Passes if ClamAV doesn't complain about the file.

clamscan_location	the location of ClamAV, or /usr/local/bin/clamscan
filename			the filename to check

The filename can only contain word characters or a period.

sub file_clamav_clean { my $clamscan = "/usr/local/bin/clamscan";

return sub {
    my $dfv = shift;
    $dfv->name_this('file_clamav_clean');
    my $q = $dfv->get_input_data;

    # Set $ENV{PATH} to the empty string to avoid taint error from
    # exec call. Use local to temporarily clear it out in the context
    # of this sub.
    local $ENV{PATH} = q{};


    $q->UNIVERSAL::can('param') or
        die 'valid_file_clamav_clean: data object missing param() method';

    my $field = $dfv->get_current_constraint_field;

    my $img = $q->upload($field);

    if (not $img and my $err = $q->cgi_error) {
        warn $err;
        return undef;
    }

    my $tmp_file = $q->tmpFileName($q->param($field)) or
        (warn "$0: can't find tmp file for field named $field"),
            return undef;

    ## now return true if $tmp_file is not a virus, false otherwise
    unless (-x $clamscan) {
        warn "$0: can't find clamscan, skipping test";
        return 1;                   # it's valid because we don't see it
    }

    defined (my $pid = open KID, "-|") or die "Can't fork: $!";
    unless ($pid) {               # child does:
        open STDIN, "<$tmp_file" or die "Cannot open $tmp_file for input: $!";
        exec $clamscan, qw(--no-summary -i --stdout -);
        die "Cannot find $clamscan: $!";
    }
    ## parent does:
    my $results = join '', <KID>;
    close KID;
    return if $results; ## if clamscan spoke, it's a virus

    return 1;
};
}

TO DO

Regex::Common support

SEE ALSO

TBA

SOURCE AVAILABILITY

This source is in Github:

https://github.com/briandfoy/brick

AUTHOR

brian d foy, <bdfoy@cpan.org>

COPYRIGHT

Copyright © 2007-2022, brian d foy <bdfoy@cpan.org>. All rights reserved.

You may redistribute this under the terms of the Artistic License 2.0.