From eaacbeb2d5fece7fe9cab570f262a8f29be96863 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Mon, 10 Sep 2012 20:01:06 +0200 Subject: Internationalization. --- lib/Fripost/Schema/Mailbox.pm | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'lib/Fripost/Schema/Mailbox.pm') diff --git a/lib/Fripost/Schema/Mailbox.pm b/lib/Fripost/Schema/Mailbox.pm index 28ef376..c7d93a2 100644 --- a/lib/Fripost/Schema/Mailbox.pm +++ b/lib/Fripost/Schema/Mailbox.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,12 +35,12 @@ output is a array of hash references, sorted by mailbox. sub search { my $self = shift; - my $domain = shift; + my $d = domain_to_ascii(shift); my %options = @_; my $concat = $options{'-concat'}; my $mailboxes = $self->ldap->search( - base => "fvd=$domain,".$self->suffix, + base => "fvd=$d,".$self->suffix, scope => 'one', deref => 'never', filter => 'objectClass=FripostVirtualMailbox', @@ -50,10 +52,11 @@ sub search { die $options{'-die'}."\n" if defined $options{'-die'}; die $mailboxes->error; } - return map { { user => $_->get_value('fvu') + return map { { user => email_to_unicode($_->get_value('fvu')) , isactive => $_->get_value('fripostIsStatusActive') eq 'TRUE' , description => concat($concat, $_->get_value('description')) - , forwards => concat($concat, $_->get_value('fripostOptionalMaildrop')) + , forwards => concat($concat, map { email_to_unicode($_) } + $_->get_value('fripostOptionalMaildrop')) , quota => $_->get_value('fripostMailboxQuota') // undef } } @@ -77,9 +80,8 @@ sub replace { if defined $m->{$_}; } - my ($l,$d) = split /\@/, $m->{user}, 2; - eval { + my ($l,$d) = split /\@/, email_to_ascii($m->{user}), 2; &_is_valid($m); my $mesg = $self->ldap->modify( "fvu=$l,fvd=$d,".$self->suffix, @@ -103,7 +105,7 @@ may want to hash it before hand. sub passwd { my $self = shift; - my ($l,$d) = split /\@/, shift, 2; + my ($l,$d) = split /\@/, email_to_ascii(shift), 2; my $pw = shift; my %options = @_; @@ -131,13 +133,12 @@ sub add { if defined $m->{$_}; } - my ($l,$d) = split /\@/, $m->{user}, 2; - eval { + my ($l,$d) = split /\@/, email_to_ascii($m->{user}), 2; die "Missing user name\n" if $l eq ''; &_is_valid($m); die "‘".$m->{user}."‘ alread exists\n" - if $self->local->exists($l,$d,%options); + if $self->local->exists($m->{user},%options); my %attrs = ( objectClass => 'FripostVirtualMailbox' , fripostIsStatusActive => $m->{isactive} ? 'TRUE' : 'FALSE' @@ -160,7 +161,7 @@ sub add { } -=item B (I, I, I) +=item B (I, I) Delete the given mailbox. Note: this will NOT wipe the mailbox off the disk, but merely delete its entry in the LDAP directory. @@ -169,8 +170,7 @@ disk, but merely delete its entry in the LDAP directory. 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( "fvu=$l,fvd=$d,".$self->suffix ); @@ -201,7 +201,7 @@ The B<-die> option, if present, overides LDAP croaks and errors. sub _is_valid { my $m = shift; must_attrs( $m, qw/user isactive/ ); - email_valid( $m->{user}, -exact => 1); + $m->{user} = email_valid( $m->{user}, -exact => 1); $m->{forwards} = [ map { email_valid($_) } @{$m->{forwards}} ]; # TODO: match 'quota' against the Dovecot specifications } -- cgit v1.2.3