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 ++--- 2 files changed, 69 insertions(+), 5 deletions(-) (limited to 'lib') 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'; } -- cgit v1.2.3