App-CamelPKI
view release on metacpan or search on metacpan
lib/App/CamelPKI/CA.pm view on Meta::CPAN
Builds a list of certificates already issued by the CA and not revoked.
Certificates are returned as an array of L<App::CamelPKI::Certificate>.
=cut
sub get_certificates_issued(){
my ($self) = @_;
my @certs;
for(my $cursor = $self->{db}->search();
$cursor->has_more; $cursor->next) {
push @certs, $cursor->certificate;
}
return @certs;
}
=head2 get_certificates_revoked()
Builds a list of certificates already issued by the CA and not revoked.
Certificates are returned as an array of L<App::CamelPKI::Certificate>.
=cut
sub get_certificates_revoked(){
my ($self) = @_;
my @certs;
for(my $cursor = $self->{db}->search(-revoked => 1);
$cursor->has_more; $cursor->next) {
push @certs, $cursor->certificate;
}
return @certs;
}
=head2 get_certificate_by_serial($serial)
Builds a list of certificates already issued by the CA and not revoked.
Certificates are returned as an array of L<App::CamelPKI::Certificate>.
=cut
sub get_certificate_by_serial(){
my ($self, $serial) = @_;
for(my $cursor = $self->{db}->search( -serial=>$serial, -revoked=>undef ); $cursor->has_more; $cursor->next) {
warn "on est bon";
return $cursor->certificate;
}
}
=head2 rescind()
Cancels the ingoing transaction and let the object in an unusable
status. Invoked automatically in case of a template exception.
=cut
sub rescind { die "UNIMPLEMENTED" }
=head1 FACETS
=head2 database_facet($certtemplate)
Returns a facet of the CA database (as passed to L</load>) resticted
in read only and using a filter that only allow to consult certificates
generated using $certtemplate as first parameters issued to L</issue>.
=cut
sub database_facet {
my ($self, $template) = @_;
my $retval = Class::Facet->make("App::CamelPKI::CA::CADBFacet",
$self->database);
$retval->{template} = $template;
return $retval;
package App::CamelPKI::CA::CADBFacet;
use Class::Facet from => "App::CamelPKI::CADB",
on_error => \&App::CamelPKI::Error::Privilege::on_facet_error,
delegate => [ qw(max_serial) ];
sub search {
my ($facetself, $trueself) = Class::Facet->selves(\@_);
return $trueself->search(template => $facetself->{template}, @_);
}
}
=head2 facet_readonly()
Returns a copy of this object in read only: only L</certificate> and
L</database> methods can be invoked.
=cut
sub facet_readonly {
return Class::Facet->make("App::CamelPKI::CA::FacetReadonly", shift);
package App::CamelPKI::CA::FacetReadonly;
use Class::Facet from => "App::CamelPKI::CA",
on_error => \&App::CamelPKI::Error::Privilege::on_facet_error,
delegate => [qw(rescind certificate is_operational database
database_facet)];
# Cascading facets (yow!)
BEGIN { foreach my $methname
(qw(facet_readonly facet_crl_only
facet_certtemplate facet_operational)) {
no strict "refs";
*{"$methname"} = \&{"App::CamelPKI::CA::$methname"};
}
}
}
=head2 facet_crl_only()
Returns a copy of this object with restricted privileges: besides the
read-only accessors (see L</facet_readonly>), a holder of a reference
( run in 0.688 second using v1.01-cache-2.11-cpan-e1769b4cff6 )