App-CamelPKI
view release on metacpan or search on metacpan
lib/App/CamelPKI/CertTemplate.pm view on Meta::CPAN
certificate compliant in terms of the certificate policy.
=back
FIXME-TR: creuv�...
Noter que le principe de moindre privilège s'applique Ã
I<test_certificate_conflict>, et que la version de $db qu'il récupère
est en réalité une facette de la véritable base de données de CA, en
lecture seule et dont le contenu est de surcroît filtré sur la base
d'un I<need-to-know>: typiquement, I<test_certificate_conflict> ne
pourra voir que les certificats qu'il a lui-même fabriqués par le
passé.
The base class implementation is always happy, and always returns
the empty list.
=cut
sub test_certificate_conflict { return }
=head2 test_issued_certs_coherent( \%data1, \%data2, ... )
TODO-TR: stoppedhere
Doit se terminer avec succès si et seulement si le gabarit de
certificat considère qu'il est légitime d'émettre B<en une seule
transaction> les certificats dont les données nominatives figurent en
argument. I<test_issued_certs_coherent> doit se terminer
normalement s'il estime que les certificats qui seraient créés en
appelant C<prepare_certificate(%data1)>,
C<prepare_certificate(%data2)>, etc sont cohérents les uns avec les
autres, et lever une exception dans le cas contraire. L'AC prend
cette information en compte comme il est décrit dans
L<App::CamelPKI::CA/Cohérence>.
The base class implementation is always happy, and always ends
with success.
=cut
sub test_issued_certs_coherent { return }
=head1 METHODS PROVIDED BY THE BASE CLASS
Dans sa tâche d'implémenter les L</MÃTHODES à SURCHARGER>, le
programmeur est aidé par les méthodes suivantes, dont il bénéficie par
voie d'héritage:
=head2 normalize_opts($template, $key1 => $val1, ...)
Lorsqu'on invoque cette méthode (indifféremment de classe ou
d'instance) en contexte liste, elle renvoie la liste associative
passée en paramètre ($key1 => $val1, ...) après l'avoir «nettoyée» de
la façon suivante :
=over
=item *
les clefs ($key1, $key2, ...) qui ne valident pas l'expression
rationnelle qr/^[a-z0-9_]+$/i provoquent une exception; celles qui ne
font pas partie de la liste des clefs reconnues par $template (d'après
L<App::CamelPKI::CertTemplate/list_keys>) sont supprimées.
=item *
les valeurs ($val1, $val2, ...) doivent être soit des chaînes de
caractères soit des références sur des tableaux de chaînes de
caractères, et ne pas contenir C<undef>. Toutes les valeurs sont
chaînifiées, et si une même clef apparaît plusieurs fois dans la liste
d'arguments de I<normalize_opts> seule sa dernière occurence est prise
en compte.
=back
La valeur de retour est une liste associative dont toutes les valeurs
sont soit des vraies chaînes, soit des références vers des tableaux de
vraies chaînes (pas C<undef>, pas d'objet chaînifiable).
Cette méthode est également utilisée directement par L<App::CamelPKI::CA>
pour préparer les arguments avant d'infoquer
L</test_certificate_conflict> et L</test_issued_certs_coherent>; dans
ce cas, pour des raisons de sécurité, cette méthode doit être invoquée
B<explicitement> dans la classe de base à l'aide de l'idiome suivant :
=for My::Tests::Below "explicit class idiom" begin
my %opts = $template->App::CamelPKI::CertTemplate::normalize_opts(@opts);
=for My::Tests::Below "explicit class idiom" end
sans quoi le gabarit de certificat aurait le droit de modifier
l'implémentation de cette méthode à sa guise.
=cut
sub normalize_opts {
throw App::CamelPKI::Error::Internal("WRONG_NUMBER_ARGS")
unless (@_ % 2);
my ($self, %opts) = @_;
return map {
throw App::CamelPKI::Error::Internal("INCORRECT_ARGS",
-details => "Wrong key $_")
unless m/^([a-z0-9_]+)$/i;
my $k = $1; # Déteinté
if (! defined $opts{$k}) {
throw App::CamelPKI::Error::Internal
("INCORRECT_ARGS",
-details => "Undef value for $k not allowed");
} elsif (ref($opts{$k}) eq "ARRAY") {
( $k => [ map {
defined or throw App::CamelPKI::Error::Internal
("INCORRECT_ARGS",
-details => "Undef value found in value list for $k");
"$_";
} @{$opts{$k}} ] );
} else {
( $k => "$opts{$k}" );
}
} ($self->list_keys);
}
( run in 0.465 second using v1.01-cache-2.11-cpan-5735350b133 )