App-CamelPKI
view release on metacpan or search on metacpan
lib/App/CamelPKI/CA.pm view on Meta::CPAN
$code =~ s/my //g;
my $directory = $cadir;
my $pubkey = App::CamelPKI::PublicKey->parse($test_public_keys{"rsa1024"});
my ($ca, $joecert, $fredcert, $crl);
my $cadb = load App::CamelPKI::CADB($cadir);
eval $code; die $@ if $@;
ok($joecert->isa("App::CamelPKI::Certificate"));
like($joecert->get_subject_DN->to_string, qr/Joe/);
ok($fredcert->isa("App::CamelPKI::Certificate"));
like($fredcert->get_subject_DN->to_string, qr/Fred/);
ok($crl->isa("App::CamelPKI::CRL"));
ok($crl->is_member($joecert));
ok(! $crl->is_member($fredcert));
};
test "->facet_operational" => sub {
my $ca = load_ca->facet_operational;
my $cacert = $ca->certificate;
try {
$ca->set_keys(-certificate => $cacert);
fail("this method is not allowed by the facet");
} catch App::CamelPKI::Error::Privilege with {
pass;
};
ok($ca->issue_crl->isa("App::CamelPKI::CRL"),
"the facet_operational is operational");
ok($ca->facet_operational->facet_operational->certificate
->isa("App::CamelPKI::Certificate"), "facet_operational idempotent");
};
test "Coherence and forced revocation" => sub {
my $ca = load_ca;
my $pubkey = App::CamelPKI::PublicKey->parse($test_public_keys{"rsa1024"});
$ca->issue("App::CamelPKI::CertTemplate::Foo", $pubkey,
name => "user1", uid => 1);
# I freely pick in the $cert private fields:
my $cert = $ca->{signed}->[0]->{cert};
is(ref($cert), "App::CamelPKI::Certificate");
try {
$ca->revoke("App::CamelPKI::CertTemplate::Foo", $cert);
fail("It's prohibited to revoke certificates "
. "in the current transaction");
} catch App::CamelPKI::Error::Privilege with {
pass;
};
# This operation may have made the $ca object unusable, so we
# try again:
$ca = load_ca->facet_certtemplate("App::CamelPKI::CertTemplate::Foo");
$ca->issue("App::CamelPKI::CertTemplate::Foo", $pubkey,
name => "user1", uid => 1);
# A new certificate for UID 43 must revoke the old one:
my $cursor = $ca->database->search(name => "Fred");
is($cursor->revocation_time(), undef,
"The Fred's certificate is not yet revoked");
is(my $fredid = $cursor->infos->{uid}->[0], 43,
"Using CADB to get the Fred's UID")
or warn Data::Dumper::Dumper(scalar($cursor->infos));
# Fred got his operation, so he need a new certificate:
$ca->issue("App::CamelPKI::CertTemplate::Foo", $pubkey,
name => "Frida", uid => $fredid);
$cursor = $ca->database->search(name => "Fred", -revoked => undef);
isnt($cursor->revocation_time(), undef,
"the Fred certificate is revoked");
is($ca->database->search(-revoked => undef, name => "Frida")->count, 0,
q"No means to use $ca->databae to get "
. q"new certificats in preview");
$ca->issue("App::CamelPKI::CertTemplate::Foo", $pubkey,
name => "Frida", uid => 555);
pass("the template did not catched the trickery...");
try {
$ca->commit();
fail("the coherence check should been triggered now");
} catch App::CamelPKI::Error::User with {
pass("two certificates for Frida, that's a bad thing");
};
};
test "->facet_certtemplate" => sub {
my $ca = load_ca->facet_certtemplate("No::Such::CertTemplate");
my @no_certs = $ca->database->search(-revoked => 0);
is(scalar(@no_certs), 0, "no certificate in the dummy template");
};
test "facets intersection" => sub {
my $ca = load_ca->facet_certtemplate("No::Such::CertTemplate")
->facet_readonly;
my @no_certs = $ca->database->search(-revoked => 0);
is(scalar(@no_certs), 0, "no certificate in the dummy template");
try {
$ca->issue_crl();
fail("this method is not in the facet");
} catch App::CamelPKI::Error::Privilege with {
pass;
};
};
test "capability discipline "
. "sur le CertTemplate->test_certificate_conflict" => sub {
my $pubkey = App::CamelPKI::PublicKey->parse($test_public_keys{"rsa1024"});
our $ca = load_ca;
our ($cert_in_other_template) = $ca->database->search();
ok($cert_in_other_template->isa("App::CamelPKI::Certificate"));
{
package Bogus::CertTemplate;
our @ISA = qw(App::CamelPKI::CertTemplate::Foo); # The same as
# hereafter
sub test_certificate_conflict {
my ($class, $db, @keyvals) = @_;
use Test::More;
is($db->search(-revoked => undef,
-certificate => $cert_in_other_template)
( run in 1.574 second using v1.01-cache-2.11-cpan-d8267643d1d )