From e5b9a012d97711fafab6c3f1ed0551b24aad0244 Mon Sep 17 00:00:00 2001 From: Brian Read Date: Fri, 18 Oct 2024 11:46:27 +0100 Subject: [PATCH] * Fri Oct 18 2024 Brian Read 11.0.0-28.sme - Add in emailsettings for port 25,465 and 587 [SME: 12750] - Comment out change to localhost for roundcube in _user_list email icon setting [SME: 12751] --- .../lib/SrvMngr/Controller/Emailsettings.pm | 182 ++++++++++++++---- .../default/templates/emailreceive.html.ep | 64 +++++- .../default/templates/emailsettings.html.ep | 42 ++-- .../templates/partials/_usr_list.html.ep | 2 +- smeserver-manager.spec | 6 +- 5 files changed, 242 insertions(+), 54 deletions(-) diff --git a/root/usr/share/smanager/lib/SrvMngr/Controller/Emailsettings.pm b/root/usr/share/smanager/lib/SrvMngr/Controller/Emailsettings.pm index babf89b..60d28e6 100644 --- a/root/usr/share/smanager/lib/SrvMngr/Controller/Emailsettings.pm +++ b/root/usr/share/smanager/lib/SrvMngr/Controller/Emailsettings.pm @@ -12,6 +12,9 @@ use strict; use warnings; use Mojo::Base 'Mojolicious::Controller'; +use constant FALSE => 0; +use constant TRUE => 1; + use Locale::gettext; use SrvMngr::I18N; @@ -36,7 +39,7 @@ sub main { my $title = $c->l('mai_FORM_TITLE'); $mai_datas{'trt'} = 'LIST'; - $mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method'); + $mai_datas{fetchmailmethod} = $c->l($cdb->get_prop('fetchmail', 'Method')); $c->stash( title => $title, notif => '', mai_datas => \%mai_datas ); $c->render(template => 'emailsettings'); @@ -56,11 +59,12 @@ sub do_display { my ($notif, $dest) = ''; $mai_datas{'trt'} = $trt; + $cdb = esmith::ConfigDB->open || die "Couldn't open config db"; - if ( $trt eq 'ACC' ) + if ( $trt eq 'ACC' ) { - $dest = 'emailaccess'; - $mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method'); + $dest = 'emailaccess'; + $mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method'); } if ( $trt eq 'FIL' ) @@ -119,6 +123,7 @@ sub do_update { my %mai_datas = (); $mai_datas{trt} = $trt; + $cdb = esmith::ConfigDB->open || die "Couldn't open config db"; my $title = $c->l('mai_FORM_TITLE'); @@ -234,7 +239,6 @@ sub do_update { }; - sub get_virus_status { my ($c, $localise) = @_; @@ -262,10 +266,10 @@ sub localise_status { } -sub get_prop { +sub get_db_prop { my ($c, $item, $prop, $default) = @_; - + return $cdb->get_prop($item, $prop) || $default; } @@ -377,6 +381,48 @@ sub get_current_imap_access { } +sub get_current_smtp_ssl_auth { + my ($c, $localise, $soru, $debug) = @_; + die "Error: \$soru must be either 's' or 'u':$soru.\n" unless $soru eq 's' || $soru eq 'u'; + + $cdb = esmith::ConfigDB->open || die "Couldn't open config db"; + + # Initialize variables with default values + my $smtpStatus = 'none'; + my $smtpAccess = 'none'; + my $smtpAuth = 'disabled'; # assuming 'disabled' as a default + + + + # Fetch SMTP settings based on the value of `$soru` + if ($soru eq "u") { + $smtpStatus = $cdb->get_prop('uqpsmtpd', 'status') || 'enabled'; # Fetch from uqpsmtpd + $smtpAccess = $cdb->get_prop('uqpsmtpd', 'access') || 'public'; + $smtpAuth = 'enabled'; # Assuming authentication is enabled in this context + } else { + $smtpStatus = $cdb->get_prop('sqpsmtpd', 'status') || 'enabled'; # Fetch from sqpsmtpd + $smtpAccess = $cdb->get_prop('sqpsmtpd', 'access') || 'public'; + $smtpAuth = 'enabled'; # Assuming authentication is enabled in this context + } + + # Retrieve SMTP SSL authentication options + my $options = $c->get_smtp_ssl_auth_options(); + + + if ($soru eq "u" && $debug ) { + $c->stash('smtp'=>[$smtpStatus,$smtpAccess,$smtpAuth,$soru,$options->{$smtpAccess},$c->l($options->{$smtpAccess})]); +# die "Stop $soru in get_current_smtp_ssl_auth"; + } + + + # Return appropriate message based on SMTP settings + if ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled') { + return $localise ? $c->l($options->{$smtpAccess}) : $smtpAccess; + } + + return $localise ? $c->l($options->{disabled}) : 'disabled'; +} + sub get_current_smtp_auth { my ($c, $localise) = @_; @@ -384,16 +430,13 @@ sub get_current_smtp_auth { my $smtpStatus = $cdb->get_prop('qpsmtpd', 'status') || 'enabled'; my $smtpAuth = $cdb->get_prop('qpsmtpd', 'Authentication') || 'enabled'; - my $smtpsStatus = $cdb->get_prop('sqpsmtpd', 'status') || 'enabled'; - my $smtpsAuth = $cdb->get_prop('sqpsmtpd', 'Authentication') || 'enabled'; - my $options = get_smtp_auth_options(); - if ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled') + if ($smtpStatus eq 'enabled' && $smtpAuth eq 'disabled') { return $localise ? $c->l($options->{public}) : 'public'; } - elsif ($smtpsStatus eq 'enabled' && $smtpsAuth eq 'enabled') + elsif ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled') { return $localise ? $c->l($options->{publicSSL}) : 'publicSSL'; } @@ -401,6 +444,8 @@ sub get_current_smtp_auth { } + + sub get_current_webmail_status { my ($c, $localise) = @_; @@ -500,13 +545,58 @@ sub get_imap_options { } +sub get_smtp_auth_opt { + + my $c = shift; + + return [[ $c->l('mai_SECURE_SMTP') => 'publicSSL'], + [ $c->l('Only allow insecure access') => 'public'], + [ $c->l('DISABLED') => 'disabled'] + ]; +} + sub get_smtp_auth_options { my $c = shift; - my %options = ( disabled => 'DISABLED', publicSSL => 'mai_SECURE_SMTP', public => 'mai_INSECURE_SMTP'); + my %options = ( publicSSL => 'mai_SECURE_SMTP', public => 'Only allow insecure access',disabled => 'DISABLED'); - \%options; + return \%options; +} + + +sub get_smtp_ssl_auth_options { + + my $c = shift; + + my %options = ( public => 'Allow public access', local => 'Allow local access only',disabled => 'DISABLED'); + + return \%options; +} +sub get_smtp_ssl_auth_opt { + + my $c = shift; + + return [[ $c->l('Allow public access') => 'public'], + [ $c->l('Allow local access only') => 'local'], + [ $c->l('DISABLED') => 'disabled'] + ]; +} + +sub get_key_by_value { + my ($hash_ref, $target_value) = @_; + + # Iterate over the hash + while (my ($key, $value) = each %$hash_ref) { + return $key if $value eq $target_value; + } + + return undef; # Return undef if no match is found +} +sub get_value_by_key { + my ($hash_ref, $key) = @_; + + return $hash_ref->{$key}; # Return the value associated with the key } @@ -546,15 +636,6 @@ sub get_retrieval_opt { } -sub get_smtp_auth_opt { - - my $c = shift; - - return [[ $c->l('DISABLED') => 'disabled'], - [ $c->l('mai_SECURE_SMTP') => 'publicSSL'], - [ $c->l('mai_INSECURE_SMTP') => 'public']]; -} - sub get_emailunknownuser_options { @@ -710,18 +791,47 @@ sub change_settings_reception { } } - my $smtpAuth = ($c->param('SMTPAuth') || 'public'); - if ($smtpAuth eq 'public') { - $cdb->set_prop("qpsmtpd", "Authentication", "enabled" ); - $cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); - } elsif ($smtpAuth eq 'publicSSL') { - $cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); - $cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); - } else { - $cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); - $cdb->set_prop("sqpsmtpd", "Authentication", "disabled" ); - } + # Need code here for all 3 options - 25, 465 ad 587 + # Options for 25 are enabled and disabled + # for 465 and 587 are (access) public, local and (status) disabled + + + #my $smtpAuth = ($c->param('SMTPAuth') || 'public'); + #if ($smtpAuth eq 'public') { + #$cdb->set_prop("qpsmtpd", "Authentication", "enabled" ); + #$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); + #} elsif ($smtpAuth eq 'publicSSL') { + #$cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); + #$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); + #} else { + #$cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); + #$cdb->set_prop("sqpsmtpd", "Authentication", "disabled" ); + #} + my @keys = qw(qpsmtpd uqpsmtpd sqpsmtpd); + + foreach my $key (@keys) { + my $param_name = $key eq 'qpsmtpd' ? 'SMTPAuth' + : $key eq 'uqpsmtpd' ? 'uSMTPAuth' + : 'sSMTPAuth'; # Defaults to 'sSMTPAuth' for 'sqpsmtpd' + my $SMTPAuth = $c->param($param_name); + if ($SMTPAuth eq 'disabled') { + $cdb->set_prop($key, 'status', 'disabled'); + $cdb->set_prop($key, 'access', 'disabled'); + } else { + $cdb->set_prop($key, 'status', 'enabled'); + if ($key eq 'qpsmtpd') { + my $auth_status = $SMTPAuth eq 'publicSSL' ? 'enabled' : 'disabled'; + $cdb->set_prop($key, 'Authentication', $auth_status); + $cdb->set_prop($key, 'access', 'public'); + } else { + $cdb->set_prop($key, 'Authentication', 'enabled'); + my $auth_key = ($key eq 'uqpsmtpd') ? 'uSMTPAuth' : 'sSMTPAuth'; + my $access_value = $c->param($auth_key) eq 'public' ? 'public' : 'local'; + $cdb->set_prop($key, 'access', $access_value); + } + } + } unless ( system( "/sbin/e-smith/signal-event", "email-update" ) == 0 ) { return $c->l('mai_ERROR_UPDATING_CONFIGURATION'); @@ -762,7 +872,7 @@ sub change_settings_delivery { sub change_settings_access { my $c = shift; - $cdb = esmith::ConfigDB->open || die "Couldn't open config db"; + $cdb = esmith::ConfigDB->open || die "Couldn't open config db"; my $pop3Access = ($c->param('POPAccess') || 'private'); if ($pop3Access eq 'disabled') { @@ -919,4 +1029,4 @@ sub validate_smarthost { } -1; +1; \ No newline at end of file diff --git a/root/usr/share/smanager/themes/default/templates/emailreceive.html.ep b/root/usr/share/smanager/themes/default/templates/emailreceive.html.ep index e5cc1ee..e81c912 100644 --- a/root/usr/share/smanager/themes/default/templates/emailreceive.html.ep +++ b/root/usr/share/smanager/themes/default/templates/emailreceive.html.ep @@ -1,12 +1,17 @@ % layout 'default', title => "Sme server 2 - emailreceive"; % content_for 'module' => begin + +% use constant FALSE => 0; +% use constant TRUE => 1; +
% if ($config->{debug} == 1) {

%= dumper $c->current_route %= dumper $mai_datas + %= dumper $c->param('SMTPAuth')

% } @@ -26,16 +31,65 @@ %=l 'mai_LABEL_MODE' % param 'FetchmailMethod' => $mai_datas->{fetchmailmethod} unless param 'FetchmailMethod'; + %= select_field 'FetchmailMethod' => $c->get_retrieval_opt(), class => 'input'

- %=l 'mai_DESC_SMTP_AUTH_CONTROL' + %#=l 'mai_DESC_SMTP_AUTH_CONTROL' +
+ %= l "SMTP port (25) main purpose is to receive emails from another server, STARTTLS is always offered, but auth if offered is only if STARTTLS is also used by client." +
+ %= l "SMTPS port (465) will require implicit SSL/TLS then authenticate to send." +
+ %= l "SMTP Submission port (587) will require STARTTLS, then authenticate to send." +
+ % my $smtp_mesg=l('SMTP port %u allow client to authenticate:');

- %=l 'mai_LABEL_SMTP_AUTH_CONTROL' + %= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25)); - % param 'SMTPAuth' => $c->get_current_smtp_auth() unless param 'SMTPAuth'; - %= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input' + % param 'SMTPAuth' => $c->get_current_smtp_auth( FALSE ) unless param 'SMTPAuth'; + + %= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input' +

