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;