From b4f952a0e374dd02ec4cdf940a8fadf8f537f433 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Wed, 5 Sep 2012 00:08:22 +0200 Subject: Add aliases. --- lib/FPanel/Interface.pm | 68 ++++++++++++++++++++++++++++++++++++- lib/FPanel/Login.pm | 6 ++-- template/add-alias.html | 84 ++++++++++++++++++++++++++++++++++++++++++++++ template/list-domains.html | 2 +- template/list-locals.html | 6 ++-- 5 files changed, 157 insertions(+), 9 deletions(-) create mode 100644 template/add-alias.html 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'; } diff --git a/template/add-alias.html b/template/add-alias.html new file mode 100644 index 0000000..38193c6 --- /dev/null +++ b/template/add-alias.html @@ -0,0 +1,84 @@ + + + + + Edit alias <TMPL_VAR NAME=ALIAS>@<TMPL_VAR NAME=DOMAIN> + + + + +
+ +

Add alias under

+ + +
Error:
+ +
+
+ +
+ +
+
+ + + +

+

Alias name

+ @ +

+ +
+ +

+

Status

+ +
+ Warning: emails are not delivered to inactive entries. +
+

+ +
+ +

+

Description

+ +
+ An optional description. (HTML tags are allowed.) +
+

+ +
+ +

+

Destination(s)

+ +
+ The list of destinations (one e-mail address per line) that + will receive mail for this alias. +
+

+ +
+ + + +
+
+ + diff --git a/template/list-domains.html b/template/list-domains.html index 4069ba0..bb29de5 100644 --- a/template/list-domains.html +++ b/template/list-domains.html @@ -19,7 +19,7 @@
-

Manage domains[add]

+

Manage domains[add]

diff --git a/template/list-locals.html b/template/list-locals.html index aa42bfd..b0aa2e4 100644 --- a/template/list-locals.html +++ b/template/list-locals.html @@ -29,7 +29,7 @@

Mailboxes[add][add]

@@ -64,7 +64,7 @@

Alias[add][add]

@@ -109,7 +109,7 @@

Lists[add][add]

-- cgit v1.2.3