diff options
Diffstat (limited to 'lib/Fripost/Schema/Domain.pm')
-rw-r--r-- | lib/Fripost/Schema/Domain.pm | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/lib/Fripost/Schema/Domain.pm b/lib/Fripost/Schema/Domain.pm index e8da9a5..ce7b900 100644 --- a/lib/Fripost/Schema/Domain.pm +++ b/lib/Fripost/Schema/Domain.pm @@ -154,10 +154,10 @@ current user to read or even search anything, though. The default is to retrieve every visible attribute, unless in void context where B<-keys> is set to [] that is, no attribute is sent back to the client. -=item B<-assert-exists> +=item B<-count> -A custom error to be raised on empty result sets. When 0, it makes the -method returns the size of the result set. +Returns the number of entries in the result set. The B<-keys> option is +bypassed not to ask any attribute from the server. =item B<-sort> => 0|1 @@ -212,9 +212,7 @@ sub search { ); ldap_error($domains, %options) // return; - softdie ($options{'-assert-exists'}, %options) // return - unless $domains->count; - return $domains->count if exists $options{'-assert-exists'}; + return $domains->count if $options{'-count'}; &_entries_to_domains( $self->whoami, $options{'-keys'} // [], wantarray ? ( $options{'-sort'} ? $domains->sorted('fvd') @@ -500,9 +498,9 @@ sub add { my $dn = $self->mail2dn( $domain->{name} ); # Search for an existing domain with the same name. - my $exists = $self->search($domain->{name}, %options, '-assert-exists' => 0); + my $count = $self->search($domain->{name}, %options, '-count' => 1); softdie ( "Domain ‘".$domainname."’ already exists.", %options ) // return - if not $options{'-append'} and $exists; + if not $options{'-append'} and $count; # Stop here in dry-run mode. return 1 if $options{'-dry-run'}; @@ -511,7 +509,7 @@ sub add { Fripost::Schema::Util::clean_ldap_entry( \%attrs ); my ($mesg, $token); - if ($options{'-append'} and $exists) { + if ($options{'-append'} and $count) { # Replace single valued attributes; Add other attributes. my %unique = ( fripostIsStatusActive => $attrs{fripostIsStatusActive} ); delete $attrs{$_} for (keys %unique); @@ -607,6 +605,16 @@ sub _domain_to_entry { Unlock the pending I<domainname>, locked with I<token>. +The following options are considered: + +=over 4 + +=item B<-dry-run> => 0|1 + +Merely simulate the unlock. I<token> is still checked to be a valid code. + +=back + Errors can be caught with options B<-die> and B<-error>, see B<Fripost::Schema::Util> for details. @@ -631,6 +639,7 @@ sub unlock { "Wrong unlock code for ‘".$domainname."’" }; ldap_error($mesg, %options, -die => $catch) // return; + return 1 if $options{'-dry-run'}; $mesg = $self->ldap->modify( $dn, delete => { 'objectClass' => 'FripostPendingEntry' @@ -648,6 +657,15 @@ sub unlock { Replace an existing domain with the given one. +=over 4 + +=item B<-dry-run> => 0|1 + +Merely simulate the replacement. I<domain> is still checked to be a +valid domain in the above representation. + +=back + Errors can be caught with options B<-die> and B<-error>, see B<Fripost::Schema::Util> for details. @@ -662,6 +680,8 @@ sub replace { return if $options{'-error'} && ${$options{'-error'}}; &_is_valid($domain, %options); + return 1 if $options{'-dry-run'}; + my %entry = $self->_domain_to_entry (%$domain); my $mesg = $self->ldap->modify( $self->mail2dn($domain->{name}) , replace => \%entry ); |