Mercurial > pub > Yours
view lib/Yours/FileValidator.pm @ 2:f2a86753b494
implemented object model
robust validation
author | cin |
---|---|
date | Tue, 22 Oct 2013 16:15:22 +0400 |
parents | |
children | ae61af01bfa5 |
line wrap: on
line source
package Yours::FileValidator; use strict; use Digest; use IMPL::declare { base => [ 'IMPL::Object' => undef ] }; my %digestTypes = ( sha => 'SHA-1', sha512 => 'SHA-512', sha384 => 'SHA-384', sha256 => 'SHA-256', sha1 => 'SHA-1', md5 => 'MD5', md4 => 'MD4' ); sub Validate { my ($this,$files) = @_; my @bad; while(my ($file,$md) = each %$files) { unless (-f $file) { push @bad, { message => "file not found", file => $file, metadata => $md }; next; } if (my $checksum = $md->{checksum}) { if( my $type = $digestTypes{lc($checksum->{type})} ) { if(open my $hfile, "<$file") { binmode $hfile; my $digest = Digest->new($type)->addfile($hfile)->hexdigest; next if $digest eq $checksum->{value}; push @bad, { message => "$digest ne $checksum->{value}", file => $file, metadata => $md }; } else { push @bad, { message => "unable to open the file", file => $file, metadata => $md }; } } else { $this->Log("$file: unknown hash algorithm: $checksum->{type}"); } } } return @bad; } sub Log { } 1;