aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Fripost/Schema/List.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Fripost/Schema/List.pm')
-rw-r--r--lib/Fripost/Schema/List.pm37
1 files changed, 23 insertions, 14 deletions
diff --git a/lib/Fripost/Schema/List.pm b/lib/Fripost/Schema/List.pm
index e6605f0..58d198c 100644
--- a/lib/Fripost/Schema/List.pm
+++ b/lib/Fripost/Schema/List.pm
@@ -18,7 +18,7 @@ use utf8;
use parent 'Fripost::Schema';
use Fripost::Schema::Misc qw/concat explode must_attrs email_valid
- split_addr/;
+ split_addr canonical_dn ldap_explode_dn/;
use Net::IDN::Encode qw/domain_to_ascii
email_to_ascii email_to_unicode/;
use Mail::GnuPG;
@@ -47,7 +47,7 @@ sub search {
if (defined $options{'-is_pending'}) and !$options{'-is_pending'};
my $lists = $self->ldap->search(
- base => "fvd=$domain,".$self->suffix,
+ base => canonical_dn({fvd => $domain}, @{$self->suffix}),
scope => 'one',
deref => 'never',
filter => $filter,
@@ -85,13 +85,13 @@ sub replace {
if defined $l->{description};
eval {
- my ($l2,$d) = split /\@/, email_to_ascii($l->{list}), 2;
+ my ($l2,$d) = split_addr( $l->{list}, -encoding => 'ascii' );
&_is_valid($l);
my $l3 = { fripostIsStatusActive => $l->{isactive} ? 'TRUE' : 'FALSE'
, description => $l->{description} };
$l3->{fripostListManager} = $l->{transport} if defined $l->{transport};
my $mesg = $self->ldap->modify(
- "fvl=$l2,fvd=$d,".$self->suffix,
+ canonical_dn({fvl => $l2}, {fvd => $d}, @{$self->suffix}),
replace => $l3 );
die $mesg->error."\n" if $mesg->code;
};
@@ -133,8 +133,8 @@ sub add {
$attrs{description} = $l->{description}
if defined $l->{description} and @{$l->{description}};
- my $mesg = $self->ldap->add( "fvl=$l2,fvd=$d,".$self->suffix,
- attrs => [ %attrs ] );
+ my $dn = canonical_dn({fvl => $l2}, {fvd => $d}, @{$self->suffix});
+ my $mesg = $self->ldap->add( $dn, attrs => [ %attrs ] );
if ($mesg->code) {
die $options{'-die'}."\n" if defined $options{'-die'};
die $mesg->error."\n";
@@ -143,11 +143,16 @@ sub add {
return $@ if $@;
# Ask the list manager to create the list now.
- my $member = $self->whoami;
- $member =~ s/^fvu=([^,]+),fvd=([^,]+),.*$/$1\@$2/;
+
+ my $whoami = ldap_explode_dn( $self->whoami );
+ my $member = email_valid( $whoami->[0]->{fvu} .'@'. $whoami->[1]->{fvd}
+ , -exact => 1 );
+ my $to = email_valid( 'mklist+'.$l->{transport}.'@fripost.org'
+ , -exact => 1 );
+
my $mail = MIME::Entity::->build(
From => 'Fripost Admin Panel <AdminWebPanel@fripost.org>',
- To => 'mklist+'.$l->{transport}.'@fripost.org',
+ To => $to,
Subject => "New ".$l->{transport}." list",
Encoding => 'quoted-printable',
Charset => 'utf-8',
@@ -175,8 +180,9 @@ sub is_pending {
my ($l,$d) = split_addr( shift, -encoding => 'ascii' );
my %options = @_;
+ my $dn = canonical_dn({fvl => $l}, {fvd => $d}, @{$self->suffix});
my $mesg = $self->ldap->search(
- base => "fvl=$l,fvd=$d,".$self->suffix,
+ base => $dn,
scope => 'base',
deref => 'never',
filter => 'objectClass=FripostVirtualList',
@@ -209,14 +215,16 @@ sub add_commands {
my $mesg;
foreach my $cmd (@$cmds) {
- $mesg = $self->ldap->add( "fvlc=$l-$cmd,fvl=$l,fvd=$d,".$self->suffix,
+ my $dn = canonical_dn( {fvlc => $l.'-'.$cmd}, {fvl => $l}, {fvd => $d},
+ @{$self->suffix} );
+ $mesg = $self->ldap->add( $dn,
attrs => [ objectClass => 'FripostVirtualListCommand',
FripostLocalAlias => $l.'-'.$cmd.'#'.$d ] );
last if $mesg->code;
}
- $mesg = $self->ldap->modify( "fvl=$l,fvd=$d,".$self->suffix,
- , delete => 'fripostIsStatusPending' )
+ my $dn = canonical_dn( {fvl => $l}, {fvd => $d}, @{$self->suffix} );
+ $mesg = $self->ldap->modify( $dn, delete => 'fripostIsStatusPending' )
unless $mesg->code;
if ($mesg->code) {
@@ -238,7 +246,8 @@ sub delete {
my ($l,$d) = split_addr( shift, -encoding => 'ascii' );
my %options = @_;
- my $mesg = $self->ldap->delete( "fvl=$l,fvd=$d,".$self->suffix );
+ my $dn = canonical_dn( {fvl => $l}, {fvd => $d}, @{$self->suffix} );
+ my $mesg = $self->ldap->delete( $dn );
if ($mesg->code) {
if (defined $options{'-die'}) {
return $mesg->error unless $options{'-die'};