diff options
Diffstat (limited to 'lib/Fripost/Schema/Alias.pm')
-rw-r--r-- | lib/Fripost/Schema/Alias.pm | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/Fripost/Schema/Alias.pm b/lib/Fripost/Schema/Alias.pm index 0976093..556a7d3 100644 --- a/lib/Fripost/Schema/Alias.pm +++ b/lib/Fripost/Schema/Alias.pm @@ -18,6 +18,8 @@ use utf8; use parent 'Fripost::Schema'; use Fripost::Schema::Misc qw/concat explode must_attrs email_valid/; +use Net::IDN::Encode qw/domain_to_ascii + email_to_ascii email_to_unicode/; =head1 METHODS @@ -33,7 +35,7 @@ is a array of hash references, sorted by alias. sub search { my $self = shift; - my $domain = shift; + my $domain = domain_to_ascii(shift); my %options = @_; my $concat = $options{'-concat'}; @@ -49,10 +51,11 @@ sub search { die $options{'-die'}."\n" if defined $options{'-die'}; die $aliases->error; } - return map { { alias => $_->get_value('fva') + return map { { alias => email_to_unicode($_->get_value('fva')) , isactive => $_->get_value('fripostIsStatusActive') eq 'TRUE' , description => concat($concat, $_->get_value('description')) - , maildrop => concat($concat, $_->get_value('fripostMaildrop')) + , maildrop => concat($concat, map { email_to_unicode ($_) } + $_->get_value('fripostMaildrop')) } } $aliases->sorted('fva') @@ -75,9 +78,8 @@ sub replace { if defined $a->{$_}; } - my ($l,$d) = split /\@/, $a->{alias}, 2; - eval { + my ($l,$d) = split /\@/, email_to_ascii($a->{alias}), 2; &_is_valid($a); my $mesg = $self->ldap->modify( "fva=$l,fvd=$d,".$self->suffix, @@ -108,13 +110,12 @@ sub add { if defined $a->{$_}; } - my ($l,$d) = split /\@/, $a->{alias}, 2; - eval { + my ($l,$d) = split /\@/, email_to_ascii($a->{alias}), 2; die "Missing alias name\n" if $l eq ''; &_is_valid($a); die "‘".$a->{alias}."‘ alread exists\n" - if $self->local->exists($l,$d,%options); + if $self->local->exists($a->{alias},%options); my %attrs = ( objectClass => 'FripostVirtualAlias' , fripostIsStatusActive => $a->{isactive} ? 'TRUE' : 'FALSE' @@ -135,7 +136,7 @@ sub add { } -=item B<delete> (I<alias>, I<domain>, I<OPTIONS>) +=item B<delete> (I<alias>, I<OPTIONS>) Delete the given alias. @@ -143,8 +144,7 @@ Delete the given alias. sub delete { my $self = shift; - my $l = shift; - my $d = shift; + my ($l,$d) = split /\@/, email_to_ascii(shift), 2; my %options = @_; my $mesg = $self->ldap->delete( "fva=$l,fvd=$d,".$self->suffix ); @@ -175,7 +175,7 @@ The B<-die> option, if present, overides LDAP croaks and errors. sub _is_valid { my $a = shift; must_attrs( $a, qw/alias isactive maildrop/ ); - email_valid( $a->{alias}, -exact => 1 ); + $a->{alias} = email_valid( $a->{alias}, -exact => 1 ); $a->{maildrop} = [ map { email_valid($_) } @{$a->{maildrop}} ]; # TODO: check for cycles? } |