Add CPANPLUS 0.78
[p5sagit/p5-mst-13.2.git] / lib / CPANPLUS / Module / Signature.pm
1 package CPANPLUS::Module::Signature;
2
3 use strict;
4
5
6 use Cwd;
7 use CPANPLUS::Error;
8 use Params::Check               qw[check];
9 use Module::Load::Conditional   qw[can_load];
10
11
12 ### detached sig, not actually used afaik --kane ###
13 #sub get_signature {
14 #    my $self = shift;
15 #
16 #    my $clone = $self->clone;
17 #    $clone->package( $self->package . '.sig' );
18 #
19 #    return $clone->fetch;
20 #}
21
22 sub check_signature {
23     my $self = shift;
24     my $cb = $self->parent;
25     my $conf = $cb->configure_object;
26     my %hash = @_;
27
28     my $verbose;
29     my $tmpl = {
30         verbose => {default => $conf->get_conf('verbose'), store => \$verbose},
31     };
32
33     check( $tmpl, \%hash ) or return;
34
35     my $dir = $self->status->extract or (
36                 error( loc( "Do not know what dir '%1' was extracted to; ".
37                             "Cannot check signature", $self->module ) ),
38                 return );
39
40     my $cwd = cwd();
41     unless( $cb->_chdir( dir => $dir ) ) {
42         error(loc(  "Could not chdir to '%1', cannot verify distribution '%2'",
43                     $dir, $self->module ));
44         return;
45     }
46
47
48     ### check prerequisites
49     my $flag;
50     my $use_list = { 'Module::Signature' => '0.06' };
51     if( can_load( modules => $use_list, verbose => 1 ) ) {
52         my $rv = Module::Signature::verify();
53
54         unless ($rv eq Module::Signature::SIGNATURE_OK() or
55             $rv eq Module::Signature::SIGNATURE_MISSING()
56         ) {
57             $flag++;    # whoops, bad sig
58         }
59     }
60
61     $cb->_chdir( dir => $cwd );
62     return $flag ? 0 : 1;
63 }
64
65 1;