Compare commits
10 Commits
11_0_0-92_
...
11_0_0-102
Author | SHA1 | Date | |
---|---|---|---|
717d34a53d | |||
bec39af49c | |||
ff9c2fee8c | |||
21255abf46 | |||
8ada3f36e0 | |||
ab42f986e8 | |||
803bfd1cec | |||
0f2e2b82aa | |||
0341d02608 | |||
c208419704 |
@@ -37,7 +37,7 @@ use esmith::NavigationDB; # no UTF8 raw is ok for ASCII only flat file
|
||||
use SrvMngr_Auth qw(check_admin_access);
|
||||
|
||||
#this is overwrittrn with the "release" by the spec file - release can be "99.el8.sme"
|
||||
our $VERSION = '91.el8.sme';
|
||||
our $VERSION = '94.el8.sme';
|
||||
#Extract the release value
|
||||
if ($VERSION =~ /^(\d+)/) {
|
||||
$VERSION = $1; # $1 contains the matched numeric digits
|
||||
@@ -325,8 +325,11 @@ sub setup_routing {
|
||||
$if_admin->get('/clamav')->to('clamav#main')->name('clamav');
|
||||
$if_admin->post('/clamav')->to('clamav#do_update')->name('clamav2');
|
||||
|
||||
#$if_admin->get('/datetime')->to('datetime#main')->name('datetime');
|
||||
#$if_admin->post('/datetime')->to('datetime#do_update')->name('datetime2');
|
||||
$if_admin->get('/datetime')->to('datetime#main')->name('datetime');
|
||||
$if_admin->post('/datetimeu')->to('datetime#do_update')->name('datetimeu');
|
||||
$if_admin->get('/datetimed')->to('datetime#do_display')->name('datetimed');
|
||||
$if_admin->post('/datetimet')->to('datetime#do_testntp')->name('datetimet');
|
||||
|
||||
|
||||
$if_admin->get('/directory')->to('directory#main')->name('directory');
|
||||
$if_admin->post('/directory')->to('directory#do_update')->name('directory2');
|
||||
@@ -421,28 +424,59 @@ sub setup_routing {
|
||||
# additional routes (for contribs) got from 'routes' db
|
||||
#my @routes = @{SrvMngr::get_routes_list()};
|
||||
|
||||
foreach (@{SrvMngr::get_routes_list()}) {
|
||||
|
||||
if ( defined $_->{method} and defined $_->{url} and defined $_->{ctlact} and defined $_->{name} ) {
|
||||
my $menu = defined $_->{menu} ? $_->{menu} : 'A';
|
||||
if ( $menu eq 'N' ) {
|
||||
$r->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
if ( $_->{method} eq 'get');
|
||||
$r->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
if ( $_->{method} eq 'post');
|
||||
} elsif ( $menu eq 'U' ) {
|
||||
$if_logged_in->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
if ( $_->{method} eq 'get');
|
||||
$if_logged_in->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
if ( $_->{method} eq 'post');
|
||||
} else {
|
||||
$if_admin->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
if ( $_->{method} eq 'get');
|
||||
$if_admin->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
if ( $_->{method} eq 'post');
|
||||
}
|
||||
#foreach (@{SrvMngr::get_routes_list()}) {
|
||||
#if ( defined $_->{method} and defined $_->{url} and defined $_->{ctlact} and defined $_->{name} ) {
|
||||
#my $menu = defined $_->{menu} ? $_->{menu} : 'A';
|
||||
#if ( $menu eq 'N' ) {
|
||||
#$r->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
#if ( $_->{method} eq 'get');
|
||||
#$r->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
#if ( $_->{method} eq 'post');
|
||||
#} elsif ( $menu eq 'U' ) {
|
||||
#$if_logged_in->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
#if ( $_->{method} eq 'get');
|
||||
#$if_logged_in->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
#if ( $_->{method} eq 'post');
|
||||
#} else {
|
||||
#$if_admin->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
#if ( $_->{method} eq 'get');
|
||||
#$if_admin->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||
#if ( $_->{method} eq 'post');
|
||||
#}
|
||||
#}
|
||||
#}
|
||||
|
||||
foreach my $route (@{SrvMngr::get_routes_list()}) {
|
||||
if (defined $route->{method} && defined $route->{url} && defined $route->{ctlact} && defined $route->{name}) {
|
||||
my $menu = defined $route->{menu} ? $route->{menu} : 'A';
|
||||
|
||||
# Fix controller case: convert "ControllerName" to "controllername" in "ControllerName#action"
|
||||
# this is so that AdminLTE breadcrumb works - it appears that perl Packages names are NOT case sensitive
|
||||
# and that the breadcrumb package assumes that the package name is the same as the main route.
|
||||
my ($controller, $action) = split /#/, $route->{ctlact}, 2;
|
||||
my $fixed_ctlact = lc($controller) . '#' . $action;
|
||||
|
||||
if ($menu eq 'N') {
|
||||
$r->get($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||
if $route->{method} eq 'get';
|
||||
$r->post($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||
if $route->{method} eq 'post';
|
||||
}
|
||||
elsif ($menu eq 'U') {
|
||||
$if_logged_in->get($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||
if $route->{method} eq 'get';
|
||||
$if_logged_in->post($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||
if $route->{method} eq 'post';
|
||||
}
|
||||
else { # Default: menu 'A'
|
||||
$if_admin->get($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||
if $route->{method} eq 'get';
|
||||
$if_admin->post($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||
if $route->{method} eq 'post';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$if_admin->get('/config/:key' => {key => qr/[a-z0-9]{2,32}/})->to('request#getconfig')->name('getconfig');
|
||||
$if_admin->get('/account/:key' => {key => qr/[a-z0-9]{2,32}/})->to('request#getaccount')->name('getaccount');
|
||||
|
@@ -13,6 +13,8 @@ use esmith::NetworksDB::UTF8;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB::UTF8;
|
||||
|
||||
use DateTime;
|
||||
|
||||
use constant FALSE => 0;
|
||||
use constant TRUE => 1;
|
||||
|
||||
@@ -79,6 +81,7 @@ my $ddb;
|
||||
my $now_sec = sprintf('%02d', $today_sec);
|
||||
my $current_year = $today_year;
|
||||
my $ntpserverurl = $cdb->get_prop('ntpd','NTPServer');
|
||||
my $now = DateTime->now( time_zone => 'local' );
|
||||
my %ret = (
|
||||
# fields from Inputs
|
||||
'time_mode'=>($ntpserverurl eq '' ? 'dat_manually_set' : 'dat_ntp_server'),
|
||||
@@ -90,6 +93,8 @@ my $ddb;
|
||||
'minute'=>"$now_min",
|
||||
'second'=>"$now_sec",
|
||||
'ntpstatus' => $cdb->get_prop('ntpd','status') || 'disabled',
|
||||
# and the current time as a full format
|
||||
'currentdatetime' => $now->strftime('%Y-%m-%dT%H:%M:%S')
|
||||
|
||||
);
|
||||
return %ret;
|
||||
@@ -224,38 +229,12 @@ sub validate_change_datetime {
|
||||
$timezone = "US/Eastern";
|
||||
}
|
||||
my $month = $c->param('month');
|
||||
|
||||
if ($month =~ /^(\d{1,2})$/) {
|
||||
$month = $1;
|
||||
} else {
|
||||
$month = "1";
|
||||
}
|
||||
|
||||
if (($month < 1) || ($month > 12)) {
|
||||
return $c->l('dat_INVALID_MONTH') . " $month. " . $c->l('dat_MONTH_BETWEEN_1_AND_12');
|
||||
}
|
||||
my $day = $c->param('day');
|
||||
|
||||
if ($day =~ /^(\d{1,2})$/) {
|
||||
$day = $1;
|
||||
} else {
|
||||
$day = "1";
|
||||
}
|
||||
|
||||
if (($day < 1) || ($day > 31)) {
|
||||
return $c->l('dat_INVALID_DAY') . " $day. " . $c->l('dat_BETWEEN_1_AND_31');
|
||||
}
|
||||
my $year = $c->param('year');
|
||||
if (!is_valid_date($year, $month, $day)){
|
||||
return $c->l('dat_Invalid_date')
|
||||
}
|
||||
|
||||
if ($year =~ /^(\d{4})$/) {
|
||||
$year = $1;
|
||||
} else {
|
||||
$year = "2000";
|
||||
}
|
||||
|
||||
if (($year < 1900) || ($year > 2200)) {
|
||||
return $c->l('dat_INVALID_YEAR') . " $year. " . $c->l('dat_FOUR_DIGIT_YEAR');
|
||||
}
|
||||
my $hour = $c->param('hour');
|
||||
|
||||
if ($hour =~ /^(\d{1,2})$/) {
|
||||
@@ -289,24 +268,6 @@ sub validate_change_datetime {
|
||||
if (($second < 0) || ($second > 59)) {
|
||||
return $c->l('dat_INVALID_SECOND') . " $second. " . $c->l('dat_BETWEEN_0_AND_59');
|
||||
}
|
||||
#my $ampm = $c->param('Ampm');
|
||||
|
||||
#Move to 24 hours clock - not using AM/PM.
|
||||
#if ($ampm =~ /^(AM|PM)$/) {
|
||||
#$ampm = $1;
|
||||
#} else {
|
||||
#$ampm = "AM";
|
||||
#}
|
||||
# force AM so that it actually works on 24hr clock.
|
||||
#$ampm = "AM";
|
||||
|
||||
|
||||
# convert to 24 hour time
|
||||
#$hour = $hour % 12;
|
||||
|
||||
#if ($ampm eq "PM") {
|
||||
# $hour = $hour + 12;
|
||||
#}
|
||||
|
||||
#--------------------------------------------------
|
||||
# Store time zone in configuration database
|
||||
@@ -325,10 +286,27 @@ sub validate_change_datetime {
|
||||
# and hardware clock
|
||||
#--------------------------------------------------
|
||||
my $newdate = sprintf "%02d%02d%02d%02d%04d.%02d", $month, $day, $hour, $minute, $year, $second;
|
||||
esmith::util::backgroundCommand(2, "/sbin/e-smith/signal-event", "timezone-update", $newdate);
|
||||
$c->app->log->info("Changing date manually to $newdate");
|
||||
esmith::util::backgroundCommand(2, "/sbin/e-smith/signal-event", "timezone-update", $newdate); #TEMP!!!
|
||||
return '';
|
||||
} ## end sub validate_change_datetime
|
||||
|
||||
sub is_valid_date {
|
||||
my ($year, $month, $day) = @_;
|
||||
|
||||
# Check if all parts are defined and integers
|
||||
return 0 unless defined $year && defined $month && defined $day;
|
||||
return 0 unless $year =~ /^\d+$/ && $month =~ /^\d+$/ && $day =~ /^\d+$/;
|
||||
|
||||
# Try to construct a DateTime object
|
||||
eval {
|
||||
DateTime->new(year => $year, month => $month, day => $day);
|
||||
1;
|
||||
} or return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub update_ntpserver {
|
||||
my $c = shift;
|
||||
my $ntpserver = shift;
|
||||
@@ -378,6 +356,4 @@ sub disable_ntp {
|
||||
return '';
|
||||
} ## end sub disable_ntp
|
||||
|
||||
|
||||
|
||||
1;
|
@@ -8,6 +8,9 @@ package SrvMngr::Controller::Datetime;
|
||||
# heading : System
|
||||
# description : Date and time
|
||||
# navigation : 4000 300
|
||||
#
|
||||
# ######name : datetimet, method : post, url : /datetimet, ctlact : datetime#testntp
|
||||
#
|
||||
# routes : end
|
||||
#
|
||||
# Documentation: https://wiki.contribs.org/Datetime
|
||||
@@ -115,7 +118,7 @@ sub do_update {
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
|
||||
$c->app->log->info($c->param('month'));
|
||||
#$c->app->log->info($c->param('month'));
|
||||
|
||||
|
||||
#The most common ones - you might want to delete some of these if they are not used.
|
||||
@@ -173,7 +176,7 @@ sub do_update {
|
||||
$c->render(template => "datetime");
|
||||
return
|
||||
} else {
|
||||
if ($c->param('time_mode') eq 'data_manually_set') {
|
||||
if ($c->param('time_mode') eq 'dat_manually_set') {
|
||||
$c->stash( success => $c->l('dat_UPDATING_CLOCK'));
|
||||
} else {
|
||||
$c->stash( success => $c->l('dat_SETTINGS_CHANGED'));
|
||||
@@ -279,5 +282,52 @@ sub do_display {
|
||||
dat_data => \%dat_data
|
||||
);
|
||||
$c->render(template => "datetime");
|
||||
}
|
||||
}
|
||||
|
||||
sub do_testntp {
|
||||
my $c = shift;
|
||||
my $server = $c->req->json->{ntpserver} // '';
|
||||
|
||||
# Strict validation: hostname or IPv4
|
||||
unless ($server =~ /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)*|\d{1,3}(?:\.\d{1,3}){3})$/) {
|
||||
return $c->render(json => { success => 0, error => 'Invalid server name or IP' });
|
||||
}
|
||||
|
||||
my $timeout = 5;
|
||||
my @cmd = ('timeout', $timeout, 'ntpdate', '-q', $server);
|
||||
|
||||
# Run ntpdate and capture output
|
||||
my $output = qx{@cmd 2>&1};
|
||||
$c->app->log->info($output);
|
||||
my $exit_code = $? >> 8;
|
||||
|
||||
# Parse for known errors
|
||||
if ($exit_code == 124) {
|
||||
return $c->render(json => { success => 0, error => "Timeout: NTP server did not respond within $timeout seconds" });
|
||||
}
|
||||
if ($output =~ /no server suitable for synchronization found/i) {
|
||||
return $c->render(json => { success => 0, error => "No suitable NTP server found or server unreachable" });
|
||||
}
|
||||
if ($output =~ /Name or service not known|Temporary failure in name resolution/i) {
|
||||
return $c->render(json => { success => 0, error => "DNS resolution failed for $server" });
|
||||
}
|
||||
if ($output =~ /ntpdig: no eligible servers/i) {
|
||||
return $c->render(json => { success => 0, error => "Not a an NTP server" });
|
||||
}
|
||||
if ($output =~ /permission denied/i) {
|
||||
return $c->render(json => { success => 0, error => "Permission denied running ntpdate" });
|
||||
}
|
||||
if ($exit_code != 0) {
|
||||
return $c->render(json => { success => 0, error => "ntpdate failed (exit code $exit_code): $output" });
|
||||
}
|
||||
|
||||
# Extract date and time down to seconds from adjust line
|
||||
my ($datetime) = $output =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/m;
|
||||
|
||||
if ($datetime) {
|
||||
return $c->render(json => { success => 1, time => $datetime });
|
||||
} else {
|
||||
return $c->render(json => { success => 0, error => "Could not parse date/time from NTP server response." });}
|
||||
}
|
||||
|
||||
1;
|
@@ -39,6 +39,7 @@ sub main {
|
||||
sub do_update {
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
$db = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||
my $access = $c->param('access');
|
||||
my $department = $c->param('department');
|
||||
my $company = $c->param('company');
|
||||
@@ -84,7 +85,7 @@ sub get_ldap_base {
|
||||
sub get_value {
|
||||
my $fm = shift;
|
||||
my $item = shift;
|
||||
|
||||
$db = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||
my $record = $db->get($item);
|
||||
if ($record) {
|
||||
return $record->value();
|
||||
@@ -93,4 +94,4 @@ sub get_value {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
1;
|
||||
1;
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -5,6 +5,12 @@ package SrvMngr::Controller::Localnetworks;
|
||||
# description : Local networks
|
||||
# navigation : 6000 500
|
||||
#
|
||||
#$if_admin->get('/localnetworks')->to('localnetworks#main')->name('localnetworks');
|
||||
#$if_admin->post('/localnetworks')->to('localnetworks#do_display')->name('localnetworks');
|
||||
#$if_admin->post('/localnetworksa')->to('localnetworks#do_display')->name('localnetworksadd');
|
||||
#$if_admin->post('/localnetworksb')->to('localnetworks#do_display')->name('localnetworksadd1');
|
||||
#$if_admin->get('/localnetworksd')->to('localnetworks#do_display')->name('localnetworksdel');
|
||||
#$if_admin->post('/localnetworkse')->to('localnetworks#do_display')->name('localnetworksdel1');
|
||||
# routes : end
|
||||
#----------------------------------------------------------------------
|
||||
use strict;
|
||||
@@ -53,6 +59,7 @@ sub do_display {
|
||||
$trt = 'ADD' if ($rt eq 'localnetworksadd');
|
||||
$trt = 'ADD1' if ($rt eq 'localnetworksadd1');
|
||||
$trt = 'DEL1' if ($rt eq 'localnetworksdel1');
|
||||
$c->app->log->info("Localnetworks:trt:$trt");
|
||||
my %ln_datas = ();
|
||||
my $title = $c->l('ln_LOCAL NETWORKS');
|
||||
my $modul = '';
|
||||
@@ -83,16 +90,21 @@ sub do_display {
|
||||
if ($trt eq 'DEL1') {
|
||||
|
||||
#After Remove clicked on Delete network panel
|
||||
#$network_db = esmith::NetworksDB::UTF8->open() || die("Failed to open Networkdb-1");
|
||||
#$network_db = esmith::NetworksDB::UTF8->open() || die("Failed to open Networkdb-1");
|
||||
my $localnetwork = $c->param("localnetwork");
|
||||
my $delete_hosts = $c->param("deletehost") || "1"; #default to deleting them.
|
||||
my $rec = $network_db->get($localnetwork) || die("Failed to find network on db:$localnetwork");
|
||||
|
||||
if ($rec and $rec->prop('type') eq 'localnetwork') {
|
||||
$ln_datas{localnetwork} = $localnetwork;
|
||||
}
|
||||
my %ret = remove_network($localnetwork, $delete_hosts);
|
||||
#$network_db = esmith::NetworksDB::UTF8->open() || die("Failed to open Networkdb-2"); #Refresh the network DB
|
||||
my $delete_hosts = $c->param("deletehost") || "1"; #default to deleting them.
|
||||
$c->app->log->info("Localnetworks:deleting $localnetwork");
|
||||
my ($rec,%ret);
|
||||
if ($rec = $network_db->get($localnetwork)){ #|| die("Failed to find network on db:$localnetwork");
|
||||
if ($rec and $rec->prop('type') eq 'localnetwork') {
|
||||
$ln_datas{localnetwork} = $localnetwork;
|
||||
}
|
||||
%ret = $c->remove_network($localnetwork, $delete_hosts);
|
||||
} else {
|
||||
$c->app->log->info("Local network: delete failed to find network in db: $localnetwork");
|
||||
%ret = ();
|
||||
}
|
||||
#$network_db = esmith::NetworksDB::UTF8->open() || die("Failed to open Networkdb-2"); #Refresh the network DB
|
||||
my @localnetworks;
|
||||
|
||||
if ($network_db) {
|
||||
@@ -100,8 +112,10 @@ sub do_display {
|
||||
}
|
||||
|
||||
# Load up ln_datas with values need by template
|
||||
$ln_datas{subnet} = $rec->prop('Mask');
|
||||
$ln_datas{router} = $rec->prop('Router');
|
||||
if ($rec){
|
||||
$ln_datas{subnet} = $rec->prop('Mask');
|
||||
$ln_datas{router} = $rec->prop('Router');
|
||||
}
|
||||
$c->stash(ln_datas => \%ln_datas, localnetworks => \@localnetworks, ret => \%ret);
|
||||
} ## end if ($trt eq 'DEL1')
|
||||
|
||||
@@ -109,14 +123,20 @@ sub do_display {
|
||||
|
||||
#Initial delete panel requiring confirmation
|
||||
my $localnetwork = $c->param("localnetwork") || '';
|
||||
my ($rec,%ret);
|
||||
$c->stash(localnetwork => $localnetwork);
|
||||
my $rec = $network_db->get($localnetwork) || die("Failed to get local network in db::$localnetwork");
|
||||
my $subnet = $rec->prop('Mask');
|
||||
$ln_datas{subnet} = $subnet;
|
||||
$ln_datas{router} = $rec->prop('Router');
|
||||
my $numhosts = hosts_on_network($localnetwork, $subnet);
|
||||
$ln_datas{localnetwork} = $localnetwork;
|
||||
$ln_datas{deletehosts} = $numhosts > 0 ? 1 : 0;
|
||||
if ($rec = $network_db->get($localnetwork)){
|
||||
my $subnet = $rec->prop('Mask');
|
||||
$ln_datas{subnet} = $subnet;
|
||||
$ln_datas{router} = $rec->prop('Router');
|
||||
my $numhosts =$c->hosts_on_network($localnetwork, $subnet);
|
||||
$ln_datas{localnetwork} = $localnetwork;
|
||||
$ln_datas{deletehosts} = $numhosts > 0 ? 1 : 0;
|
||||
} else {
|
||||
$c->app->log->info("Local network:Initial Failed to find network in Db: $localnetwork");
|
||||
$c->flash('error',$c->l('ln_Failed to find network in Db'));
|
||||
$trt = 'LIST';
|
||||
}
|
||||
} ## end if ($trt eq 'DEL')
|
||||
|
||||
if ($trt eq 'LIST') {
|
||||
@@ -136,6 +156,7 @@ sub do_display {
|
||||
} ## end sub do_display
|
||||
|
||||
sub remove_network {
|
||||
my $c = shift;
|
||||
my $network = shift;
|
||||
$network_db = esmith::NetworksDB::UTF8->open();
|
||||
my $record = $network_db->get($network);
|
||||
@@ -152,7 +173,7 @@ sub remove_network {
|
||||
|
||||
if (system("/sbin/e-smith/signal-event", "network-delete", $network) == 0) {
|
||||
if ($delete_hosts) {
|
||||
my @hosts_to_delete = hosts_on_network($network, $subnet);
|
||||
my @hosts_to_delete = $c->hosts_on_network($network, $subnet);
|
||||
|
||||
foreach my $host (@hosts_to_delete) {
|
||||
$host->delete;
|
||||
@@ -169,6 +190,7 @@ sub remove_network {
|
||||
} ## end sub remove_network
|
||||
|
||||
sub hosts_on_network {
|
||||
my $c = shift;
|
||||
my $network = shift;
|
||||
my $netmask = shift;
|
||||
die if not $network and $netmask;
|
||||
@@ -191,17 +213,20 @@ sub hosts_on_network {
|
||||
} ## end sub hosts_on_network
|
||||
|
||||
sub add_network {
|
||||
my ($fm) = @_;
|
||||
my $networkAddress = $fm->param('networkAddress');
|
||||
my $networkMask = $fm->param('networkMask');
|
||||
my $networkRouter = $fm->param('networkRouter');
|
||||
my ($c) = @_;
|
||||
my $networkAddress = $c->param('networkAddress');
|
||||
my $networkMask = $c->param('networkMask');
|
||||
my $networkRouter = $c->param('networkRouter');
|
||||
|
||||
#Start by checking that the network does not already exist
|
||||
|
||||
|
||||
#Validate Ips and subnet mask
|
||||
my $res = ip_number($fm, $networkAddress);
|
||||
my $res = ip_number($c, $networkAddress);
|
||||
return (ret => 'ln_INVALID_IP_ADDRESS', vars => "Network Address $res") unless $res eq 'OK';
|
||||
$res = subnet_mask($networkMask);
|
||||
return (ret => 'ln_INVALID_SUBNET_MASK', vars => "$networkMask") unless $res eq 'OK';
|
||||
$res = ip_number($fm, $networkRouter);
|
||||
$res = ip_number($c, $networkRouter);
|
||||
return (ret => 'ln_INVALID_IP_ADDRESS', vars => "Routeur Address $res") unless $res eq 'OK';
|
||||
|
||||
# we transform bit mask to regular mask
|
||||
@@ -234,19 +259,25 @@ sub add_network {
|
||||
if ($network_db->get($network)) {
|
||||
return (ret => 'ln_NETWORK_ALREADY_ADDED', vars => "$network,$networkMask,$networkRouter");
|
||||
}
|
||||
$network_db->new_record(
|
||||
$res = $network_db->new_record(
|
||||
$network,
|
||||
{ Mask => $networkMask,
|
||||
Router => $networkRouter,
|
||||
type => 'network',
|
||||
}
|
||||
);
|
||||
|
||||
# Untaint $network before use in system()
|
||||
$network =~ /(.+)/;
|
||||
$network = $1;
|
||||
system("/sbin/e-smith/signal-event", "network-create", $network) == 0
|
||||
or (return (ret => 'ln_ERROR_CREATING_NETWORK', vars => "$network,$networkMask,$networkRouter"));
|
||||
if (! $res) {
|
||||
#Record already existed
|
||||
$c->app->log->info("Local Network:Network already exists:$network");
|
||||
#return success message
|
||||
} else {
|
||||
#Only call underlying batch if new record created
|
||||
# Untaint $network before use in system()
|
||||
$network =~ /(.+)/;
|
||||
$network = $1;
|
||||
system("/sbin/e-smith/signal-event", "network-create", $network) == 0
|
||||
or (return (ret => 'ln_ERROR_CREATING_NETWORK', vars => "$network,$networkMask,$networkRouter"));
|
||||
}
|
||||
my ($totalHosts, $firstAddr, $lastAddr) = esmith::util::computeHostRange($network, $networkMask);
|
||||
my $msg;
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
|
||||
'dat_FORM_TITLE' => 'Date and time configuration',
|
||||
'dat_The_time_is_currently' => 'The time is currently:',
|
||||
'dat_INITIAL_DESC' => 'This is where you configure the date and time of this server. You may use an existing network time server or
|
||||
manually set the date and time for your time zone.',
|
||||
'dat_SET_DATE_TITLE' => 'Set Date and Time',
|
||||
@@ -58,4 +58,5 @@ clock, and <b>will not</b> try to synchronize from a time server.',
|
||||
'dat_ntp_server' => 'NTP server',
|
||||
'dat_manually_set' => 'Set manually',
|
||||
'dat_NTP_Server_URL' =>'NTP Server URL:',
|
||||
'dat_set_manually' =>'Set Date and Time:',
|
||||
'dat_set_manually' =>'Set Date and Time:',
|
||||
'dat_Invalid_date' => 'Invalid date',
|
@@ -1,6 +1,5 @@
|
||||
|
||||
'mai_FORM_TITLE' => 'E-mail settings',
|
||||
'E-mail' => 'E-mail',
|
||||
'mai_E-Mail' => 'E-mail',
|
||||
'mai_SUCCESS' => 'The new e-mail settings have been saved.',
|
||||
'mai_NEVER' => 'not at all',
|
||||
'mai_EVERY5MIN' => 'Every 5 minutes',
|
||||
@@ -20,7 +19,7 @@ for dialup connections), or multi-drop (for dialup connections if
|
||||
ETRN is not supported by your Internet provider). Note that
|
||||
multi-drop mode is the only option available when the server is
|
||||
configured in private server and gateway mode.',
|
||||
'mai_LABEL_DELEGATE' => 'Address of internal mail server',
|
||||
'mai_LABEL_DELEGATE' => 'IP Address of internal mail server',
|
||||
'mai_TITLE_DELEGATE' => 'Delegate mail servers',
|
||||
'mai_DESC_DELEGATE' => 'Your server includes a complete, full-featured e-mail server. However,
|
||||
if for some reason you wish to delegate e-mail processing to
|
||||
@@ -79,10 +78,9 @@ destination (recommended in most cases) or can deliver them via
|
||||
your Internet provider\'s SMTP server (recommended if you have an
|
||||
unreliable Internet connection or are using a residential Internet
|
||||
service). If using your Internet provider\'s SMTP server, specify
|
||||
its hostname or IP address below. Otherwise leave this field
|
||||
blank.',
|
||||
'mai_INVALID_SMARTHOST' => 'The smarthost name you entered is not a valid internet domain name
|
||||
and is not blank',
|
||||
its hostname or IP address below. Otherwise leave this field blank.',
|
||||
'mai_INVALID_SMARTHOST' => 'The smarthost name you entered is not a valid internet domain name and is not blank',
|
||||
'mai_INVALID_DELEGATE' => 'The delegate host name you entered is not a valid IP Address and is not blank',
|
||||
'mai_DESC_POP_ACCESS_CONTROL' => 'You can control POP3 server access. The setting \'Allow access
|
||||
only from local networks\' allows POP3 access only from your
|
||||
local network(s). The POP3S setting can be used to provide
|
||||
@@ -150,5 +148,9 @@ The value for this tag can be defined below.',
|
||||
'mai_LABEL_SMARTHOST_SMTPAUTH_STATUS' => 'SMTP Authentication for Internet provider',
|
||||
'mai_LABEL_SMARTHOST_SMTPAUTH_USERID' => 'Mail server user id',
|
||||
'mai_LABEL_SMARTHOST_SMTPAUTH_PASSWD' => 'Mail server password',
|
||||
'mai_VALIDATION_SMTPAUTH_NONBLANK' => 'This field cannot be left blank if SMTP Authentication is
|
||||
'mai_VALIDATION_SMTPAUTH_NONBLANK' => 'The user id and password fields cannot be left blank if SMTP Authentication is
|
||||
enabled.',
|
||||
'mai_ACC_panel_action_was_successful' => 'Email access settings saved sucessfully',
|
||||
'mai_DEL_panel_action_was_successful' => 'Email delivery settings saved sucessfully',
|
||||
'mai_FIL_panel_action_was_successful' => 'Email filtering settings saved sucessfully',
|
||||
'mai_REC_panel_action_was_successful' => 'Email receive settings saved sucessfully',
|
@@ -7,7 +7,7 @@
|
||||
.datetime-label-col {
|
||||
background: #e8f3e2; /* light green */
|
||||
padding: 1em 0em 0em 0em;
|
||||
min-width: 192px;
|
||||
min-width: 30%;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-end;
|
||||
@@ -16,7 +16,7 @@
|
||||
}
|
||||
|
||||
.datetime-label {
|
||||
display: block;
|
||||
display:inline-flex;
|
||||
}
|
||||
|
||||
.datetime-fields-col {
|
||||
@@ -26,4 +26,26 @@
|
||||
border: 1px solid #ccc;
|
||||
border-left: none;
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.datetime-clock {
|
||||
min-width: 20em;
|
||||
display:inline-flex;
|
||||
border:0px;
|
||||
padding:5px;
|
||||
}
|
||||
|
||||
.datetime-clock-label {
|
||||
background-color:#e8f3e2;
|
||||
display:inline-flex;
|
||||
width:30%;
|
||||
font-weight:bold;
|
||||
text-align:right;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.ntp-test-result { font-weight: bold; }
|
||||
.ntp-test-success { color: green; }
|
||||
.ntp-test-error { color: red; }
|
||||
.ntp-test-wait { color: #333; }
|
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
Generated by: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||
*/
|
||||
.Emailsettings-panel {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.name {}
|
||||
.rout {}
|
@@ -280,4 +280,14 @@ background-color: #e8f3e1;
|
||||
/* Or specify the desired color */
|
||||
text-decoration: none;
|
||||
/* Or any other style you want to reset */
|
||||
}
|
||||
|
||||
#busy-indicator {
|
||||
display: none;
|
||||
margin-top: 10px;
|
||||
font-weight: bold;
|
||||
color: red;
|
||||
}
|
||||
.busy {
|
||||
cursor: wait; /* Change the cursor to a 'wait' cursor */
|
||||
}
|
@@ -15,4 +15,87 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
|
||||
select.addEventListener('change', toggleSections);
|
||||
toggleSections(); // Set initial state
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Parse the initial server time from the input value
|
||||
const clockElement = document.getElementById('real-time-clock');
|
||||
if (!clockElement) return;
|
||||
|
||||
// Get the initial server time from the input's value
|
||||
let serverTime = new Date(clockElement.value.replace(' ', 'T'));
|
||||
|
||||
function updateDateTime() {
|
||||
// Format the date/time string as desired
|
||||
const daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
||||
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
||||
|
||||
const dayOfWeek = daysOfWeek[serverTime.getDay()];
|
||||
const month = months[serverTime.getMonth()];
|
||||
const day = serverTime.getDate();
|
||||
const year = serverTime.getFullYear();
|
||||
|
||||
let hours = serverTime.getHours();
|
||||
const ampm = hours >= 12 ? 'PM' : 'AM';
|
||||
hours = hours % 12 || 12;
|
||||
|
||||
const minutes = serverTime.getMinutes().toString().padStart(2, '0');
|
||||
const seconds = serverTime.getSeconds().toString().padStart(2, '0');
|
||||
|
||||
const dateTimeString = `${dayOfWeek}, ${month} ${day}, ${year} ${hours}:${minutes}:${seconds} ${ampm}`;
|
||||
clockElement.value = dateTimeString;
|
||||
|
||||
// Advance serverTime by one second
|
||||
serverTime.setSeconds(serverTime.getSeconds() + 1);
|
||||
}
|
||||
|
||||
updateDateTime();
|
||||
setInterval(updateDateTime, 1000);
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const btn = document.getElementById('test-ntp-btn');
|
||||
const input = document.getElementById('ntpserver');
|
||||
const result = document.getElementById('ntp-test-result');
|
||||
|
||||
btn.addEventListener('click', function() {
|
||||
const server = input.value.trim();
|
||||
result.className = 'ntp-test-result'; // reset
|
||||
|
||||
if (!server) {
|
||||
result.textContent = "Please enter a server address.";
|
||||
result.classList.add('ntp-test-error');
|
||||
return;
|
||||
}
|
||||
result.textContent = "Testing...";
|
||||
result.classList.add('ntp-test-wait');
|
||||
|
||||
fetch('/smanager/datetimet', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: JSON.stringify({ ntpserver: server })
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
// HTTP error, e.g., 404, 500
|
||||
throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
result.className = 'ntp-test-result'; // reset
|
||||
if (data.success) {
|
||||
result.textContent = `Server time: ${data.time}`;
|
||||
result.classList.add('ntp-test-success');
|
||||
} else {
|
||||
result.textContent = `Error: ${data.error}`;
|
||||
result.classList.add('ntp-test-error');
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
// Network error or thrown HTTP error
|
||||
result.className = 'ntp-test-result ntp-test-error';
|
||||
result.textContent = `Request failed: ${error.message}`;
|
||||
});
|
||||
});
|
||||
});
|
@@ -0,0 +1,5 @@
|
||||
//
|
||||
//Generated by: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||
//
|
||||
$(document).ready(function() {
|
||||
});
|
@@ -28,4 +28,16 @@ $(document).ready(function() {
|
||||
var iconSrc = inputType === 'password' ? 'images/visible.png' : 'images/visible-slash.png';
|
||||
$(this).attr('src', iconSrc);
|
||||
});
|
||||
});
|
||||
|
||||
// and busy cursor
|
||||
$(document).ready(function() {
|
||||
// Handle form submission for any form
|
||||
$('form').on('submit', function(event) {
|
||||
// Disable all submit buttons and update their labels
|
||||
$(this).find('button[type="submit"]').prop('disabled', true).text('Please wait...');
|
||||
$(this).find('input[type="submit"]').prop('disabled', true).val('Please wait...');
|
||||
// Add busy cursor
|
||||
$('body').addClass('busy');
|
||||
});
|
||||
});
|
@@ -1,7 +1,5 @@
|
||||
% layout 'default', title => 'Sme server 2 - datetime';
|
||||
% content_for 'module' => begin
|
||||
%= javascript 'js/datetime.js'
|
||||
%= stylesheet 'css/datetime.css'
|
||||
<div id='module' class='module datetime-panel'>
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
@@ -27,7 +25,15 @@
|
||||
<h1><%= $title %></h1><br>
|
||||
%= $modul
|
||||
<% my $btn = l('SAVE'); %>
|
||||
<p>
|
||||
<br /><br />
|
||||
<span>
|
||||
%= label_for 'real-time-clock' => $c->l('dat_The_time_is_currently'), class => 'datetime-clock-label'
|
||||
</span><span class=data2>
|
||||
<!--
|
||||
<div id="real-time-clock"></div>
|
||||
-->
|
||||
%= text_field 'clock', id => 'real-time-clock', readonly => 'readonly', class => 'datetime-clock' , value => $dat_data->{currentdatetime}
|
||||
</span>
|
||||
% if ($dat_data->{ntpstatus} eq 'disabled') {
|
||||
<div class='datetime-set-ntp'>
|
||||
%=l 'dat_NTP_ENABLE_DESC'
|
||||
@@ -68,7 +74,9 @@
|
||||
<div class=datetime-fields-col>
|
||||
% my $server_check = '^([a-zA-Z0-9][a-zA-Z0-9\.\-]{0,253}[a-zA-Z0-9]|(\d{1,3}\.){3}\d{1,3})$';
|
||||
% param 'ntpserver' => $dat_data->{ntpserver} unless param 'ntpserver';
|
||||
%= text_field ntpserver => placeholder => 'e.g. smeserver.pool.ntp.org',id => 'ntpserver', pattern => $server_check, title => 'Enter a valid hostname or IPv4 address',required => 'required'
|
||||
%= text_field ntpserver => placeholder => 'e.g. smeserver.pool.ntp.org', id => 'ntpserver', pattern => $server_check, title => 'Enter a valid hostname or IPv4 address', required => 'required'
|
||||
<button type="button" id="test-ntp-btn" class="btn btn-primary ml-2">Test Server</button>
|
||||
<span id="ntp-test-result" class="ntp-test-result ml-2"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,57 +0,0 @@
|
||||
% layout 'default', title => "Sme server 2 - emailaccess";
|
||||
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module emailaccess-panel'>
|
||||
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
</p>
|
||||
% }
|
||||
|
||||
% if ( stash 'error' ) {
|
||||
<br><div class=sme-error>
|
||||
%= $c->render_to_string(inline => stash 'error')
|
||||
</div>
|
||||
%}
|
||||
|
||||
<h1><%= $title%></h1>
|
||||
|
||||
%= form_for '/emailsettingd' => (method => 'POST') => begin
|
||||
|
||||
%=l 'mai_DESC_POP_ACCESS_CONTROL'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_ACCESS_CONTROL'
|
||||
</span><span class=input>
|
||||
% param 'POPAccess' => $c->get_current_pop3_access() unless param 'POPAccess';
|
||||
%= select_field 'POPAccess' => $c->get_pop_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_IMAP_ACCESS_CONTROL'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_IMAP_ACCESS_CONTROL'
|
||||
</span><span class=input>
|
||||
% param 'IMAPAccess' => $c->get_current_imap_access() unless param 'IMAPAccess';
|
||||
%= select_field 'IMAPAccess' => $c->get_imap_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_WEBMAIL'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_WEBMAIL'
|
||||
</span><span class=input>
|
||||
% param 'WebMail' => $c->get_current_webmail_status() unless param 'WebMail';
|
||||
%= select_field 'WebMail' => $c->get_webmail_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('SAVE');
|
||||
%= submit_button "$btn", class => 'action'
|
||||
|
||||
%= hidden_field 'trt' => 'ACC'
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
@@ -1,92 +0,0 @@
|
||||
% layout 'default', title => "Sme server 2 - emaildeliver";
|
||||
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module emaildeliver-panel'>
|
||||
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
</p>
|
||||
% }
|
||||
|
||||
% if ( stash 'error' ) {
|
||||
<br><div class=sme-error>
|
||||
%= $c->render_to_string(inline => stash 'error')
|
||||
</div>
|
||||
%}
|
||||
|
||||
<h1><%= $title%></h1>
|
||||
|
||||
%= form_for '/emailsettingd' => (method => 'POST') => begin
|
||||
|
||||
<h2>
|
||||
%=l 'mai_TITLE_UNKNOWN'
|
||||
</h2>
|
||||
|
||||
%=l 'mai_DESC_UNKNOWN'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_UNKNOWN'
|
||||
</span><span class=input>
|
||||
% param 'EmailUnknownUser' => $mai_datas->{emailunknownuser} unless param 'EmailUnknownUser';
|
||||
%= select_field 'EmailUnknownUser' => $c->get_emailunknownuser_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<!--<hr class='menubar' />-->
|
||||
<h2>
|
||||
%=l 'mai_TITLE_DELEGATE'
|
||||
</h2>
|
||||
|
||||
%=l 'mai_DESC_DELEGATE'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_DELEGATE'
|
||||
</span><span class=input>
|
||||
% param 'DelegateMailServer' => $mai_datas->{delegatemailserver} unless param 'DelegateMailServer';
|
||||
%= text_field 'DelegateMailServer', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<!--<hr class='sectionbar' />-->
|
||||
<h2>
|
||||
%=l 'mai_TITLE_SMARTHOST'
|
||||
</h2>
|
||||
|
||||
%=l 'mai_DESC_SMARTHOST'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST'
|
||||
</span><span class=input>
|
||||
% param 'SMTPSmartHost' => $mai_datas->{smtpsmarthost} unless param 'SMTPSmartHost';
|
||||
%= text_field 'SMTPSmartHost', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_STATUS'
|
||||
</span><span class=input>
|
||||
% param 'SMTPAUTHPROXY_status' => $mai_datas->{smtpauthproxystatus} unless param 'SMTPAUTHPROXY_status';
|
||||
%= select_field 'SMTPAUTHPROXY_status' => [[(l 'DISABLED') => 'disabled'], [(l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_USERID'
|
||||
</span><span class=input>
|
||||
% param 'SMTPAUTHPROXY_Userid' => $mai_datas->{smtpauthproxyuserid} unless param 'SMTPAUTHPROXY_Userid';
|
||||
%= text_field 'SMTPAUTHPROXY_Userid', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_PASSWD'
|
||||
</span><span class=input>
|
||||
% param 'SMTPAUTHPROXY_Passwd' => $mai_datas->{smtpauthproxypassword} unless param 'SMTPAUTHPROXY_Passwd';
|
||||
%= password_field 'SMTPAUTHPROXY_Passwd', class => 'input'
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('SAVE');
|
||||
%= submit_button "$btn", class => 'action'
|
||||
|
||||
%= hidden_field 'trt' => 'DEL'
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
@@ -1,101 +0,0 @@
|
||||
% layout 'default', title => "Sme server 2 - emailfilter";
|
||||
|
||||
% content_for 'module' => begin
|
||||
<div id='module' class='module emailfilter-panel'>
|
||||
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
</p>
|
||||
% }
|
||||
|
||||
% if ( stash 'error' ) {
|
||||
<br><div class=sme-error>
|
||||
%= $c->render_to_string(inline => stash 'error')
|
||||
</div>
|
||||
%}
|
||||
|
||||
<h1><%= $title%></h1>
|
||||
|
||||
%= form_for '/emailsettingd' => (method => 'POST') => begin
|
||||
|
||||
%=l 'mai_DESC_VIRUS_SCAN'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_VIRUS_SCAN'
|
||||
</span><span class=input>
|
||||
% param 'VirusStatus' => $mai_datas->{virusstatus} unless param 'VirusStatus';
|
||||
%= select_field 'VirusStatus' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span><br></p>
|
||||
|
||||
%=l 'mai_DESC_SPAM_SCAN'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SCAN'
|
||||
</span><span class=input>
|
||||
% param 'Spamstatus' => $mai_datas->{spamstatus} unless param 'Spamstatus';
|
||||
%= select_field 'Spamstatus' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SENSITIVITY'
|
||||
</span><span class=input>
|
||||
% param 'SpamSensitivity' => $mai_datas->{spamsensitivity} unless param 'SpamSensitivity';
|
||||
%= select_field 'SpamSensitivity' => $c->get_spam_sensitivity_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_TAGLEVEL'
|
||||
</span><span class=input>
|
||||
% param 'SpamTagLevel' => $mai_datas->{spamtaglevel} unless param 'SpamTagLevel';
|
||||
%= select_field 'SpamTagLevel' => $c->get_spam_level_options(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_REJECTLEVEL'
|
||||
</span><span class=input>
|
||||
% param 'SpamRejectLevel' => $mai_datas->{spamrejectlevel} unless param 'SpamRejectLevel';
|
||||
%= select_field 'SpamRejectLevel' => $c->get_spam_level_options(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SORTSPAM'
|
||||
</span><span class=input>
|
||||
% param 'SpamSortSpam' => $mai_datas->{spamsortspam} unless param 'SpamSortSpam';
|
||||
%= select_field 'SpamSortSpam' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_SPAM_SUBJECT'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SUBJECTTAG'
|
||||
</span><span class=input>
|
||||
% param 'SpamSubjectTag' => $mai_datas->{spamsubjecttag} unless param 'SpamSubjectTag';
|
||||
%= select_field 'SpamSubjectTag' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SUBJECT'
|
||||
</span><span class=input>
|
||||
% param 'SpamSubject' => $mai_datas->{spamsubject} unless param 'SpamSubject';
|
||||
%= text_field 'SpamSubject' => class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_BLOCK_EXECUTABLE_CONTENT'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_CONTENT_TO_BLOCK'
|
||||
</span><span class=input>
|
||||
% param 'BlockExecutableContent' => $c->get_patterns_current_opt() unless param 'BlockExecutableContent';
|
||||
%= select_field 'BlockExecutableContent' => $c->get_patterns_opt(), class => 'input', multiple => "1"
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('SAVE');
|
||||
%= submit_button "$btn", class => 'action'
|
||||
|
||||
%= hidden_field 'trt' => 'FIL'
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
@@ -1,167 +0,0 @@
|
||||
% layout 'default', title => "Sme server 2 - emailreceive";
|
||||
|
||||
% content_for 'module' => begin
|
||||
|
||||
% use constant FALSE => 0;
|
||||
% use constant TRUE => 1;
|
||||
|
||||
<div id='module' class='module emailreceive-panel'>
|
||||
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
%= dumper $c->param('SMTPAuth')
|
||||
</p>
|
||||
% }
|
||||
|
||||
% if ( stash 'error' ) {
|
||||
<br><div class=sme-error>
|
||||
%= $c->render_to_string(inline => stash 'error')
|
||||
</div>
|
||||
%}
|
||||
|
||||
<h1><%= $title%></h1>
|
||||
|
||||
%= form_for '/emailsettingd' => (method => 'POST') => begin
|
||||
|
||||
%=l 'mai_DESC_MODE'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_MODE'
|
||||
</span><span class=input>
|
||||
% 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'
|
||||
</span></p>
|
||||
|
||||
%#=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>
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
|
||||
</span><span class=input>
|
||||
% param 'SMTPAuth' => $c->get_current_smtp_auth( FALSE ) unless param 'SMTPAuth';
|
||||
<!--
|
||||
<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>
|
||||
|
||||
<!--<hr class="sectionbar" />-->
|
||||
<h2>
|
||||
%=l 'mai_TITLE_SECONDARY'
|
||||
</h2>
|
||||
|
||||
%=l 'mai_DESC_SECONDARY'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SECONDARY'
|
||||
</span><span class=input>
|
||||
% param 'SecondaryMailServer' => $mai_datas->{secondarymailserver} unless param 'SecondaryMailServer';
|
||||
%= text_field 'SecondaryMailServer', class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_FETCH_PERIOD'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_FETCH_PERIOD'
|
||||
</span><span class=input>
|
||||
% param 'FreqOffice' => $mai_datas->{freqoffice} unless param 'FreqOffice';
|
||||
%= select_field 'FreqOffice' => $c->fetchmail_freq(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_FETCH_PERIOD_NIGHTS'
|
||||
</span><span class=input>
|
||||
% param 'FreqOutside' => $mai_datas->{freqoutside} unless param 'FreqOutside';
|
||||
%= select_field 'FreqOutside' => $c->fetchmail_freq(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_FETCH_PERIOD_WEEKENDS'
|
||||
</span><span class=input>
|
||||
% param 'FreqWeekend' => $mai_datas->{freqweekend} unless param 'FreqWeekend';
|
||||
%= select_field 'FreqWeekend' => $c->fetchmail_freq(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_ACCOUNT'
|
||||
</span><span class=input>
|
||||
% param 'SecondaryMailAccount' => $mai_datas->{secondarymailaccount} unless param 'SecondaryMailAccount';
|
||||
%= text_field 'SecondaryMailAccount', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_PASS'
|
||||
</span><span class=input>
|
||||
% param 'SecondaryMailPassword' => $mai_datas->{secondarymailpassword} unless param 'SecondaryMailPassword';
|
||||
%= password_field 'SecondaryMailPassword', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SORT_METHOD'
|
||||
</span><span class=input>
|
||||
% param 'SpecifyHeader' => $mai_datas->{specifyheader} unless param 'SpecifyHeader';
|
||||
%= select_field 'SpecifyHeader' => [[(l 'mai_DEFAULT') => 'off'], [(l 'mai_SPECIFY_BELOW') => 'on']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SORT_HEADER'
|
||||
</span><span class=input>
|
||||
% param 'SecondaryMailEnvelope' => $mai_datas->{secondarymailenvelope} unless param 'SecondaryMailEnvelope';
|
||||
%= text_field 'SecondaryMailEnvelope', class => 'input'
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('SAVE');
|
||||
%= submit_button "$btn", class => 'action'
|
||||
|
||||
%= hidden_field 'trt' => 'REC'
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
@@ -1,155 +1,70 @@
|
||||
% layout 'default', title => "Sme server 2 - emailsettings";
|
||||
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||
%#
|
||||
% layout 'default', title => "Sme server 2 - E-Mail", share_dir => './';
|
||||
%# css specific to this panel:
|
||||
% 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} == TRUE) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
</p>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_data->{trt}
|
||||
</pre>
|
||||
% }
|
||||
|
||||
<h1><%=$title%></h1>
|
||||
|
||||
% if ( stash('modul')) {
|
||||
%= $c->render_to_string(inline => stash('modul') );
|
||||
% }
|
||||
|
||||
% if ( stash 'error' ) {
|
||||
<br><div class=sme-error>
|
||||
%= $c->render_to_string(inline => stash 'error')
|
||||
</div>
|
||||
%}
|
||||
%if ($c->stash('first')) {
|
||||
<br><p>
|
||||
%=$c->render_to_string(inline =>$c->l($c->stash('first')))
|
||||
</p>
|
||||
|
||||
<h1><%= $title%></h1>
|
||||
%} elsif ($c->stash('success')) {
|
||||
<div class='success '>
|
||||
%= $c->l($c->stash('success'));
|
||||
</div>
|
||||
<br />
|
||||
|
||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_ACCESS_CONTROL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_pop3_access( TRUE )
|
||||
</span></p>
|
||||
%} elsif ($c->stash('error')) {
|
||||
<div class='sme-error'>
|
||||
%= $c->l($c->stash('error'));
|
||||
</div>
|
||||
<br />
|
||||
%}
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_IMAP_ACCESS_CONTROL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_imap_access( TRUE )
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_WEBMAIL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_webmail_status( TRUE )
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('mai_DESC_STATE_ACCESS_BUTTON');
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
</div>
|
||||
|
||||
%= hidden_field 'trt' => 'ACC'
|
||||
% end
|
||||
<br>
|
||||
|
||||
<!--<hr class="sectionbar" />-->
|
||||
|
||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_VIRUS_SCAN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_virus_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SCAN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_spam_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_BLOCK_EXECUTABLE_CONTENT'
|
||||
</span><span class=data2>
|
||||
%= $c->get_patterns_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('mai_DESC_STATE_FILTERING_BUTTON');
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
</div>
|
||||
|
||||
%= hidden_field 'trt' => 'FIL'
|
||||
% end
|
||||
<br>
|
||||
|
||||
<!--<hr class="sectionbar" />-->
|
||||
|
||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_MODE'
|
||||
</span><span class=data2>
|
||||
%= $mai_datas->{fetchmailmethod}
|
||||
</span></p>
|
||||
%#Routing to partials according to trt parameter.
|
||||
%#This ought to be cascading if/then/elsif, but is easier to just stack the if/then's rather like a case statement'
|
||||
|
||||
% if ($mai_data->{trt} eq "FRONT") {
|
||||
%= include 'partials/_mai_FRONT'
|
||||
%}
|
||||
|
||||
% if ($mai_data->{trt} eq "ACC") {
|
||||
%= include 'partials/_mai_ACC'
|
||||
%}
|
||||
|
||||
% if ($mai_data->{trt} eq "FIL") {
|
||||
%= include 'partials/_mai_FIL'
|
||||
%}
|
||||
|
||||
% if ($mai_data->{trt} eq "REC") {
|
||||
%= include 'partials/_mai_REC'
|
||||
%}
|
||||
|
||||
% if ($mai_data->{trt} eq "DEL") {
|
||||
%= include 'partials/_mai_DEL'
|
||||
%}
|
||||
|
||||
% my $smtp_mesg;
|
||||
|
||||
% $smtp_mesg=l('SMTP port %u allow client to authenticate:');
|
||||
<p><span class=label>
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_smtp_auth( TRUE )
|
||||
</span></p>
|
||||
|
||||
% $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>
|
||||
|
||||
% $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');
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
</div>
|
||||
|
||||
%= hidden_field 'trt' => 'REC'
|
||||
% end
|
||||
<br>
|
||||
|
||||
<!--<hr class="sectionbar" />-->
|
||||
|
||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_UNKNOWN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_emailunknownuser_status( TRUE )
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_DELEGATE'
|
||||
</span><span class=data2>
|
||||
%= $c->get_value('DelegateMailServer')
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST'
|
||||
</span><span class=data2>
|
||||
%= $c->get_value('SMTPSmartHost')
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('mai_DESC_STATE_DELIVERY_BUTTON');
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
</div>
|
||||
|
||||
%= hidden_field 'trt' => 'DEL'
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
@@ -2,7 +2,6 @@
|
||||
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<!-- default +jquery -->
|
||||
<head>
|
||||
<title><%= $title %></title>
|
||||
<link rel="made" href="mailto:bugs%40koozali.org">
|
||||
@@ -11,27 +10,16 @@
|
||||
%= stylesheet '/css/new_sme.css'
|
||||
%= stylesheet '/css/new-sme-main.css'
|
||||
|
||||
|
||||
%# Replaced by consolidated (and rationlised) CSS files as above March 2025
|
||||
%#= stylesheet '/css/sme_core.css'
|
||||
%#= stylesheet '/css/sme_main.css'
|
||||
%#= stylesheet '/css/sme_menu.css'
|
||||
%#= stylesheet '/css/styles.css'
|
||||
%#= stylesheet '/css/sme-password.css'
|
||||
|
||||
%= content_for 'head_contrib'
|
||||
% if (config 'hasJquery') {
|
||||
%= include 'partials/_js_imports'
|
||||
%= include 'common_js'
|
||||
% if (config 'hasJquery') {
|
||||
%= include 'partials/_js_imports'
|
||||
%= include 'common_js'
|
||||
% }
|
||||
%= content_for 'refresh'
|
||||
|
||||
|
||||
%= content_for 'refresh'
|
||||
%= stylesheet '/js/datatables.min.css'
|
||||
|
||||
%= javascript '/js/datatables.min.js'
|
||||
|
||||
%= stylesheet '/js/jquery-ui.min.css'
|
||||
|
||||
%= javascript '/js/jquery-ui.min.js'
|
||||
%= javascript '/js/dataTables.buttons.min.js'
|
||||
%= javascript '/js/jszip.min.js'
|
||||
@@ -44,26 +32,23 @@
|
||||
|
||||
<link rel="stylesheet" href="/smanager/css/flag-icon.min.css">
|
||||
%= stylesheet '/css/sme-jquery-overrides.css'
|
||||
|
||||
<style>
|
||||
#busy-indicator {
|
||||
display: none;
|
||||
margin-top: 10px;
|
||||
font-weight: bold;
|
||||
color: red;
|
||||
}
|
||||
.busy {
|
||||
cursor: wait; /* Change the cursor to a 'wait' cursor */
|
||||
}
|
||||
</style>
|
||||
|
||||
%# panel specific css file
|
||||
% my $controller = stash('controller');
|
||||
% if ($controller) {
|
||||
% my $css_path = "css/$controller.css";
|
||||
%# Use the url_for helper to generate the correct static file URL
|
||||
% if (app->static->file($css_path)) {
|
||||
<link rel="stylesheet" href="<%= url_for("/$css_path") %>">
|
||||
% }
|
||||
% }
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
% if ( not defined $c->session->{lang} ) {
|
||||
% SrvMngr::init_session ( $c );
|
||||
% }
|
||||
% if ( not defined $c->session->{lang} ) {
|
||||
% SrvMngr::init_session ( $c );
|
||||
% }
|
||||
|
||||
<div id="header">
|
||||
%= include 'partials/_header'
|
||||
% if ($c->is_logged_in && scalar @{SrvMngr::theme_list( $c )} > 1) {
|
||||
@@ -72,42 +57,40 @@
|
||||
</div>
|
||||
|
||||
<div id="container">
|
||||
% if (config 'hasJquery') {
|
||||
%= content 'js_toggleMenu'
|
||||
% }
|
||||
|
||||
% if (config 'hasJquery') {
|
||||
%= content 'js_toggleMenu'
|
||||
% }
|
||||
|
||||
<div id="navigation" class="col-md-3 module">
|
||||
%= include 'partials/_nav_menu'
|
||||
% if ( $c->is_logged_in ) {
|
||||
%= include 'partials/_user_menu'
|
||||
% }
|
||||
% if ( $c->is_admin ) {
|
||||
%= include 'partials/_navig2'
|
||||
% }
|
||||
</div>
|
||||
<div id="main" class="col-md-9">
|
||||
|
||||
%= include 'partials/_info'
|
||||
|
||||
% if (flash 'success') {
|
||||
<br><div class="success module">
|
||||
%= $c->render_to_string(inline => flash 'success')
|
||||
<div id="navigation" class="col-md-3 module">
|
||||
%= include 'partials/_nav_menu'
|
||||
% if ( $c->is_logged_in ) {
|
||||
%= include 'partials/_user_menu'
|
||||
% }
|
||||
% if ( $c->is_admin ) {
|
||||
%= include 'partials/_navig2'
|
||||
% }
|
||||
</div>
|
||||
% }
|
||||
% if ( flash 'warning' ) {
|
||||
<br><div class="sme-warning module">
|
||||
%= $c->render_to_string(inline => flash 'warning')
|
||||
|
||||
<div id="main" class="col-md-9">
|
||||
%= include 'partials/_info'
|
||||
% if (flash 'success') {
|
||||
<br><div class="success module">
|
||||
%= $c->render_to_string(inline => flash 'success')
|
||||
</div>
|
||||
% }
|
||||
% if ( flash 'warning' ) {
|
||||
<br><div class="sme-warning module">
|
||||
%= $c->render_to_string(inline => flash 'warning')
|
||||
</div>
|
||||
%}
|
||||
% if ( flash 'error' ) {
|
||||
<br><div class="sme-error module">
|
||||
%= $c->render_to_string(inline => flash 'error')
|
||||
</div>
|
||||
%}
|
||||
%= content 'module'
|
||||
%= include 'partials/_footer'
|
||||
</div>
|
||||
%}
|
||||
% if ( flash 'error' ) {
|
||||
<br><div class="sme-error module">
|
||||
%= $c->render_to_string(inline => flash 'error')
|
||||
</div>
|
||||
%}
|
||||
%= content 'module'
|
||||
%= include 'partials/_footer'
|
||||
</div>
|
||||
</div>
|
||||
|
||||
% if (config 'hasJquery') {
|
||||
@@ -115,23 +98,17 @@
|
||||
%= content 'js_togglePassword'
|
||||
% }
|
||||
|
||||
%= javascript '/js/sme-dataTable-setup.js'
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// Handle form submission for any form
|
||||
$('form').on('submit', function(event) {
|
||||
// Disable the submit button
|
||||
$(this).find('button[type="submit"], input[type="submit"]').prop('disabled', true);
|
||||
// Show the busy indicator
|
||||
// $('#busy-indicator').show();
|
||||
|
||||
// Change the cursor to "wait"
|
||||
$('body').addClass('busy');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
%= javascript '/js/sme-dataTable-setup.js'
|
||||
|
||||
%# Specific panel js code
|
||||
% $controller = stash('controller');
|
||||
% if ($controller) {
|
||||
% my $js_path = "js/$controller.js";
|
||||
%# Use the url_for helper to generate the correct static file URL
|
||||
% if (app->static->file($js_path)) {
|
||||
<script src="<%= url_for("/$js_path") %>"></script>
|
||||
% }
|
||||
% }
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -6,12 +6,12 @@
|
||||
% my $router = $ln_datas->{router};
|
||||
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
%= dumper %$ln_datas
|
||||
%= dumper $deletehosts
|
||||
</p>
|
||||
<pre>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
%= dumper %$ln_datas
|
||||
%= dumper $deletehosts
|
||||
</pre>
|
||||
% }
|
||||
|
||||
%= form_for '/localnetworkse' => (method => 'POST') => begin
|
||||
@@ -56,4 +56,4 @@
|
||||
|
||||
%end
|
||||
|
||||
</div>
|
||||
</div>
|
@@ -8,9 +8,9 @@
|
||||
% my ($var1, $var2, $var3, $var4, $var5, $var6, $var7) = @vars;
|
||||
|
||||
% if ($c->app->config->{debug}) {
|
||||
<p>
|
||||
<pre>
|
||||
%= dumper { ret_data => \%ret }
|
||||
</p>
|
||||
</pre>
|
||||
% }
|
||||
|
||||
% if ($ret{ret} eq "") {
|
||||
|
@@ -0,0 +1,54 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||
%#
|
||||
<div id="Emailsettings-ACC" class="partial Emailsettings-ACC">
|
||||
%# <script>
|
||||
%# window.onload = function() {
|
||||
%# SelectInput();
|
||||
%# };
|
||||
%# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $mai_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('SAVE');
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
|
||||
<h2><%= $c->l('mai_DESC_STATE_ACCESS_BUTTON') %></h2><br>
|
||||
%= form_for "emailsettingsu" => (method => 'POST') => begin
|
||||
% param 'trt' => $mai_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $mai_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
%=l 'mai_DESC_POP_ACCESS_CONTROL'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_ACCESS_CONTROL'
|
||||
</span><span class=input>
|
||||
% param 'POPAccess' => $c->get_current_pop3_access() unless param 'POPAccess';
|
||||
%= select_field 'POPAccess' => $c->get_pop_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_IMAP_ACCESS_CONTROL'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_IMAP_ACCESS_CONTROL'
|
||||
</span><span class=input>
|
||||
% param 'IMAPAccess' => $c->get_current_imap_access() unless param 'IMAPAccess';
|
||||
%= select_field 'IMAPAccess' => $c->get_imap_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_WEBMAIL'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_WEBMAIL'
|
||||
</span><span class=input>
|
||||
% param 'WebMail' => $c->get_current_webmail_status() unless param 'WebMail';
|
||||
%= select_field 'WebMail' => $c->get_webmail_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
%# ....
|
||||
%# Probably finally by a submit.
|
||||
%= submit_button $btn, class => 'action'
|
||||
%end
|
||||
</div>
|
@@ -0,0 +1,90 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||
%#
|
||||
<div id="Emailsettings-DEL" class="partial Emailsettings-DEL">
|
||||
%# <script>
|
||||
%# window.onload = function() {
|
||||
%# SelectInput();
|
||||
%# };
|
||||
%# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $mai_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('SAVE');
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
|
||||
<h2><%= $c->l('mai_DESC_STATE_DELIVERY_BUTTON') %></h2>
|
||||
%= form_for "emailsettingsu" => (method => 'POST') => begin
|
||||
% param 'trt' => $mai_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $mai_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
<h2>
|
||||
%=l 'mai_TITLE_UNKNOWN'
|
||||
</h2>
|
||||
|
||||
%=l 'mai_DESC_UNKNOWN'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_UNKNOWN'
|
||||
</span><span class=input>
|
||||
% param 'EmailUnknownUser' => $mai_data->{emailunknownuser} unless param 'EmailUnknownUser';
|
||||
%= select_field 'EmailUnknownUser' => $c->get_emailunknownuser_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<!--<hr class='menubar' />-->
|
||||
<h2>
|
||||
%=l 'mai_TITLE_DELEGATE'
|
||||
</h2>
|
||||
|
||||
%=l 'mai_DESC_DELEGATE'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_DELEGATE'
|
||||
</span><span class=input>
|
||||
% param 'DelegateMailServer' => $mai_data->{delegatemailserver} unless param 'DelegateMailServer';
|
||||
%= text_field 'DelegateMailServer', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<!--<hr class='sectionbar' />-->
|
||||
<h2>
|
||||
%=l 'mai_TITLE_SMARTHOST'
|
||||
</h2>
|
||||
|
||||
%=l 'mai_DESC_SMARTHOST'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST'
|
||||
</span><span class=input>
|
||||
% param 'SMTPSmartHost' => $mai_data->{smtpsmarthost} unless param 'SMTPSmartHost';
|
||||
%= text_field 'SMTPSmartHost', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_STATUS'
|
||||
</span><span class=input>
|
||||
% param 'SMTPAUTHPROXY_status' => $mai_data->{smtpauthproxystatus} unless param 'SMTPAUTHPROXY_status';
|
||||
%= select_field 'SMTPAUTHPROXY_status' => [[(l 'DISABLED') => 'disabled'], [(l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_USERID'
|
||||
</span><span class=input>
|
||||
% param 'SMTPAUTHPROXY_Userid' => $mai_data->{smtpauthproxyuserid} unless param 'SMTPAUTHPROXY_Userid';
|
||||
%= text_field 'SMTPAUTHPROXY_Userid', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_PASSWD'
|
||||
</span><span class=input>
|
||||
% param 'SMTPAUTHPROXY_Passwd' => $mai_data->{smtpauthproxypassword} unless param 'SMTPAUTHPROXY_Passwd';
|
||||
%= password_field 'SMTPAUTHPROXY_Passwd', class => 'input'
|
||||
</span></p>
|
||||
|
||||
|
||||
%# ....
|
||||
%# Probably finally by a submit.
|
||||
%= submit_button $btn, class => 'action'
|
||||
%end
|
||||
</div>
|
@@ -0,0 +1,98 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||
%#
|
||||
<div id="Emailsettings-FIL" class="partial Emailsettings-FIL">
|
||||
%# <script>
|
||||
%# window.onload = function() {
|
||||
%# SelectInput();
|
||||
%# };
|
||||
%# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $mai_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('SAVE');
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
|
||||
<h2><%= $c->l('mai_DESC_STATE_FILTERING_BUTTON') %></h2><br>
|
||||
%= form_for "emailsettingsu" => (method => 'POST') => begin
|
||||
% param 'trt' => $mai_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $mai_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
%=l 'mai_DESC_VIRUS_SCAN'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_VIRUS_SCAN'
|
||||
</span><span class=input>
|
||||
% param 'VirusStatus' => $mai_data->{virusstatus} unless param 'VirusStatus';
|
||||
%= select_field 'VirusStatus' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span><br></p>
|
||||
|
||||
%=l 'mai_DESC_SPAM_SCAN'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SCAN'
|
||||
</span><span class=input>
|
||||
% param 'Spamstatus' => $mai_data->{spamstatus} unless param 'Spamstatus';
|
||||
%= select_field 'Spamstatus' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SENSITIVITY'
|
||||
</span><span class=input>
|
||||
% param 'SpamSensitivity' => $mai_data->{spamsensitivity} unless param 'SpamSensitivity';
|
||||
%= select_field 'SpamSensitivity' => $c->get_spam_sensitivity_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_TAGLEVEL'
|
||||
</span><span class=input>
|
||||
% param 'SpamTagLevel' => $mai_data->{spamtaglevel} unless param 'SpamTagLevel';
|
||||
%= select_field 'SpamTagLevel' => $c->get_spam_level_options(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_REJECTLEVEL'
|
||||
</span><span class=input>
|
||||
% param 'SpamRejectLevel' => $mai_data->{spamrejectlevel} unless param 'SpamRejectLevel';
|
||||
%= select_field 'SpamRejectLevel' => $c->get_spam_level_options(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SORTSPAM'
|
||||
</span><span class=input>
|
||||
% param 'SpamSortSpam' => $mai_data->{spamsortspam} unless param 'SpamSortSpam';
|
||||
%= select_field 'SpamSortSpam' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_SPAM_SUBJECT'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SUBJECTTAG'
|
||||
</span><span class=input>
|
||||
% param 'SpamSubjectTag' => $mai_data->{spamsubjecttag} unless param 'SpamSubjectTag';
|
||||
%= select_field 'SpamSubjectTag' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SUBJECT'
|
||||
</span><span class=input>
|
||||
% param 'SpamSubject' => $mai_data->{spamsubject} unless param 'SpamSubject';
|
||||
%= text_field 'SpamSubject' => class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_BLOCK_EXECUTABLE_CONTENT'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_CONTENT_TO_BLOCK'
|
||||
</span><span class=input>
|
||||
% param 'BlockExecutableContent' => $c->get_patterns_current_opt() unless param 'BlockExecutableContent';
|
||||
%= select_field 'BlockExecutableContent' => $c->get_patterns_opt(), class => 'input', multiple => "1"
|
||||
</span></p>
|
||||
|
||||
%# ....
|
||||
%# Probably finally by a submit.
|
||||
%= submit_button $btn, class => 'action'
|
||||
%end
|
||||
</div>
|
@@ -0,0 +1,152 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||
%#
|
||||
<div id="Emailsettings-FRONT" class="partial Emailsettings-FRONT">
|
||||
%# <script>
|
||||
%# window.onload = function() {
|
||||
%# SelectInput();
|
||||
%# };
|
||||
%# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $mai_data
|
||||
<br>
|
||||
</pre>
|
||||
% }
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
% my $btn = l('Modify');
|
||||
<fieldset>
|
||||
<legend><%= $c->l('mai_DESC_STATE_ACCESS_BUTTON') %></legend>
|
||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_ACCESS_CONTROL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_pop3_access( TRUE )
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_IMAP_ACCESS_CONTROL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_imap_access( TRUE )
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_WEBMAIL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_webmail_status( TRUE )
|
||||
</span></p>
|
||||
|
||||
<br>
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
</div>
|
||||
|
||||
%= hidden_field 'trt' => 'ACC'
|
||||
% end
|
||||
</fieldset>
|
||||
<br>
|
||||
|
||||
|
||||
<fieldset>
|
||||
<legend><%= $c->l('mai_DESC_STATE_FILTERING_BUTTON') %></legend>
|
||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_VIRUS_SCAN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_virus_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SCAN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_spam_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_BLOCK_EXECUTABLE_CONTENT'
|
||||
</span><span class=data2>
|
||||
%= $c->get_patterns_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
<br>
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
</div>
|
||||
|
||||
%= hidden_field 'trt' => 'FIL'
|
||||
% end
|
||||
</fieldset>
|
||||
<br>
|
||||
|
||||
<fieldset>
|
||||
<legend><%= $c->l('mai_DESC_STATE_RECEPTION_BUTTON') %></legend>
|
||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_MODE'
|
||||
</span><span class=data2>
|
||||
%= $mai_data->{fetchmailmethod}
|
||||
</span></p>
|
||||
|
||||
% my $smtp_mesg;
|
||||
|
||||
% $smtp_mesg=l('SMTP port %u allow client to authenticate:');
|
||||
<p><span class=label>
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_smtp_auth( TRUE )
|
||||
</span></p>
|
||||
|
||||
% $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>
|
||||
|
||||
% $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 />
|
||||
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
</div>
|
||||
|
||||
%= hidden_field 'trt' => 'REC'
|
||||
% end
|
||||
</fieldset>
|
||||
<br>
|
||||
|
||||
<fieldset>
|
||||
<legend><%= $c->l('mai_DESC_STATE_DELIVERY_BUTTON') %></legend>
|
||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_UNKNOWN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_emailunknownuser_status( TRUE )
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_DELEGATE'
|
||||
</span><span class=data2>
|
||||
%= $c->get_value('DelegateMailServer')
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMARTHOST'
|
||||
</span><span class=data2>
|
||||
%= $c->get_value('SMTPSmartHost')
|
||||
</span></p>
|
||||
|
||||
<br>
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
</div>
|
||||
|
||||
%= hidden_field 'trt' => 'DEL'
|
||||
% end
|
||||
</fieldset>
|
||||
</div>
|
@@ -0,0 +1,159 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||
%#
|
||||
<div id="Emailsettings-REC" class="partial Emailsettings-REC">
|
||||
%# <script>
|
||||
%# window.onload = function() {
|
||||
%# SelectInput();
|
||||
%# };
|
||||
%# </script>
|
||||
% if (config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $mai_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('SAVE');
|
||||
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
|
||||
|
||||
<h2><%= $c->l('mai_DESC_STATE_RECEPTION_BUTTON') %></h2><br>
|
||||
%= form_for "emailsettingsu" => (method => 'POST') => begin
|
||||
% param 'trt' => $mai_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $mai_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
%=l 'mai_DESC_MODE'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_MODE'
|
||||
</span><span class=input>
|
||||
% param 'FetchmailMethod' => $mai_data->{fetchmailmethod} unless param 'FetchmailMethod';
|
||||
<!--
|
||||
<pre>
|
||||
%= dumper $mai_data->{fetchmailmethod}
|
||||
%= dumper $c->get_retrieval_opt()
|
||||
%= param 'FetchmailMethod'
|
||||
</pre>
|
||||
-->
|
||||
%= select_field 'FetchmailMethod' => $c->get_retrieval_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
%#=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>
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
|
||||
</span><span class=input>
|
||||
% param 'SMTPAuth' => $c->get_current_smtp_auth( FALSE ) unless param 'SMTPAuth';
|
||||
<!--
|
||||
<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>
|
||||
|
||||
<!--<hr class="sectionbar" />-->
|
||||
<h2>
|
||||
%=l 'mai_TITLE_SECONDARY'
|
||||
</h2><br>
|
||||
|
||||
%=l 'mai_DESC_SECONDARY'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SECONDARY'
|
||||
</span><span class=input>
|
||||
% param 'SecondaryMailServer' => $mai_data->{secondarymailserver} unless param 'SecondaryMailServer';
|
||||
%= text_field 'SecondaryMailServer', class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_FETCH_PERIOD'
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_FETCH_PERIOD'
|
||||
</span><span class=input>
|
||||
% param 'FreqOffice' => $mai_data->{freqoffice} unless param 'FreqOffice';
|
||||
%= select_field 'FreqOffice' => $c->fetchmail_freq(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_FETCH_PERIOD_NIGHTS'
|
||||
</span><span class=input>
|
||||
% param 'FreqOutside' => $mai_data->{freqoutside} unless param 'FreqOutside';
|
||||
%= select_field 'FreqOutside' => $c->fetchmail_freq(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_FETCH_PERIOD_WEEKENDS'
|
||||
</span><span class=input>
|
||||
% param 'FreqWeekend' => $mai_data->{freqweekend} unless param 'FreqWeekend';
|
||||
%= select_field 'FreqWeekend' => $c->fetchmail_freq(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_ACCOUNT'
|
||||
</span><span class=input>
|
||||
% param 'SecondaryMailAccount' => $mai_data->{secondarymailaccount} unless param 'SecondaryMailAccount';
|
||||
%= text_field 'SecondaryMailAccount', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_PASS'
|
||||
</span><span class=input>
|
||||
% param 'SecondaryMailPassword' => $mai_data->{secondarymailpassword} unless param 'SecondaryMailPassword';
|
||||
%= password_field 'SecondaryMailPassword', class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SORT_METHOD'
|
||||
</span><span class=input>
|
||||
% param 'SpecifyHeader' => $mai_data->{specifyheader} unless param 'SpecifyHeader';
|
||||
%= select_field 'SpecifyHeader' => [[(l 'mai_DEFAULT') => 'off'], [(l 'mai_SPECIFY_BELOW') => 'on']], class => 'input'
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SORT_HEADER'
|
||||
</span><span class=input>
|
||||
% param 'SecondaryMailEnvelope' => $mai_data->{secondarymailenvelope} unless param 'SecondaryMailEnvelope';
|
||||
%= text_field 'SecondaryMailEnvelope', class => 'input'
|
||||
</span></p>
|
||||
|
||||
%# ....
|
||||
%# Probably finally by a submit.
|
||||
%= submit_button $btn, class => 'action'
|
||||
%end
|
||||
</div>
|
@@ -1,6 +1,5 @@
|
||||
% layout 'default', title => "Sme server 2 - qmailanalog";
|
||||
% content_for 'module' => begin
|
||||
%= javascript '/js/qmailanalog.js'
|
||||
<div id='module' class='module qmailanalog-panel'>
|
||||
%if (config->{debug} == 1) {
|
||||
<p>
|
||||
|
@@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2
|
||||
%define name smeserver-manager
|
||||
Name: %{name}
|
||||
%define version 11.0.0
|
||||
%define release 92
|
||||
%define release 102
|
||||
Version: %{version}
|
||||
Release: %{release}%{?dist}
|
||||
License: GPL
|
||||
@@ -36,6 +36,7 @@ Requires: perl(Net::Netmask) >= 1.9
|
||||
Requires: perl(DBM::Deep) >= 2.0011-1
|
||||
Requires: perl(Mojo::JWT) >= 0.08-1
|
||||
#Requires: perl(Time::TAI64) >= 2.11
|
||||
Requires: perl(Data::Validate::IP)
|
||||
Requires: mutt >= 1.5.21
|
||||
Requires: smeserver-manager-jsquery >= 1.0
|
||||
Requires: smeserver-certificates >= 11.0
|
||||
@@ -138,12 +139,45 @@ then
|
||||
[ -h %{dir_mngr}/themes/default/public/js/jquery.min.map ] ||
|
||||
ln -s /usr/share/javascript/jquery/latest/jquery.min.map %{dir_mngr}/themes/default/public/js/jquery.min.map
|
||||
fi
|
||||
find %{dir_mngr}/lib/SrvMngr/I18N/Modules -type f -name '*.pm' -exec rm '{}' \;
|
||||
true
|
||||
|
||||
%files -f %{name}-%{version}-%{release}-filelist
|
||||
%defattr(-,root,root)
|
||||
|
||||
%changelog
|
||||
* Thu Jul 03 2025 Brian Read <brianr@koozali.org> 11.0.0-102.sme
|
||||
- Local Network panel: Make DEL and ADD robust even if called more than once by browser [SME: 13065]
|
||||
|
||||
* Wed Jul 02 2025 Brian Read <brianr@koozali.org> 11.0.0-101.sme
|
||||
- Fix busy cursor, csp intervened. [SME: 13064]
|
||||
|
||||
* Tue Jul 01 2025 Brian Read <brianr@koozali.org> 11.0.0-100.sme
|
||||
- Add code in top template default.html.ep to incorporate any panel specific js and css [SME: 13062]
|
||||
|
||||
* Mon Jun 30 2025 Brian Read <brianr@koozali.org> 11.0.0-99.sme
|
||||
- Directory panel - Add in open for config db as required by cacheing [SME: 13059]
|
||||
|
||||
* Sun Jun 29 2025 Brian Read <brianr@koozali.org> 11.0.0-98.sme
|
||||
- Re-factor email settings panel as error handling not working as expected. [SME: 12973]
|
||||
|
||||
* Sat Jun 28 2025 Brian Read <brianr@koozali.org> 11.0.0-97.sme
|
||||
- fix error handling in emailsettings panel [SME: 12973]
|
||||
|
||||
* Fri Jun 27 2025 Brian Read <brianr@koozali.org> 11.0.0-96.sme
|
||||
- Remove *.en files on install in spec file [SME: 13061]
|
||||
|
||||
* Tue Jun 24 2025 Brian Read <brianr@koozali.org> 11.0.0-95.sme
|
||||
- Add clock ticker to datetime panel [SME: 13054]
|
||||
- Add Test Server button for ntp server [SME: 13048]
|
||||
- Add checking that date is fully valid [SME: 13055]
|
||||
|
||||
* Thu Jun 19 2025 Brian Read <brianr@koozali.org> 11.0.0-94.sme
|
||||
- re-instate datetime routes in SrvMngr.pm - removed by mistake [SME: 13053]
|
||||
|
||||
* Thu Jun 19 2025 Brian Read <brianr@koozali.org> 11.0.0-93.sme
|
||||
- Sort out case of first letter of ctlact in routes added in from header on controller file [SME: 13053]
|
||||
|
||||
* Sun Jun 15 2025 Brian Read <brianr@koozali.org> 11.0.0-92.sme
|
||||
- rework datetime panel [SME: 13020]
|
||||
- Fix errors in error messages for local networks panel [SME: 13044]
|
||||
|
Reference in New Issue
Block a user