aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem.moulin@fripost.org>2012-09-05 00:08:22 +0200
committerGuilhem Moulin <guilhem.moulin@fripost.org>2012-09-05 00:09:00 +0200
commitb4f952a0e374dd02ec4cdf940a8fadf8f537f433 (patch)
tree2f40cf727374b2c3b7ed27e14587a0367a1d227f /lib
parentd455b5b2f060ce97d5f59161bcf3e2344f1fd110 (diff)
Add aliases.
Diffstat (limited to 'lib')
-rw-r--r--lib/FPanel/Interface.pm68
-rw-r--r--lib/FPanel/Login.pm6
2 files changed, 69 insertions, 5 deletions
diff --git a/lib/FPanel/Interface.pm b/lib/FPanel/Interface.pm
index 5945ea9..f9a1358 100644
--- a/lib/FPanel/Interface.pm
+++ b/lib/FPanel/Interface.pm
@@ -311,7 +311,7 @@ sub EditLocal : Runmode {
my $authzDN = "fvu=$l,fvd=$d,". $suffix;
my $ldap = $self->ldap_from_auth_user($authzDN);
- my ($null,$domainname,$localname,$crap) = (split /\//, $ENV{PATH_INFO}, 4);
+ my ($null,$domainname,$localname,$crap) = split /\//, $ENV{PATH_INFO}, 4;
my $error; # Tells wether the change submission has fails.
if (defined $self->query->param('submit')) {
@@ -453,6 +453,72 @@ sub EditLocal : Runmode {
}
+# In this Run Mode authenticated users can add mailboxes, aliases and
+# lists (if they have the permission).
+sub AddLocal : Runmode {
+ my $self = shift;
+ my %CFG = $self->cfg;
+ my $suffix = join ',', @{$CFG{ldap_suffix}};
+
+ my ($l,$d) = split /@/, $self->authen->username, 2;
+ my $authzDN = "fvu=$l,fvd=$d,". $suffix;
+ my $ldap = $self->ldap_from_auth_user($authzDN);
+
+ my $domainname = (split /\//, $ENV{PATH_INFO}, 3)[1];
+ my $localname;
+
+ my $error;
+ my $q = $self->query;
+ if (defined $self->query->param('submit')) {
+ # A new alias has been submitted: process it
+ my %new;
+ $localname = $q->param('alias');
+ $new{objectClass} = 'FripostVirtualAlias';
+ $new{fripostIsStatusActive} = $q->param('status') eq 'active' ?
+ 'TRUE' : 'FALSE';
+ $new{fripostOwner} = $authzDN;
+ if (defined $q->param('description')) {
+ my @desc;
+ foreach my $d (split /\n/, $q->param('description')) {
+ push @desc, $d;
+ }
+ $new{description} = [ @desc ] if @desc;
+ }
+ if (defined $q->param('maildrop')) {
+ my @maildrop;
+ foreach my $d (split /\n/, $q->param('maildrop')) {
+ $d =~ s/\s//g; # lowercase and strip out the spaces
+ push @maildrop, (lc $d) unless $d =~ /^$/;
+ }
+ $new{fripostMaildrop} = [ @maildrop ] if @maildrop;
+
+ }
+ # TODO: more checks
+ my $mesg = $ldap->add( "fva=$localname,fvd=$domainname,$suffix",
+ attrs => [ %new ] );
+ if ($mesg->code) {
+ $error = $mesg->error;
+ }
+ else {
+ return $self->redirect($q->url .'/'. $domainname .'/');
+ }
+ }
+
+ my $template = $self->load_tmpl( 'add-alias.html', cache => 1, utf8 => 1 );
+ $template->param( URL => $self->query->url );
+ $template->param( DOMAIN => $domainname );
+ $template->param( USER_LOCALPART => $l, USER_DOMAINPART => $d);
+ if (defined $error) {
+ $template->param( ALIAS => $q->param('alias') );
+ $template->param( ISACTIVE => $q->param('status') eq 'active');
+ $template->param( DESCRIPTION => join ("\n",$q->param('description')) );
+ $template->param( MAILDROP => join ("\n",$q->param('maildrop')) );
+ $template->param( ERROR => $error );
+ }
+ return $template->output;
+}
+
+
# This subroutine displays the access that the given DN has on the entry
# (long version). Possible values are :
# - "can create aliases" (a)
diff --git a/lib/FPanel/Login.pm b/lib/FPanel/Login.pm
index e21ef77..9be724a 100644
--- a/lib/FPanel/Login.pm
+++ b/lib/FPanel/Login.pm
@@ -108,7 +108,7 @@ sub setup {
unless (defined $domain and $domain ne '') {
if (defined $a) {
- return 'AddDomain' if $a eq 'AddDomain';
+ return 'AddDomain' if $a eq 'add';
}
return 'ListDomains';
}
@@ -116,9 +116,7 @@ sub setup {
unless (defined $local and $local ne '') {
if (defined $a) {
return 'EditDomain' if $a eq 'edit';
- return 'AddAccount' if $a eq 'AddAccount';
- return 'AddAlias' if $a eq 'AddAlias';
- return 'AddList' if $a eq 'AddList';
+ return 'AddLocal' if $a eq 'add';
}
return 'ListLocals';
}