Mercurial > pub > Yours
view lib/Yours/FileValidator.pm @ 3:ae61af01bfa5
sync
author | cin |
---|---|
date | Wed, 23 Oct 2013 01:13:19 +0400 |
parents | f2a86753b494 |
children | 45a84be3ebb1 |
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 => "checksumm failed", 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;