From cc2eac1dcd3991e036875931fb78c609ff9dbbea Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Sat, 1 Sep 2012 01:50:40 +0200 Subject: First try. --- lib/FPanel/Interface.pm | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 lib/FPanel/Interface.pm (limited to 'lib/FPanel/Interface.pm') diff --git a/lib/FPanel/Interface.pm b/lib/FPanel/Interface.pm new file mode 100644 index 0000000..adac0f0 --- /dev/null +++ b/lib/FPanel/Interface.pm @@ -0,0 +1,118 @@ +package FPanel::Interface; + +use strict; +use warnings; +use utf8; + +use lib 'lib'; +use base 'FPanel::Login'; + +sub cgiapp_init { + my $self = shift; + + $self->SUPER::cgiapp_init; + + # define runmodes (pages) that require successful login: + $self->authen->protected_runmodes( ':all' ); +} + +sub index : Runmode { + my $self = shift; + my $template = $self->load_tmpl("index.html"); + my $domain = (split /\//, $ENV{PATH_INFO},3)[1]; + $template->param({ + NAME => 'INDEX', + URL => $self->query->url(), + MYDOMAIN => $domain, + USER => $self->authen->username, + }); + return $template->output; +} + +sub DomainList : StartRunmode { + my $self = shift; + + my ($u,$d) = split /@/, $self->authen->username, 2; + my $dn = "fvu=$u,fvd=$d,ou=virtual,o=mailHosting,dc=fripost,dc=dev"; + + my $ldap = Net::LDAP->new( 'ldap://127.0.0.1:389', + , async => 1, + , onerror => 'die' + ); + my $sasl = Authen::SASL->new( mechanism => 'DIGEST-MD5' + , callback => { user => 'FPanel' + , pass => 'panel' + , authname => "dn:$dn" } + ); + my $mesg = $ldap->bind( sasl => $sasl ) ; + die $mesg->error if $mesg->code; + + my $domains = $ldap->search( base => "ou=virtual,o=mailHosting,dc=fripost,dc=dev" + , scope => 'one' + , filter => 'objectClass=FripostVirtualDomain' + , deref => 'never' + ); + die $domains->error if $domains->code; + + + my $template = $self->load_tmpl("domain-list.html"); + my $url = $self->query->url(); + $template->param( URL => $url ); + $template->param( USER_LOCALPART => $u, USER_DOMAINPART => $d); + my $i = 1; + $template->param( DOMAIN => [ + map { $i = 1-$i; + { DOMAIN => $_->get_value('fvd') + , PERMS => &list_perms($_, $dn) + , DESCRIPTION => join ("\n", $_->get_value('description')) + , ISACTIVE => $_->get_value('fripostIsStatusActive') eq 'TRUE' ? 1 : 0 + , URL => $url + , ODD => $i + }; + } + $domains->sorted('fvd') + ]); + return $template->output; +} + +sub list_perms { + my ($entry, $dn) = @_; + my $perms = ''; + + my $canCreateAlias = $entry->get_value ('fripostCanCreateAlias', asref => 1); + $perms .= 'a' + if defined $canCreateAlias and + grep { $dn eq $_ or (split /,/,$dn,2)[1] eq $_ } + @{$canCreateAlias}; + + my $canCreateList = $entry->get_value ('fripostCanCreateList', asref => 1); + $perms .= 'l' + if defined $canCreateList and + grep { $dn eq $_ or (split /,/,$dn,2)[1] eq $_ } + @{$canCreateList}; + + my $owner = $entry->get_value ('fripostOwner', asref => 1); + $perms = 'o' + if defined $owner and grep { $dn eq $_ } @{$owner}; + + my $postmaster = $entry->get_value ('fripostPostmaster', asref => 1); + $perms = 'p' + if defined $postmaster and grep { $dn eq $_ } @{$postmaster}; + + if ( $perms =~ /a/) { + return 'can create aliases & lists' if ( $perms =~ /l/); + return 'can create aliases'; + } + elsif ( $perms eq 'l' ) { + return 'can create lists'; + } + elsif ( $perms eq 'o' ) { + return 'owner'; + } + elsif ( $perms eq 'p' ) { + return 'postmaster'; + } +} + +1; + -- cgit v1.2.3