+ + % my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:'); +

+ %= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465)); + + % param 'sSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'s', TRUE) unless param 'sSMTPAuth'; + + %= select_field 'sSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input' +

+ + %my $smtp_mesg=l('Submission port %u status:'); +

+ %= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587)); + + % param 'uSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE) unless param 'uSMTPAuth'; + + %= select_field 'uSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input'


@@ -110,4 +164,4 @@ % end
-%end +%end \ No newline at end of file diff --git a/root/usr/share/smanager/themes/default/templates/emailsettings.html.ep b/root/usr/share/smanager/themes/default/templates/emailsettings.html.ep index d3f7047..5e24841 100644 --- a/root/usr/share/smanager/themes/default/templates/emailsettings.html.ep +++ b/root/usr/share/smanager/themes/default/templates/emailsettings.html.ep @@ -1,9 +1,13 @@ % layout 'default', title => "Sme server 2 - emailsettings"; % content_for 'module' => begin + +% use constant FALSE => 0; +% use constant TRUE => 1; +
- % if ($config->{debug} == 1) { + % if ($config->{debug} == TRUE) {

%= dumper $c->current_route %= dumper $mai_datas @@ -22,19 +26,19 @@

%=l 'mai_LABEL_POP_ACCESS_CONTROL' - %= $c->get_current_pop3_access( 1 ) + %= $c->get_current_pop3_access( TRUE )

%=l 'mai_LABEL_IMAP_ACCESS_CONTROL' - %= $c->get_current_imap_access( 1 ) + %= $c->get_current_imap_access( TRUE )

%=l 'mai_LABEL_WEBMAIL' - %= $c->get_current_webmail_status( 1 ) + %= $c->get_current_webmail_status( TRUE )

% my $btn = l('mai_DESC_STATE_ACCESS_BUTTON'); @@ -51,19 +55,19 @@

%=l 'mai_LABEL_VIRUS_SCAN' - %= $c->get_virus_status(1) + %= $c->get_virus_status(TRUE)

%=l 'mai_LABEL_SPAM_SCAN' - %= $c->get_spam_status(1) + %= $c->get_spam_status(TRUE)

%=l 'mai_LABEL_BLOCK_EXECUTABLE_CONTENT' - %= $c->get_patterns_status(1) + %= $c->get_patterns_status(TRUE)

% my $btn = l('mai_DESC_STATE_FILTERING_BUTTON'); @@ -83,12 +87,28 @@ %= $mai_datas->{fetchmailmethod}

+ % my $smtp_mesg=l('SMTP port %u allow client to authenticate:');

- %=l 'mai_LABEL_SMTP_AUTH_CONTROL' + %= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25)); - %= $c->get_current_smtp_auth( 1 ) + %= $c->get_current_smtp_auth( TRUE )

