* Fri Oct 18 2024 Brian Read <brianr@koozali.org> 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]
This commit is contained in:
Brian Read 2024-10-18 11:46:27 +01:00
parent fbdf3170ec
commit e5b9a012d9
5 changed files with 242 additions and 54 deletions

View File

@ -12,6 +12,9 @@ use strict;
use warnings; use warnings;
use Mojo::Base 'Mojolicious::Controller'; use Mojo::Base 'Mojolicious::Controller';
use constant FALSE => 0;
use constant TRUE => 1;
use Locale::gettext; use Locale::gettext;
use SrvMngr::I18N; use SrvMngr::I18N;
@ -36,7 +39,7 @@ sub main {
my $title = $c->l('mai_FORM_TITLE'); my $title = $c->l('mai_FORM_TITLE');
$mai_datas{'trt'} = 'LIST'; $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->stash( title => $title, notif => '', mai_datas => \%mai_datas );
$c->render(template => 'emailsettings'); $c->render(template => 'emailsettings');
@ -56,11 +59,12 @@ sub do_display {
my ($notif, $dest) = ''; my ($notif, $dest) = '';
$mai_datas{'trt'} = $trt; $mai_datas{'trt'} = $trt;
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
if ( $trt eq 'ACC' ) if ( $trt eq 'ACC' )
{ {
$dest = 'emailaccess'; $dest = 'emailaccess';
$mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method'); $mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method');
} }
if ( $trt eq 'FIL' ) if ( $trt eq 'FIL' )
@ -119,6 +123,7 @@ sub do_update {
my %mai_datas = (); my %mai_datas = ();
$mai_datas{trt} = $trt; $mai_datas{trt} = $trt;
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
my $title = $c->l('mai_FORM_TITLE'); my $title = $c->l('mai_FORM_TITLE');
@ -234,7 +239,6 @@ sub do_update {
}; };
sub get_virus_status { sub get_virus_status {
my ($c, $localise) = @_; my ($c, $localise) = @_;
@ -262,10 +266,10 @@ sub localise_status {
} }
sub get_prop { sub get_db_prop {
my ($c, $item, $prop, $default) = @_; my ($c, $item, $prop, $default) = @_;
return $cdb->get_prop($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 { sub get_current_smtp_auth {
my ($c, $localise) = @_; my ($c, $localise) = @_;
@ -384,16 +430,13 @@ sub get_current_smtp_auth {
my $smtpStatus = $cdb->get_prop('qpsmtpd', 'status') || 'enabled'; my $smtpStatus = $cdb->get_prop('qpsmtpd', 'status') || 'enabled';
my $smtpAuth = $cdb->get_prop('qpsmtpd', 'Authentication') || '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(); 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'; 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'; return $localise ? $c->l($options->{publicSSL}) : 'publicSSL';
} }
@ -401,6 +444,8 @@ sub get_current_smtp_auth {
} }
sub get_current_webmail_status { sub get_current_webmail_status {
my ($c, $localise) = @_; 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 { sub get_smtp_auth_options {
my $c = shift; 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 { sub get_emailunknownuser_options {
@ -710,18 +791,47 @@ sub change_settings_reception {
} }
} }
my $smtpAuth = ($c->param('SMTPAuth') || 'public'); # Need code here for all 3 options - 25, 465 ad 587
if ($smtpAuth eq 'public') { # Options for 25 are enabled and disabled
$cdb->set_prop("qpsmtpd", "Authentication", "enabled" ); # for 465 and 587 are (access) public, local and (status) disabled
$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" );
} elsif ($smtpAuth eq 'publicSSL') {
$cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); #my $smtpAuth = ($c->param('SMTPAuth') || 'public');
$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); #if ($smtpAuth eq 'public') {
} else { #$cdb->set_prop("qpsmtpd", "Authentication", "enabled" );
$cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); #$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" );
$cdb->set_prop("sqpsmtpd", "Authentication", "disabled" ); #} 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 ) unless ( system( "/sbin/e-smith/signal-event", "email-update" ) == 0 )
{ {
return $c->l('mai_ERROR_UPDATING_CONFIGURATION'); return $c->l('mai_ERROR_UPDATING_CONFIGURATION');
@ -762,7 +872,7 @@ sub change_settings_delivery {
sub change_settings_access { sub change_settings_access {
my $c = shift; 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'); my $pop3Access = ($c->param('POPAccess') || 'private');
if ($pop3Access eq 'disabled') { if ($pop3Access eq 'disabled') {
@ -919,4 +1029,4 @@ sub validate_smarthost {
} }
1; 1;

View File

@ -1,12 +1,17 @@
% layout 'default', title => "Sme server 2 - emailreceive"; % layout 'default', title => "Sme server 2 - emailreceive";
% content_for 'module' => begin % content_for 'module' => begin
% use constant FALSE => 0;
% use constant TRUE => 1;
<div id='module' class='module emailreceive-panel'> <div id='module' class='module emailreceive-panel'>
% if ($config->{debug} == 1) { % if ($config->{debug} == 1) {
<p> <p>
%= dumper $c->current_route %= dumper $c->current_route
%= dumper $mai_datas %= dumper $mai_datas
%= dumper $c->param('SMTPAuth')
</p> </p>
% } % }
@ -26,16 +31,65 @@
%=l 'mai_LABEL_MODE' %=l 'mai_LABEL_MODE'
</span><span class=input> </span><span class=input>
% param 'FetchmailMethod' => $mai_datas->{fetchmailmethod} unless param 'FetchmailMethod'; % param 'FetchmailMethod' => $mai_datas->{fetchmailmethod} unless param 'FetchmailMethod';
<!--
<pre>
%= dumper $mai_datas->{fetchmailmethod}
%= dumper $c->get_retrieval_opt()
%= param 'FetchmailMethod'
</pre>
-->
%= select_field 'FetchmailMethod' => $c->get_retrieval_opt(), class => 'input' %= select_field 'FetchmailMethod' => $c->get_retrieval_opt(), class => 'input'
</span></p> </span></p>
%=l 'mai_DESC_SMTP_AUTH_CONTROL' %#=l 'mai_DESC_SMTP_AUTH_CONTROL'
<br />
%= 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."
<br />
%= l "SMTPS port (465) will require implicit SSL/TLS then authenticate to send."
<br />
%= l "SMTP Submission port (587) will require STARTTLS, then authenticate to send."
<br />
% my $smtp_mesg=l('SMTP port %u allow client to authenticate:');
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_SMTP_AUTH_CONTROL' %= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
</span><span class=input> </span><span class=input>
% param 'SMTPAuth' => $c->get_current_smtp_auth() unless param 'SMTPAuth'; % param 'SMTPAuth' => $c->get_current_smtp_auth( FALSE ) unless param 'SMTPAuth';
%= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input' <!--
<pre>
%= dumper $c->get_smtp_auth_opt()
%= dumper $c->get_current_smtp_auth(FALSE)
%= dumper $c->get_db_prop("qpsmtpd","Authentication")
%= param 'SMTPAuth'
</pre>
-->
%= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input'
</span></p>
% my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:');
<p><span class=label>
%= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465));
</span><span class=input>
% 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'
</span></p>
%my $smtp_mesg=l('Submission port %u status:');
<p><span class=label>
%= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587));
</span><span class=input>
% param 'uSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE) unless param 'uSMTPAuth';
<!--
<pre>
%= dumper $c->get_smtp_ssl_auth_opt()
%= dumper $c->get_current_smtp_ssl_auth(FALSE,'s', TRUE)
%= dumper $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE)
%= dumper $c->get_db_prop("uqpsmtpd","access")
%= param 'uSMTPAuth'
</pre>
-->
%= select_field 'uSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input'
</span></p> </span></p>
<hr class="sectionbar" /> <hr class="sectionbar" />
@ -110,4 +164,4 @@
% end % end
</div> </div>
%end %end

View File

@ -1,9 +1,13 @@
% layout 'default', title => "Sme server 2 - emailsettings"; % layout 'default', title => "Sme server 2 - emailsettings";
% content_for 'module' => begin % content_for 'module' => begin
% use constant FALSE => 0;
% use constant TRUE => 1;
<div id='module' class='module emailsettings-panel'> <div id='module' class='module emailsettings-panel'>
% if ($config->{debug} == 1) { % if ($config->{debug} == TRUE) {
<p> <p>
%= dumper $c->current_route %= dumper $c->current_route
%= dumper $mai_datas %= dumper $mai_datas
@ -22,19 +26,19 @@
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_POP_ACCESS_CONTROL' %=l 'mai_LABEL_POP_ACCESS_CONTROL'
</span><span class=data2> </span><span class=data2>
%= $c->get_current_pop3_access( 1 ) %= $c->get_current_pop3_access( TRUE )
</span></p> </span></p>
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_IMAP_ACCESS_CONTROL' %=l 'mai_LABEL_IMAP_ACCESS_CONTROL'
</span><span class=data2> </span><span class=data2>
%= $c->get_current_imap_access( 1 ) %= $c->get_current_imap_access( TRUE )
</span></p> </span></p>
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_WEBMAIL' %=l 'mai_LABEL_WEBMAIL'
</span><span class=data2> </span><span class=data2>
%= $c->get_current_webmail_status( 1 ) %= $c->get_current_webmail_status( TRUE )
</span></p> </span></p>
% my $btn = l('mai_DESC_STATE_ACCESS_BUTTON'); % my $btn = l('mai_DESC_STATE_ACCESS_BUTTON');
@ -51,19 +55,19 @@
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_VIRUS_SCAN' %=l 'mai_LABEL_VIRUS_SCAN'
</span><span class=data2> </span><span class=data2>
%= $c->get_virus_status(1) %= $c->get_virus_status(TRUE)
</span></p> </span></p>
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_SPAM_SCAN' %=l 'mai_LABEL_SPAM_SCAN'
</span><span class=data2> </span><span class=data2>
%= $c->get_spam_status(1) %= $c->get_spam_status(TRUE)
</span></p> </span></p>
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_BLOCK_EXECUTABLE_CONTENT' %=l 'mai_LABEL_BLOCK_EXECUTABLE_CONTENT'
</span><span class=data2> </span><span class=data2>
%= $c->get_patterns_status(1) %= $c->get_patterns_status(TRUE)
</span></p> </span></p>
% my $btn = l('mai_DESC_STATE_FILTERING_BUTTON'); % my $btn = l('mai_DESC_STATE_FILTERING_BUTTON');
@ -83,12 +87,28 @@
%= $mai_datas->{fetchmailmethod} %= $mai_datas->{fetchmailmethod}
</span></p> </span></p>
% my $smtp_mesg=l('SMTP port %u allow client to authenticate:');
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_SMTP_AUTH_CONTROL' %= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
</span><span class=data2> </span><span class=data2>
%= $c->get_current_smtp_auth( 1 ) %= $c->get_current_smtp_auth( TRUE )
</span></p> </span></p>
% my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:');
<p><span class=label>
%= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465));
</span><span class=data2>
%= $c->get_current_smtp_ssl_auth( TRUE, 's', FALSE )
</span></p>
%my $smtp_mesg=l 'Submission port %u status:';
<p><span class=label>
%= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587));
</span><span class=data2>
%= $c->get_current_smtp_ssl_auth( TRUE,'u', FALSE )
</span></p>
<br />
% my $btn = l('mai_DESC_STATE_RECEPTION_BUTTON'); % my $btn = l('mai_DESC_STATE_RECEPTION_BUTTON');
<div class='center'> <div class='center'>
%= submit_button "$btn", class => 'action' %= submit_button "$btn", class => 'action'
@ -103,7 +123,7 @@
<p><span class=label> <p><span class=label>
%=l 'mai_LABEL_UNKNOWN' %=l 'mai_LABEL_UNKNOWN'
</span><span class=data2> </span><span class=data2>
%= $c->get_emailunknownuser_status( 1 ) %= $c->get_emailunknownuser_status( TRUE )
</span></p> </span></p>
<p><span class=label> <p><span class=label>
@ -127,4 +147,4 @@
% end % end
</div> </div>
%end %end

View File

@ -79,13 +79,13 @@
% %
% my $thisdomain = session 'SystemName'; % my $thisdomain = session 'SystemName';
% $thisdomain .= ".".session 'DomainName'; % $thisdomain .= ".".session 'DomainName';
%# my $thisdomain = "localhost";
<td class='sme-border' style="min-width:35em"> <td class='sme-border' style="min-width:35em">
<%= $c->render_to_string(inline => $actionModify) %> <%= $c->render_to_string(inline => $actionModify) %>
<%= $c->render_to_string(inline => $actionResetPw) %> <%= $c->render_to_string(inline => $actionResetPw) %>
<%= $c->render_to_string(inline => $actionLock) %> <%= $c->render_to_string(inline => $actionLock) %>
<%= $c->render_to_string(inline => $actionRemove) %> <%= $c->render_to_string(inline => $actionRemove) %>
%# <a href="<%= "https://sme11.thereadclan.me.uk/" %>roundcube?_user=<%= $username %>"><button class="sme-email-button" title="<%= l('EMAIL') %>"><%= l('EMAIL') %></button></a>
<a href="<%= "roundcubepanel/?url=https://".$thisdomain."/" %>roundcube?_user=<%= $username %>"><button class="sme-email-button" title="<%= l('EMAIL') %>"><%= l('EMAIL') %></button></a> <a href="<%= "roundcubepanel/?url=https://".$thisdomain."/" %>roundcube?_user=<%= $username %>"><button class="sme-email-button" title="<%= l('EMAIL') %>"><%= l('EMAIL') %></button></a>
</td> </td>
</tr> </tr>

View File

@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2
%define name smeserver-manager %define name smeserver-manager
Name: %{name} Name: %{name}
%define version 11.0.0 %define version 11.0.0
%define release 27 %define release 28
Version: %{version} Version: %{version}
Release: %{release}%{?dist} Release: %{release}%{?dist}
License: GPL License: GPL
@ -113,6 +113,10 @@ true
%defattr(-,root,root) %defattr(-,root,root)
%changelog %changelog
* Fri Oct 18 2024 Brian Read <brianr@koozali.org> 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 <brianr@koozali.org> 11.0.0-27.sme * Sun Oct 06 2024 Brian Read <brianr@koozali.org> 11.0.0-27.sme
- Add in change to _user_list.html.ep for access to roundcube email from useraccounts [SME: 12751] - Add in change to _user_list.html.ep for access to roundcube email from useraccounts [SME: 12751]