+ % my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:'); +

+ %= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465)); + + %= $c->get_current_smtp_ssl_auth( TRUE, 's', FALSE ) +

+ + %my $smtp_mesg=l 'Submission port %u status:'; +

+ %= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587)); + + %= $c->get_current_smtp_ssl_auth( TRUE,'u', FALSE ) +

+
+ % my $btn = l('mai_DESC_STATE_RECEPTION_BUTTON');
%= submit_button "$btn", class => 'action' @@ -103,7 +123,7 @@

%=l 'mai_LABEL_UNKNOWN' - %= $c->get_emailunknownuser_status( 1 ) + %= $c->get_emailunknownuser_status( TRUE )

@@ -127,4 +147,4 @@ % end

-%end +%end \ No newline at end of file diff --git a/root/usr/share/smanager/themes/default/templates/partials/_usr_list.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_usr_list.html.ep index 8de18f7..25bdd35 100644 --- a/root/usr/share/smanager/themes/default/templates/partials/_usr_list.html.ep +++ b/root/usr/share/smanager/themes/default/templates/partials/_usr_list.html.ep @@ -79,13 +79,13 @@ % % my $thisdomain = session 'SystemName'; % $thisdomain .= ".".session 'DomainName'; + %# my $thisdomain = "localhost"; <%= $c->render_to_string(inline => $actionModify) %> <%= $c->render_to_string(inline => $actionResetPw) %> <%= $c->render_to_string(inline => $actionLock) %> <%= $c->render_to_string(inline => $actionRemove) %> -%# roundcube?_user=<%= $username %>"> roundcube?_user=<%= $username %>"> diff --git a/smeserver-manager.spec b/smeserver-manager.spec index d2adaf8..3acc7bf 100644 --- a/smeserver-manager.spec +++ b/smeserver-manager.spec @@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2 %define name smeserver-manager Name: %{name} %define version 11.0.0 -%define release 27 +%define release 28 Version: %{version} Release: %{release}%{?dist} License: GPL @@ -113,6 +113,10 @@ true %defattr(-,root,root) %changelog +* Fri Oct 18 2024 Brian Read 11.0.0-28.sme +- Add in emailsettings for port 25,465 and 587 [SME: 12750] +- Comment out change to localhost for roundcube in _user_list email icon setting [SME: 12751] + * Sun Oct 06 2024 Brian Read 11.0.0-27.sme - Add in change to _user_list.html.ep for access to roundcube email from useraccounts [SME: 12751]