Compare commits
20 Commits
11_0_0-114
...
11_0_0-131
| Author | SHA1 | Date | |
|---|---|---|---|
| 99dc0a15da | |||
| 0dfbdf3d36 | |||
| 820551b076 | |||
| 1a37667a9c | |||
| c1aab3eb84 | |||
| 18442c0145 | |||
| 5c227a2032 | |||
| 8e270ef3fd | |||
| a04097bf5a | |||
| 9437dd792a | |||
| f03d82ebf7 | |||
| de2f78a089 | |||
| b838d9252a | |||
| 9c9ab91869 | |||
| 022b85bd69 | |||
| c6f8378881 | |||
| d720304f1a | |||
| 371a05379f | |||
| 7cb9591eb8 | |||
| a0524a7484 |
@@ -3,16 +3,14 @@
|
||||
|
||||
$haveSSL = (exists ${modSSL}{status} and ${modSSL}{status} eq "enabled") ? 'yes' : 'no';
|
||||
$plainTextAccess = ${'httpd-admin'}{PermitPlainTextAccess} || 'no';
|
||||
$plainPort = ${'httpd-e-smith'}{TCPPort} || '80';
|
||||
$adminPort2 = ${'smanager'}{TCPPort} || '982';
|
||||
$adminAccess = ${'smanager'}{access} || 'private';
|
||||
$sslPort = ${modSSL}{TCPPort} || '443';
|
||||
|
||||
$OUT = '';
|
||||
|
||||
foreach $place ('smanager')
|
||||
{
|
||||
if (($port eq $plainPort) && ($haveSSL eq 'yes') && ($plainTextAccess ne 'yes'))
|
||||
if (($port eq $httpPort) && ($haveSSL eq 'yes') && ($plainTextAccess ne 'yes'))
|
||||
{
|
||||
$OUT .= ' RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$' . "\n";
|
||||
$OUT .= " RewriteRule ^/$place(/.*|\$) https://%{HTTP_HOST}/$place\$1 [L,R]\n";
|
||||
@@ -24,14 +22,18 @@
|
||||
$OUT .= " ProxyPreserveHost On\n";
|
||||
$OUT .= " ProxyPass /$place http://127.0.0.1:$adminPort2 keepalive=On\n";
|
||||
$OUT .= " ProxyPassReverse /$place http://127.0.0.1:$adminPort2\n";
|
||||
$OUT .= " RequestHeader set X-Forwarded-Proto 'http'\n";
|
||||
if ($port eq $httpsPort)
|
||||
{
|
||||
# mod_auth_tkt needs to know the protocol to write 307 redirection
|
||||
$OUT .= " RequestHeader set X-Forwarded-Proto \"https\"\n";
|
||||
}
|
||||
|
||||
$OUT .= " <Location '/$place'>\n";
|
||||
if ($port eq $plainPort)
|
||||
if ($port eq $httpPort)
|
||||
{
|
||||
$OUT .= ' Require ip 127.0.0.1' . "\n";
|
||||
}
|
||||
elsif (($haveSSL eq 'yes') && ($port eq $sslPort) && ($adminAccess eq 'public'))
|
||||
elsif (($haveSSL eq 'yes') && ($port eq $httpsPort) && ($adminAccess eq 'public'))
|
||||
{
|
||||
$OUT .= "# public access requested in conf db\n";
|
||||
$OUT .= " Require all granted\n";
|
||||
@@ -40,15 +42,25 @@
|
||||
$OUT .= " Require ip $localAccess $externalSSLAccess\n";
|
||||
}
|
||||
# any smanager script or style added in line should be hashed and added here to run in a modern browser
|
||||
$OUT .= " Header set Content-Security-Policy \"script-src 'self' 'unsafe-eval' 'unsafe-hashes' "
|
||||
." 'sha256-X8Qwlk0M9iDTQZqFVpbVcThRjBqQXpwTOZCLX8I+Frk=' 'sha256-inQ04nmqTZI75Z5g/tAzjahedNugPFfrhxHyoFezFkM=' 'sha256-5IsIX+Vbow7wwy2RjR3+5X06R/0CQZPkw3OHj/228cM=' 'sha256-tfVskwioRaNsV75h89itf7FujMgIrodfs1Ea4UAJNpE=' 'sha256-P51OyslUh5bGkoWk9qY+o4Su4HuwNFoQcFCeNxF7Ms8=' ; "
|
||||
$OUT .= " Header set Content-Security-Policy \"script-src 'self' 'unsafe-eval' 'unsafe-hashes' "
|
||||
# list of hashes for script-src we accept and reference to find them
|
||||
." 'sha256-T5nv1LP9Xxdv7I1tsdTYprjvwoZyVEvfe8Y4TLx59pk='" # $(document).ready(function() \{ $('#tognav').click(function()
|
||||
." 'sha256-TxVHbw3t1mXreukND/yBI+H+CscZDpyxPoNoBrRhmSE=' " # (function($) \{ $.fn.swapClass = function(class1, class2)
|
||||
." 'sha256-30Xxu25YbRvjbQ2ngJ8EyneSz0No788PqjM9XbQh+qM=' " # ...const togglePassword...
|
||||
." 'sha256-5PrS/6zSCY/wROLKhAm4ymOuYsfvvScrC9Vp8FtOpxU=' " # nutups:316 window.onload = function() \{ SelectInput();
|
||||
." 'sha256-pxCVW6zyLaFSTIpOP2p4ULot8y+QsEmSEjKE54zDTWQ=' " # nutups:317 window.onload = function() \{ SelectInput();
|
||||
#." 'sha256-X8Qwlk0M9iDTQZqFVpbVcThRjBqQXpwTOZCLX8I+Frk=' 'sha256-inQ04nmqTZI75Z5g/tAzjahedNugPFfrhxHyoFezFkM=' 'sha256-5IsIX+Vbow7wwy2RjR3+5X06R/0CQZPkw3OHj/228cM=' 'sha256-tfVskwioRaNsV75h89itf7FujMgIrodfs1Ea4UAJNpE=' 'sha256-P51OyslUh5bGkoWk9qY+o4Su4HuwNFoQcFCeNxF7Ms8=' " #need valiation if still needed
|
||||
." ; "
|
||||
." style-src 'self' 'unsafe-hashes' "
|
||||
#'sha256-EhT63KK1JBrsUM27H+5RMNifDFpVB+GXcTtavKXwCK8=' #h2l1
|
||||
#'sha256-msdEhWmYTu7vqzGaQHDfvy6lzlDsbKkouwvN2R6Co9E=' #busy-indicator
|
||||
#'sha256-iYwYhiMcsGmXCUzLEpEzZNz5dINrlkqf1sLbLhEcqGM=' _footer.html.ep style="position:relative;"
|
||||
#'sha256-bOTFT8zacR4Rfja/WIKXgAQQXVaPyG3oBlvAhU4ga8g=' _usr_list style="min-width:35em"
|
||||
#'sha256-CP93jJ1Y8nMwUoDzFbo1srdgsbADPasAc0Wjig1ahpY=' groups style="min-width:15em"
|
||||
." 'sha256-msdEhWmYTu7vqzGaQHDfvy6lzlDsbKkouwvN2R6Co9E=' 'sha256-iYwYhiMcsGmXCUzLEpEzZNz5dINrlkqf1sLbLhEcqGM=' 'sha256-bOTFT8zacR4Rfja/WIKXgAQQXVaPyG3oBlvAhU4ga8g=' 'sha256-CP93jJ1Y8nMwUoDzFbo1srdgsbADPasAc0Wjig1ahpY=' 'sha256-EhT63KK1JBrsUM27H+5RMNifDFpVB+GXcTtavKXwCK8=' ;"
|
||||
# list of hashes for style-src we accept and reference to find them
|
||||
." 'sha256-EhT63KK1JBrsUM27H+5RMNifDFpVB+GXcTtavKXwCK8=' " #h2l1
|
||||
." 'sha256-msdEhWmYTu7vqzGaQHDfvy6lzlDsbKkouwvN2R6Co9E=' " # busy-indicator
|
||||
." 'sha256-iYwYhiMcsGmXCUzLEpEzZNz5dINrlkqf1sLbLhEcqGM=' " # _footer.html.ep style="position:relative;"
|
||||
." 'sha256-bOTFT8zacR4Rfja/WIKXgAQQXVaPyG3oBlvAhU4ga8g=' " # _usr_list style="min-width:35em"
|
||||
." 'sha256-CP93jJ1Y8nMwUoDzFbo1srdgsbADPasAc0Wjig1ahpY=' " # groups style="min-width:15em"
|
||||
." 'sha256-0Mf27W7YqYYDBxV28E9yUhPk/SHgCYEyL73kR5dJkDM=' " # useraccounts:410 useraccounts:506 and useraccounts:602 style = background:pink;
|
||||
." 'sha256-65hozXHuXYaN7oOyWz8cFCjqLsPmy6O7++aP2PECi5M=' " # legacypanel:306 style="width:99%;height:1784px;
|
||||
." ;"
|
||||
." \"\n";
|
||||
$OUT .= " </Location>\n";
|
||||
# prevent caching of manager files in browser
|
||||
|
||||
@@ -33,11 +33,13 @@ use esmith::I18N;
|
||||
use esmith::ConfigDB::UTF8;
|
||||
use esmith::NavigationDB; # no UTF8 raw is ok for ASCII only flat file
|
||||
|
||||
use Data::Dumper;
|
||||
|
||||
# Import the function(s) you need
|
||||
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 = '94.el8.sme';
|
||||
our $VERSION = '121.el8.sme';
|
||||
#Extract the release value
|
||||
if ($VERSION =~ /^(\d+)/) {
|
||||
$VERSION = $1; # $1 contains the matched numeric digits
|
||||
@@ -607,18 +609,20 @@ sub getNavigation {
|
||||
# Added: Check if user is non-admin and get their allowed panels
|
||||
if ($username ne '') {
|
||||
# Get the AccountsDB to check user permissions
|
||||
$is_admin = 0; # User is non-admin with specific panel access
|
||||
my $accountsdb = esmith::AccountsDB::UTF8->open_ro() or
|
||||
die "Couldn't open AccountsDB\n";
|
||||
|
||||
# Check if user has AdminPanels property
|
||||
my $user_rec = $accountsdb->get($username);
|
||||
if (defined $user_rec && $user_rec->prop('AdminPanels')) {
|
||||
$is_admin = 0; # User is non-admin with specific panel access
|
||||
# Get comma-separated list of allowed admin panels
|
||||
my $admin_panels = $user_rec->prop('AdminPanels');
|
||||
@allowed_admin_panels = split(/,/, $admin_panels);
|
||||
@allowed_admin_panels = $admin_panels eq '' ? () : split(/,/, $admin_panels);
|
||||
#@allowed_admin_panels = split(/,/, $admin_panels);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-----------------------------------------------------
|
||||
# Determine the directory where the functions are kept
|
||||
@@ -720,20 +724,20 @@ sub getNavigation {
|
||||
|
||||
# Added: Check if this is an admin menu item and if user has access
|
||||
if ($menucat eq 'A' && !$is_admin) {
|
||||
# Skip this admin panel if user doesn't have access to it
|
||||
# By default, deny access if no allowed_admin_panels are specified
|
||||
my $has_access = 0;
|
||||
my $file_no_ext = $file;
|
||||
$file_no_ext =~ s/\.pm$//; # Remove .pm extension if present
|
||||
foreach my $allowed_panel (@allowed_admin_panels) {
|
||||
if ($file_no_ext eq lc($allowed_panel)) {
|
||||
#die("Here!!$file $file_no_ext $allowed_panel ");
|
||||
$has_access = 1;
|
||||
last;
|
||||
if (@allowed_admin_panels) {
|
||||
my $file_no_ext = $file;
|
||||
$file_no_ext =~ s/\.pm$//; # Remove .pm extension if present
|
||||
foreach my $allowed_panel (@allowed_admin_panels) {
|
||||
if ($file_no_ext eq lc($allowed_panel)) {
|
||||
$has_access = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
next if !$has_access;
|
||||
}
|
||||
|
||||
next if $menu ne $menucat;
|
||||
|
||||
#--------------------------------------------------
|
||||
@@ -772,7 +776,7 @@ sub getNavigation {
|
||||
MENUCAT => $menucat
|
||||
};
|
||||
}
|
||||
|
||||
#die(Dumper(\%nav));
|
||||
return \%nav;
|
||||
|
||||
}
|
||||
|
||||
@@ -116,15 +116,38 @@ sub do_update {
|
||||
$ndb = esmith::NetworksDB::UTF8->open || die "Couldn't open networks db";
|
||||
my $notif = '';
|
||||
my $result = '';
|
||||
$hos_datas{'name'} = lc $c->param('Name');
|
||||
$hos_datas{'domain'} = lc $c->param('Domain');
|
||||
$hos_datas{'hostname'} = $c->param('Hostname');
|
||||
$hos_datas{'comment'} = $c->param('Comment');
|
||||
$hos_datas{'hosttype'} = $c->param('Hosttype');
|
||||
$hos_datas{'internalip'} = $c->param('Internalip');
|
||||
$hos_datas{'macaddress'} = $c->param('Macaddress');
|
||||
$hos_datas{'externalip'} = $c->param('Externalip');
|
||||
my $hostname = "$hos_datas{'name'}.$hos_datas{'domain'}";
|
||||
# Fetch parameters with forced scalar context and default empty string if undefined
|
||||
$hos_datas{'name'} = lc(scalar $c->param('Name') // '');
|
||||
$hos_datas{'domain'} = lc(scalar $c->param('Domain') // '');
|
||||
$hos_datas{'hostname'} = scalar $c->param('Hostname') // '';
|
||||
$hos_datas{'comment'} = scalar $c->param('Comment') // '';
|
||||
$hos_datas{'hosttype'} = scalar $c->param('Hosttype') // '';
|
||||
$hos_datas{'internalip'} = scalar $c->param('Internalip') // '';
|
||||
$hos_datas{'externalip'} = scalar $c->param('Externalip') // '';
|
||||
|
||||
my $hostname = "$hos_datas{'name'}.$hos_datas{'domain'}";
|
||||
|
||||
|
||||
if (my $hostrec = $hdb->get($hostname)) {
|
||||
my $hosttype = $hostrec->prop('HostType') // '';
|
||||
#$c->app->log->info("$hosttype $hos_datas{'hosttype'} $hos_datas{'comment'} $hostrec->prop('Comment')");
|
||||
# Clear comment if hosttype changes to 'self' and comment was not intentionally changed
|
||||
if ($hosttype ne 'Self'
|
||||
&& $hos_datas{'hosttype'} eq 'Self'
|
||||
&& $hos_datas{'comment'} eq $hostrec->prop('Comment')) {
|
||||
$hos_datas{'comment'} = '';
|
||||
}
|
||||
}
|
||||
|
||||
# Clear MAC address if hosttype is 'self', otherwise get from param
|
||||
if ($hos_datas{'hosttype'} eq 'Self') {
|
||||
$hos_datas{'macaddress'} = '';
|
||||
$hos_datas{'internalip'} = '';
|
||||
#$c->app->log->info("yes $hos_datas{'hosttype'} $hos_datas{'macaddress'}");
|
||||
} else {
|
||||
$hos_datas{'macaddress'} = scalar $c->param('Macaddress') // '';
|
||||
#$c->app->log->info("no $hos_datas{'hosttype'} $hos_datas{'macaddress'}");
|
||||
}
|
||||
|
||||
if ($trt eq 'ADD') {
|
||||
$hos_datas{'hostname'} = $hostname;
|
||||
@@ -521,4 +544,4 @@ sub must_be_local {
|
||||
# Not OK. The IP is not on any of our local networks.
|
||||
return $c->l('hos_ERR_IP_NOT_LOCAL');
|
||||
} ## end sub must_be_local
|
||||
1;
|
||||
1;
|
||||
@@ -163,7 +163,7 @@ sub get_ftp_access {
|
||||
my $status = get_prop('', 'ftp', 'status') || 'disabled';
|
||||
return 'off' unless $status eq 'enabled';
|
||||
my $access = get_prop('', 'ftp', 'access') || 'private';
|
||||
return ($access eq 'public') ? 'normal' : 'private';
|
||||
return ($access eq 'public') ? 'public' : 'private';
|
||||
} ## end sub get_ftp_access
|
||||
|
||||
#sub get_pptp_sessions {
|
||||
@@ -320,7 +320,7 @@ sub change_settings {
|
||||
$rec->set_prop('status', 'disabled');
|
||||
$rec->set_prop('access', 'private');
|
||||
$rec->set_prop('LoginAccess', 'private');
|
||||
} elsif ($rma_datas{ftpAccess} eq "normal") {
|
||||
} elsif ($rma_datas{ftpAccess} eq "public") {
|
||||
$rec->set_prop('status', 'enabled');
|
||||
$rec->set_prop('access', 'public');
|
||||
$rec->set_prop('LoginAccess', $rma_datas{ftpPasswordAccess});
|
||||
@@ -438,4 +438,4 @@ sub remove_valid_from {
|
||||
$db->get('httpd-admin')->set_prop('ValidFrom', $prop);
|
||||
return 1;
|
||||
} ## end sub remove_valid_from
|
||||
1;
|
||||
1;
|
||||
@@ -179,7 +179,7 @@ sub do_update {
|
||||
$res = $c->pseudonym_clash($first);
|
||||
$result .= $res unless $res eq 'OK';
|
||||
|
||||
if ($mail) {
|
||||
if (defined $mail) {
|
||||
$res = $c->emailforward($mail);
|
||||
$result .= $res unless $res eq 'OK';
|
||||
}
|
||||
@@ -217,7 +217,7 @@ sub do_update {
|
||||
$res = $c->pseudonym_clash($first);
|
||||
$result .= $res unless $res eq 'OK';
|
||||
|
||||
if ($mail) {
|
||||
if (defined $mail) {
|
||||
$res = $c->emailforward($mail);
|
||||
$result .= $res unless $res eq 'OK';
|
||||
}
|
||||
@@ -554,27 +554,31 @@ sub pseudonym_clash {
|
||||
|
||||
sub emailforward {
|
||||
my ($c, $data) = @_;
|
||||
my $response = $c->email_simple($data);
|
||||
#$c->app->log->info("emailformward called with $data!");
|
||||
|
||||
if ($response eq "OK") {
|
||||
return "OK";
|
||||
} elsif ($data eq "") {
|
||||
# Trim whitespace from $data
|
||||
$data =~ s/^\s+|\s+$//g if defined $data;
|
||||
|
||||
# Blank is ok, only if we're not forwarding, which means that the
|
||||
# EmailForward param must be set to 'local'.
|
||||
# Check simple email validation first
|
||||
return "OK" if $c->email_simple($data) eq "OK";
|
||||
|
||||
# If trimmed data is empty
|
||||
if ($data eq "") {
|
||||
my $email_forward = $c->param('EmailForward') || '';
|
||||
$email_forward =~ s/^\s+|\s+$//g;
|
||||
return 'OK' if $email_forward eq 'local';
|
||||
return $c->l('usr_CANNOT_CONTAIN_WHITESPACE');
|
||||
} else {
|
||||
return $c->l('usr_CANNOT_CONTAIN_WHITESPACE')
|
||||
if ($data =~ /\s+/);
|
||||
}
|
||||
|
||||
# Permit a local address.
|
||||
return "OK" if $data =~ /^[a-zA-Z][a-zA-Z0-9\._\-]*$/;
|
||||
return $c->l('usr_UNACCEPTABLE_CHARS');
|
||||
} ## end else [ if ($response eq "OK")]
|
||||
} ## end sub emailforward
|
||||
# Reject if $data contains any whitespace inside
|
||||
return $c->l('usr_CANNOT_CONTAIN_WHITESPACE') if $data =~ /\s/;
|
||||
|
||||
# Allow local address pattern
|
||||
return "OK" if $data =~ /^[a-zA-Z][a-zA-Z0-9._-]*$/;
|
||||
|
||||
# Otherwise reject for unacceptable chars
|
||||
return $c->l('usr_UNACCEPTABLE_CHARS');
|
||||
}
|
||||
|
||||
sub get_groups {
|
||||
my ($c) = shift;
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
.legacy-embedded {
|
||||
width: 99%;
|
||||
height: 600px; /* fallback default, matches your $height default */
|
||||
}
|
||||
@@ -502,4 +502,25 @@ div.success, span.success {
|
||||
div.roundcube #roundcube{
|
||||
width:100%;
|
||||
height:600px;
|
||||
}
|
||||
|
||||
.center {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%; /* adjust as needed */
|
||||
}
|
||||
|
||||
.left-btn {
|
||||
/* Left aligned */
|
||||
}
|
||||
|
||||
.center-btn {
|
||||
/* Center aligned */
|
||||
margin-left: auto!important;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.incolumn {
|
||||
margin:auto;
|
||||
color:red;
|
||||
}
|
||||
@@ -63,7 +63,7 @@
|
||||
position: absolute;
|
||||
left: 7%;
|
||||
transform: translateX(-50%);
|
||||
background-color: #4caf50b8;
|
||||
background-color: #4caf50;
|
||||
color: white !important;
|
||||
border: none;
|
||||
padding: 8px;
|
||||
@@ -122,6 +122,7 @@
|
||||
max-width: 100%;
|
||||
position: relative;
|
||||
margin: auto;
|
||||
margin-top:-20px;
|
||||
}
|
||||
|
||||
#header2 {
|
||||
@@ -290,4 +291,8 @@ background-color: #e8f3e1;
|
||||
}
|
||||
.busy {
|
||||
cursor: wait; /* Change the cursor to a 'wait' cursor */
|
||||
}
|
||||
|
||||
#swt_theme {
|
||||
margin-left:10px;
|
||||
}
|
||||
@@ -263,8 +263,12 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
function displayLocaleAndFlag() {
|
||||
// Get the browser locale
|
||||
const userLocale = navigator.language || navigator.userLanguage;
|
||||
const userLocale = navigator.languages && navigator.languages.length
|
||||
? navigator.languages[0]
|
||||
: navigator.language;
|
||||
|
||||
//alert(`User Locale: ${userLocale}`); // Alert the detected locale
|
||||
console.log(navigator.languages); // Log language to console
|
||||
|
||||
const { flag, isUnknown, countryCode } = getFlagEmoji(userLocale);
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var obj = document.getElementById('legacy-embedded');
|
||||
if (obj && obj.dataset.legacyHeight) {
|
||||
obj.style.height = obj.dataset.legacyHeight;
|
||||
}
|
||||
});
|
||||
@@ -30,14 +30,27 @@ $(document).ready(function() {
|
||||
});
|
||||
});
|
||||
|
||||
// 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');
|
||||
});
|
||||
$('form').on('submit', function(event) {
|
||||
// Change submit buttons to look disabled and update their labels without disabling
|
||||
$(this).find('button[type="submit"]').each(function() {
|
||||
$(this).text('Please wait...').addClass('visually-disabled').css({
|
||||
'pointer-events': 'none',
|
||||
'opacity': '0.6',
|
||||
'cursor': 'not-allowed'
|
||||
});
|
||||
});
|
||||
$(this).find('input[type="submit"]').each(function() {
|
||||
$(this).val('Please wait...').addClass('visually-disabled').css({
|
||||
'pointer-events': 'none',
|
||||
'opacity': '0.6',
|
||||
'cursor': 'not-allowed'
|
||||
});
|
||||
});
|
||||
|
||||
// Add busy cursor to body
|
||||
$('body').addClass('busy');
|
||||
|
||||
// Allow form to submit normally without disabling the buttons
|
||||
});
|
||||
});
|
||||
@@ -1 +1 @@
|
||||
<script src='js/jquery.min.js' type='text/javascript'></script>
|
||||
<!--<script src='js/jquery.min.js' type='text/javascript'></script>-->
|
||||
@@ -14,10 +14,18 @@
|
||||
</div>
|
||||
% }
|
||||
<h1> Embedded - <%= $title %></h1><br>
|
||||
<p>If the legacy panel does not appear, then you may not be logged into the original Server manager.<br />You can log in by clicking <a href="/server-manager" target='_blank'>here</a>. Or by clicking on the "Legacy SM" button at the top of the window.</p>
|
||||
% my $height = $c->stash('height') | '600px';
|
||||
<p>If the legacy panel does not appear, then you may not be logged into the original Server manager.<br />You can log in by clicking <a href="/server-manager" target='_blank'>here</a>.</p>
|
||||
% my $height = $c->stash('height') || '600px';
|
||||
% if ( $height !~ /px$/ ) { $height = $height . 'px'; }
|
||||
<object id="legacy-embedded" class="legacy-embedded" data="<%= $c->stash('modul') %>" style="width:99%;height:<%= $height %>;" title="<%= $c->stash('title') %>" type="text/html" ><%= $c->stash('title') %> not found</object>
|
||||
% # Add the height as a data attribute
|
||||
<object id="legacy-embedded"
|
||||
class="legacy-embedded"
|
||||
data="<%= $c->stash('modul') %>"
|
||||
data-legacy-height="<%= $height %>"
|
||||
title="<%= $c->stash('title') %>"
|
||||
type="text/html">
|
||||
<%= $c->stash('title') %> not found
|
||||
</object>
|
||||
</div>
|
||||
|
||||
% end
|
||||
% end
|
||||
@@ -21,12 +21,12 @@
|
||||
%= 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'
|
||||
%= javascript '/js/pdfmake.min.js'
|
||||
%#= javascript '/js/dataTables.buttons.min.js'
|
||||
%#= javascript '/js/jszip.min.js'
|
||||
%#= javascript '/js/pdfmake.min.js'
|
||||
%= javascript '/js/vfs_fonts.js'
|
||||
%= javascript '/js/buttons.html5.min.js'
|
||||
%= javascript '/js/buttons.print.min.js'
|
||||
%#= javascript '/js/buttons.html5.min.js'
|
||||
%#= javascript '/js/buttons.print.min.js'
|
||||
%= javascript '/js/flag-by-locale.js'
|
||||
%= javascript '/js/sme-password.js'
|
||||
|
||||
|
||||
@@ -51,73 +51,77 @@
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $domain_name = $domain->{Domain}; # Domain name extracted from the data structure
|
||||
% my $actionModify = qq{
|
||||
% <a href="domains2?CsrfDef=$csrf_token&trt=UPD&Domain=$domain_name">
|
||||
% <button type='button' class='sme-modify-button' title='$modify_text' >
|
||||
% $modify_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% my $removable = ( $domain->{Removable} || 'yes' );
|
||||
% my $actionRemove = ' ';
|
||||
% if ($removable eq 'yes') {
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $domain_name = $domain->{Domain}; # Domain name extracted from the data structure
|
||||
% $actionRemove = qq{
|
||||
% <a href="domains2?CsrfDef=$csrf_token&trt=DEL&Domain=$domain_name">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
%# $actionRemove = "<a href='domains2?CsrfDef=TOKEN&trt=DEL&Domain=" . $domain->{Domain} . "'>" . "<button class='sme-remove-button' title=".l('REMOVE').">".l('REMOVE')."</button>" . "</a>";
|
||||
% <a href="domains2?CsrfDef=$csrf_token&trt=UPD&Domain=$domain_name"
|
||||
% class="sme-modify-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$modify_text" aria-label="$modify_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-pencil"></span>
|
||||
% <span class="ui-button-text">$modify_text</span>
|
||||
% </a>
|
||||
% };
|
||||
<td class='sme-border' style="min-width:15em">
|
||||
<%= $c->render_to_string( inline => $actionModify ) %> <%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
% my $removable = ( $domain->{Removable} || 'yes' );
|
||||
% my $actionRemove = ' ';
|
||||
% if ($removable eq 'yes') {
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $domain_name = $domain->{Domain}; # Domain name extracted from the data structure
|
||||
% $actionRemove = qq{
|
||||
% <a href="domains2?CsrfDef=$csrf_token&trt=DEL&Domain=$domain_name"
|
||||
% class="sme-remove-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-delete"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
%# $actionRemove = "<a href='domains2?CsrfDef=TOKEN&trt=DEL&Domain=" . $domain->{Domain} . "'>" . "<button class='sme-remove-button' title=".l('REMOVE').">".l('REMOVE')."</button>" . "</a>";
|
||||
% };
|
||||
<td class='sme-border' style="min-width:15em">
|
||||
<%= $c->render_to_string( inline => $actionModify ) %> <%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
%= hidden_field 'trt' => 'ADD'
|
||||
%= hidden_field 'trt' => 'ADD'
|
||||
|
||||
%= form_for '/domains' => ( method => 'POST' ) => begin
|
||||
%= form_for '/domains' => ( method => 'POST' ) => begin
|
||||
|
||||
<!-- <HR class="sectionbar">-->
|
||||
<br>
|
||||
<!-- <HR class="sectionbar">-->
|
||||
<br>
|
||||
|
||||
% my $btn2 = l('dom_DOMAINS_PAGE_CORPORATE_DNS');
|
||||
% my $btn2 = l('dom_DOMAINS_PAGE_CORPORATE_DNS');
|
||||
|
||||
<h3>
|
||||
%= l 'dom_DESC_CORPORATE_DNS_CURRENT'
|
||||
</h3>
|
||||
|
||||
<p>
|
||||
<span class=label>
|
||||
%= l 'dom_LABEL_CORPORATE_DNS_PRIMARY'
|
||||
</span><span class=data>
|
||||
%= $dom_datas->{forwarder}
|
||||
</span>
|
||||
</p>
|
||||
|
||||
% if ($dom_datas->{forwarder2}) {
|
||||
<p>
|
||||
<span class=label>
|
||||
%= l 'dom_LABEL_CORPORATE_DNS_SECONDARY'
|
||||
</span><span class=data>
|
||||
%= $dom_datas->{forwarder2}
|
||||
</span>
|
||||
</p>
|
||||
% }
|
||||
<h3>
|
||||
%= l 'dom_DESC_CORPORATE_DNS_CURRENT'
|
||||
</h3>
|
||||
|
||||
<p>
|
||||
%= submit_button "$btn2", class => 'action'
|
||||
<span class=label>
|
||||
%= l 'dom_LABEL_CORPORATE_DNS_PRIMARY'
|
||||
</span><span class=data>
|
||||
%= $dom_datas->{forwarder}
|
||||
</span>
|
||||
</p>
|
||||
%= hidden_field 'trt' => 'UP2'
|
||||
% end
|
||||
|
||||
% if ($dom_datas->{forwarder2}) {
|
||||
<p>
|
||||
<span class=label>
|
||||
%= l 'dom_LABEL_CORPORATE_DNS_SECONDARY'
|
||||
</span><span class=data>
|
||||
%= $dom_datas->{forwarder2}
|
||||
</span>
|
||||
</p>
|
||||
% }
|
||||
|
||||
<p>
|
||||
%= submit_button "$btn2", class => 'action'
|
||||
</p>
|
||||
%= hidden_field 'trt' => 'UP2'
|
||||
% end
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -35,38 +35,40 @@
|
||||
|
||||
% foreach my $group (@$groups)
|
||||
% {
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $group_name = $group->key; # group name extracted from the data structure
|
||||
<tr>
|
||||
%= t td => ( class => 'sme-border' ) => $group->key
|
||||
%= t td => ( class => 'sme-border' ) => $group->prop('Description')
|
||||
<td class='sme-border' style="min-width:15em">
|
||||
% my $modify_text = l('MODIFY'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $group_name = $group->key; # group name extracted from the data structure
|
||||
% my $actionModify = qq{
|
||||
% <a href="groups2?CsrfDef=$csrf_token&trt=UPD&group=$group_name">
|
||||
% <button type='button' class='sme-modify-button' title='$modify_text' >
|
||||
% $modify_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $group_name = $group->key; # group name extracted from the data structure
|
||||
% my $actionRemove = qq{
|
||||
% <a href="groups2?CsrfDef=$csrf_token&trt=DEL&group=$group_name">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% </button>
|
||||
% <a href="groups2?CsrfDef=$csrf_token&trt=UPD&group=$group_name"
|
||||
% class="sme-modify-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$modify_text" aria-label="$modify_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-pencil"></span>
|
||||
% <span class="ui-button-text">$modify_text</span>
|
||||
% </a>
|
||||
% };
|
||||
<%= $c->render_to_string( inline => $actionModify ) %> <%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
</p>
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $actionRemove = qq{
|
||||
% <a href="groups2?CsrfDef=$csrf_token&trt=DEL&group=$group_name"
|
||||
% class="sme-remove-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-delete"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
<%= $c->render_to_string( inline => $actionModify ) %> <%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -2,11 +2,12 @@
|
||||
<div id="header2" class="hd2 module gradient-panel">
|
||||
<img src="images/KoozaliServerManager.png" alt="Koozali Logo" class="logo" >
|
||||
% if ( not defined $c->session->{username} ) {
|
||||
<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="login">Login</a></button>
|
||||
<a class="login-button no-visited-state" target="_parent" href="/smanager/login">Login</a>
|
||||
% } else {
|
||||
<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="logout">Logout <%= $c->session->{username} %></a></button>
|
||||
<!--<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="/smanager/logout">Logout <%= $c->session->{username} %></a></button>xxx-->
|
||||
<a class="login-button no-visited-state" target="_parent" href="/smanager/logout">Logout <%= $c->session->{username} %></a>
|
||||
% }
|
||||
<div id="flag-container" class = "flag-style">
|
||||
<!-- The flag icon will be inserted here -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -57,28 +57,32 @@
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $hostentries_name = $_->{'HostName'}; # hostentries name extracted from the data structure
|
||||
% $actionModify = qq{
|
||||
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=UPD&Hostname=$hostentries_name">
|
||||
% <button type='button' class='sme-modify-button' title='$modify_text' >
|
||||
% $modify_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% $csrf_token = "TOKEN"; # CSRF token for security
|
||||
%# my $hostentries_name = $_->{'HostName'}; # hostentries name extracted from the data structure
|
||||
% $actionRemove = qq{
|
||||
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=DEL&Hostname=$hostentries_name">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% </button>
|
||||
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=UPD&Hostname=$hostentries_name"
|
||||
% class="sme-modify-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$modify_text" aria-label="$modify_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-pencil"></span>
|
||||
% <span class="ui-button-text">$modify_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
<%= $c->render_to_string( inline => $actionModify ) %> <%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% $csrf_token = "TOKEN"; # CSRF token for security
|
||||
%# my $hostentries_name = $_->{'HostName'}; # hostentries name extracted from the data structure
|
||||
% $actionRemove = qq{
|
||||
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=DEL&Hostname=$hostentries_name"
|
||||
% class="sme-remove-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-delete"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<%= $c->render_to_string( inline => $actionModify ) %> <%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</div>
|
||||
</tbody>
|
||||
</table>
|
||||
% }
|
||||
</div>
|
||||
@@ -53,59 +53,65 @@
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $ibays_entry_name = $ibay->key; # ibays_entry name extracted from the data structure
|
||||
% $actionModify = qq{
|
||||
% <a href="ibaysd?CsrfDef=$csrf_token&trt=UPD&ibay=$ibays_entry_name">
|
||||
% <button type='button' class='sme-modify-button' title='$modify_text' >
|
||||
% $modify_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
% <a href="ibaysd?CsrfDef=$csrf_token&trt=UPD&ibay=$ibays_entry_name"
|
||||
% class="sme-modify-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$modify_text" aria-label="$modify_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-pencil"></span>
|
||||
% <span class="ui-button-text">$modify_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
|
||||
% if ($passwordable eq 'yes') {
|
||||
% my $password_text = l('PASSWORD_RESET'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $ibays_entry_name = $ibay->key; # ibays_entry name extracted from the data structure
|
||||
% if ($ibay->prop('PasswordSet') ne 'yes' && $needPassword) {
|
||||
% $actionResetPw = qq{
|
||||
% <a href="ibaysd?CsrfDef=$csrf_token&trt=PWD&ibay=$ibays_entry_name">
|
||||
% <button type='button' class='sme-password-button unset' title="$password_text - currently unset" style = background:pink; >
|
||||
% $password_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% } else {
|
||||
% $actionResetPw = qq{
|
||||
% <a href="ibaysd?CsrfDef=$csrf_token&trt=PWD&ibay=$ibays_entry_name">
|
||||
% <button type='button' class='sme-password-button' title='$password_text' >
|
||||
% $password_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
|
||||
% }
|
||||
|
||||
% if ($removable eq 'yes') {
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $ibays_entry_name = $ibay->key; # ibays_entry name extracted from the data structure
|
||||
% $actionRemove = qq{
|
||||
% <a href="ibaysd?CsrfDef=$csrf_token&trt=DEL&ibay=$ibays_entry_name">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% if ($passwordable eq 'yes') {
|
||||
% my $password_text = l('PASSWORD_RESET'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $ibays_entry_name = $ibay->key; # ibays_entry name extracted from the data structure
|
||||
% if ($ibay->prop('PasswordSet') ne 'yes' && $needPassword) {
|
||||
% $actionResetPw = qq{
|
||||
% <a href="ibaysd?CsrfDef=$csrf_token&trt=PWD&ibay=$ibays_entry_name">
|
||||
% <button type='button' class='sme-password-button unset' title="$password_text - currently unset" style = background:pink; >
|
||||
% $password_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
<%= $c->render_to_string( inline => $actionModify ) %>
|
||||
<%= $c->render_to_string( inline => $actionResetPw ) %>
|
||||
<%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% } else {
|
||||
% $actionResetPw = qq{
|
||||
% <a href="ibaysd?CsrfDef=$csrf_token&trt=PWD&ibay=$ibays_entry_name"
|
||||
% class="sme-password-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$password_text" aria-label="$password_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-refresh"></span>
|
||||
% <span class="ui-button-text">$password_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
|
||||
% }
|
||||
|
||||
% if ($removable eq 'yes') {
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $ibays_entry_name = $ibay->key; # ibays_entry name extracted from the data structure
|
||||
% $actionRemove = qq{
|
||||
% <a href="ibaysd?CsrfDef=$csrf_token&trt=DEL&ibay=$ibays_entry_name"
|
||||
% class="sme-remove-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-delete"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
<%= $c->render_to_string( inline => $actionModify ) %>
|
||||
<%= $c->render_to_string( inline => $actionResetPw ) %>
|
||||
<%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -80,18 +80,20 @@
|
||||
% my $local_network_entry = $localnetwork->key;
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% $actionRemove = qq{
|
||||
% <a href="localnetworksd?CsrfDef=$csrf_token&trt=DEL&localnetwork=$local_network_entry">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
<td class='sme-border'><%= $c->render_to_string( inline => $actionRemove ) %></td>
|
||||
</tr>
|
||||
% <a href="localnetworksd?CsrfDef=$csrf_token&trt=DEL&localnetwork=$local_network_entry"
|
||||
% class="sme-remove-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-delete"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
%= hidden_field 'trt' => $ln_datas->{trt}
|
||||
% }
|
||||
</div>
|
||||
<td class='sme-border'><%= $c->render_to_string( inline => $actionRemove ) %></td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
%= hidden_field 'trt' => $ln_datas->{trt}
|
||||
% }
|
||||
</div>
|
||||
@@ -2,14 +2,14 @@
|
||||
% my %nav = %{ SrvMngr->getNavigation( $c->languages(), 'N' ) };
|
||||
|
||||
<div id='navmenu'>
|
||||
<!-- <a href='#' id='tognav' class='menu-title'>NAVIGATION</a> -->
|
||||
<!-- <a href='#' id='tognav' class='menu-title'>NAVIGATION</a> ffff-->
|
||||
<div id='menunav'>
|
||||
|
||||
% my $cc = 200;
|
||||
% foreach my $h (sort { ($nav{$a}{'WEIGHT'}/$nav{$a}{'COUNT'})
|
||||
% <=> ($nav{$b}{'WEIGHT'}/$nav{$b}{'COUNT'}) } keys %nav) {
|
||||
%
|
||||
<!-- div class='section section-title'><%= $h %></div -->
|
||||
<!-- div class='section section-title'><%= $h %></div gggg-->
|
||||
<div><a href='#' class='section section-title'><%= $h %></a></div>
|
||||
<div class='togms'>
|
||||
% my ( $classNew, $target, $href ) = '';
|
||||
@@ -33,4 +33,4 @@
|
||||
|
||||
% }
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2,7 +2,7 @@
|
||||
% my %nav = %{ SrvMngr->getNavigation( $c->languages(), 'A' ) };
|
||||
|
||||
<div id='navigat2'>
|
||||
<!-- ><div><a href='#' id='togadm' class='menu-title'>ADMINISTRATION</a></div> -->
|
||||
<!-- <div><a href='#' id='togadm' class='menu-title'>ADMINISTRATION</a></div> dddd-->
|
||||
<div id='menuadm'>
|
||||
|
||||
% my $cc = 100;
|
||||
@@ -35,4 +35,4 @@
|
||||
% }
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -96,21 +96,23 @@
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $actionRemove = qq{
|
||||
% <a href="portforwardingd?CsrfDef=$csrf_token&trt=DEL&sport=$sport&proto=$proto">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
<%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
% <a href="portforwardingd?CsrfDef=$csrf_token&trt=DEL&sport=$sport&proto=$proto"
|
||||
% class="sme-remove-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-delete"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
<%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
% }
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
%= hidden_field 'trt' => $pf_datas->{trt}
|
||||
% }
|
||||
% }
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
%= hidden_field 'trt' => $pf_datas->{trt}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -62,20 +62,22 @@
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $printer_name = $printer->key;
|
||||
% my $actionRemove = qq{
|
||||
% <a href="printers2?CsrfDef=$csrf_token&trt=DEL&&printer=$printer_name">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
<%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
</p>
|
||||
% <a href="printers2?CsrfDef=$csrf_token&trt=DEL&&printer=$printer_name"
|
||||
% class="sme-remove-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-delete"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
<%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -61,36 +61,40 @@
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $pseudonyms_entry_name = $pseudonym->key; # pseudonyms_entry name extracted from the data structure
|
||||
% $actionModify = qq{
|
||||
% <a href="pseudonyms2?CsrfDef=$csrf_token&trt=UPD&pseudonym=$pseudonyms_entry_name">
|
||||
% <button type='button' class='sme-modify-button' title='$modify_text' >
|
||||
% $modify_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
|
||||
% if ($removable eq 'yes') {
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $pseudonyms_entry_name = $pseudonym->key; # pseudonyms_entry name extracted from the data structure
|
||||
% $actionRemove = qq{
|
||||
% <a href="pseudonyms2?CsrfDef=$csrf_token&trt=DEL&pseudonym=$pseudonyms_entry_name">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% </button>
|
||||
% <a href="pseudonyms2?CsrfDef=$csrf_token&trt=UPD&pseudonym=$pseudonyms_entry_name"
|
||||
% class="sme-modify-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$modify_text" aria-label="$modify_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-pencil"></span>
|
||||
% <span class="ui-button-text">$modify_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
<%= $c->render_to_string( inline => $actionModify ) %> <%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
% }
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
% if ($removable eq 'yes') {
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $pseudonyms_entry_name = $pseudonym->key; # pseudonyms_entry name extracted from the data structure
|
||||
% $actionRemove = qq{
|
||||
% <a href="pseudonyms2?CsrfDef=$csrf_token&trt=DEL&pseudonym=$pseudonyms_entry_name"
|
||||
% class="sme-remove-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-delete"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
</p>
|
||||
<%= $c->render_to_string( inline => $actionModify ) %> <%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -62,21 +62,23 @@
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $quota_user_name = $user->key; # quotas_entry name extracted from the data structure
|
||||
% my $actionModify = qq{
|
||||
% <a href="quotad?CsrfDef=$csrf_token&trt=UPD&user=$quota_user_name">
|
||||
% <button type='button' class='sme-modify-button' title='$modify_text' >
|
||||
% $modify_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
<%= $c->render_to_string( inline => $actionModify ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
</p>
|
||||
% <a href="quotad?CsrfDef=$csrf_token&trt=UPD&user=$quota_user_name"
|
||||
% class="sme-modify-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$modify_text" aria-label="$modify_text"
|
||||
% style="background:white;">
|
||||
% <span class="ui-icon ui-icon-pencil"></span>
|
||||
% <span class="ui-button-text">$modify_text</span>
|
||||
% </a>
|
||||
% };
|
||||
<%= $c->render_to_string( inline => $actionModify ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
<% } %>
|
||||
</p>
|
||||
|
||||
%= hidden_field 'trt' => $quo_datas->{trt}
|
||||
%= hidden_field 'trt' => $quo_datas->{trt}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -9,7 +9,7 @@
|
||||
% my $cc = 300;
|
||||
% foreach my $h (sort { ($nav{$a}{'WEIGHT'}/$nav{$a}{'COUNT'})
|
||||
% <=> ($nav{$b}{'WEIGHT'}/$nav{$b}{'COUNT'}) } keys %nav) {
|
||||
<!-- div class='section'><%= $h %></div -->
|
||||
<!-- div class='section'><%= $h %></div> nnnn-->
|
||||
% my ( $classNew, $target, $href ) = '';
|
||||
% foreach (sort { $a->{'WEIGHT'} <=> $b->{'WEIGHT'} } @{$nav{$h}{'DESCRIPTIONS'}}) {
|
||||
% next if ( $_->{'MENUCAT'} ne 'A' && $_->{'MENUCAT'} ne 'U' ); # menu User
|
||||
@@ -29,4 +29,4 @@
|
||||
% }
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -66,93 +66,102 @@
|
||||
% my $password_text = l("PASSWORD_RESET");
|
||||
% if ($useraccounts_user_name eq 'admin') {
|
||||
% $actionModify = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=UPS&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-modify-button' title='$modify_text'>
|
||||
% $modify_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% $actionResetPw = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=PWS&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-password-button' title='$password_text' >
|
||||
% $password_text
|
||||
% </button>
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=UPS&user=$useraccounts_user_name"
|
||||
% class="sme-modify-button ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$modify_text" aria-label="$modify_text">
|
||||
% <span class="ui-icon ui-icon-pencil"></span>
|
||||
% <span class="ui-button-text">$modify_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% } else {
|
||||
% $actionModify = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=UPD&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-modify-button' title='$modify_text' >
|
||||
% $modify_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
% if ($password_set ne 'yes') {
|
||||
% $actionLock = l('ACCOUNT_LOCKED');
|
||||
% $actionResetPw = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=PWD&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-password-button unset' title="$password_text - currently unset" style = background:pink; >
|
||||
% $password_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% } elsif ($useraccounts_user_name ne 'admin') {
|
||||
% my $lock_text = l('ACCOUNT LOCKED'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
% $actionLock = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=LCK&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-lock-button' title='$lock_text' >
|
||||
% $lock_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% $actionResetPw = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=PWD&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-password-button' title='$password_text' >
|
||||
% $password_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
% if ( $removable eq 'yes' ) {
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% $actionRemove = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=DEL&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
% $remove_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=PWS&user=$useraccounts_user_name"
|
||||
% class="sme-password-button ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$password_text" aria-label="$password_text">
|
||||
% <span class="ui-icon ui-icon-refresh"></span>
|
||||
% <span class="ui-button-text">$password_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% } else {
|
||||
% $actionModify = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=UPD&user=$useraccounts_user_name"
|
||||
% class="sme-modify-button ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$modify_text" aria-label="$modify_text">
|
||||
% <span class="ui-icon ui-icon-pencil"></span>
|
||||
% <span class="ui-button-text">$modify_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
% if ($password_set ne 'yes') {
|
||||
% $actionLock = l('ACCOUNT_LOCKED');
|
||||
% $actionResetPw = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=PWD&user=$useraccounts_user_name"
|
||||
% class="sme-password-button unset ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$password_text" aria-label="$password_text"
|
||||
% style="background:pink;">
|
||||
% <span class="ui-icon ui-icon-refresh"></span>
|
||||
% <span class="ui-button-text">$password_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% } elsif ($useraccounts_user_name ne 'admin') {
|
||||
% my $lock_text = l('LOCK_ACCOUNT'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
% $actionLock = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=LCK&user=$useraccounts_user_name"
|
||||
% class="sme-lock-button ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$lock_text" aria-label="$lock_text">
|
||||
% <span class="ui-icon ui-icon-locked"></span>
|
||||
% <span class="ui-button-text">$lock_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% $actionResetPw = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=PWD&user=$useraccounts_user_name"
|
||||
% class="sme-password-button ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$password_text" aria-label="$password_text">
|
||||
% <span class="ui-icon ui-icon-refresh"></span>
|
||||
% <span class="ui-button-text">$password_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
% if ( $removable eq 'yes' ) {
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% $actionRemove = qq{
|
||||
% <a href="useraccountsd?CsrfDef=$csrf_token&trt=DEL&user=$useraccounts_user_name"
|
||||
% class="sme-remove-button ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$remove_text" aria-label="$remove_text">
|
||||
% <span class="ui-icon ui-icon-trash"></span>
|
||||
% <span class="ui-button-text">$remove_text</span>
|
||||
% </a>
|
||||
% };
|
||||
% }
|
||||
|
||||
% my $thisdomain = $c->req->url->to_abs->host;
|
||||
% my $roundcube_text = l('Webmail'); # Localized text
|
||||
% $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
% $actionroundcube = qq{
|
||||
% <a href="roundcubepanel?CsrfDef=$csrf_token&url=https://$thisdomain/roundcube?_user=$useraccounts_user_name&height=600px">
|
||||
% <button type='button' class='sme-email-button' title='$roundcube_text' >
|
||||
% $roundcube_text
|
||||
% </button>
|
||||
% </a>
|
||||
% };
|
||||
<td class='sme-border' style="min-width:35em">
|
||||
<%= $c->render_to_string( inline => $actionModify ) %>
|
||||
<%= $c->render_to_string( inline => $actionResetPw ) %>
|
||||
<%= $c->render_to_string( inline => $actionLock ) %>
|
||||
<%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
<%= $c->render_to_string( inline => $actionroundcube ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
% my $thisdomain = $c->req->url->to_abs->host;
|
||||
% my $roundcube_text = l('Webmail'); # Localized text
|
||||
% $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
% $actionroundcube = qq{
|
||||
% <a href="roundcubepanel?CsrfDef=$csrf_token&url=https://$thisdomain/roundcube?_user=$useraccounts_user_name&height=600px"
|
||||
% class="sme-email-button ui-button ui-corner-all ui-widget ui-button-icon-only"
|
||||
% title="$roundcube_text" aria-label="$roundcube_text">
|
||||
% <span class="ui-icon ui-icon-mail-closed"></span>
|
||||
% <span class="ui-button-text">$roundcube_text</span>
|
||||
% </a>
|
||||
% };
|
||||
<td class='sme-border' style="min-width:35em">
|
||||
<%= $c->render_to_string( inline => $actionModify ) %>
|
||||
<%= $c->render_to_string( inline => $actionResetPw ) %>
|
||||
<%= $c->render_to_string( inline => $actionLock ) %>
|
||||
<%= $c->render_to_string( inline => $actionRemove ) %>
|
||||
<%= $c->render_to_string( inline => $actionroundcube ) %>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<% } %>
|
||||
<% } %>
|
||||
|
||||
%= hidden_field 'trt' => $usr_datas->{trt}
|
||||
%= hidden_field 'trt' => $usr_datas->{trt}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -131,7 +131,7 @@
|
||||
%= l 'usr_GROUP_MEMBERSHIPS'
|
||||
</span>
|
||||
<span class=data>
|
||||
<table class="sme-border "><thead>
|
||||
<table class="sme-border incolumn"><thead>
|
||||
<tr><th class='sme-border'>
|
||||
%= l 'usr_MEMBER'
|
||||
</th><th class='sme-border'>
|
||||
@@ -182,4 +182,4 @@
|
||||
|
||||
% end
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -5,11 +5,8 @@
|
||||
|
||||
% if (config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper "<pf>" . $c->current_route
|
||||
%= dumper $c->stash("ret")
|
||||
%= dumper $c->stash("portforwarding")
|
||||
% my $ref = $pf_datas->{portforwarding};
|
||||
%= dumper $ref->{TCP}->[0] . "</pf>"
|
||||
%= dumper $c->current_route
|
||||
%= dumper $pf_datas
|
||||
</p>
|
||||
% }
|
||||
|
||||
@@ -29,4 +26,4 @@
|
||||
% }
|
||||
|
||||
</div>
|
||||
% end
|
||||
% end
|
||||
0
root/var/log/smanager/.gitignore
vendored
0
root/var/log/smanager/.gitignore
vendored
@@ -2,7 +2,7 @@ Summary: Sme Server Configuration : Manager 2
|
||||
%define name smeserver-manager
|
||||
Name: %{name}
|
||||
%define version 11.0.0
|
||||
%define release 114
|
||||
%define release 131
|
||||
Version: %{version}
|
||||
Release: %{release}%{?dist}
|
||||
License: GPL
|
||||
@@ -35,10 +35,11 @@ Requires: perl(Mojolicious::Plugin::CSRFDefender) >= 0.0.8
|
||||
Requires: perl(Net::Netmask) >= 1.9
|
||||
Requires: perl(DBM::Deep) >= 2.0011-1
|
||||
Requires: perl(Mojo::JWT) >= 0.08-1
|
||||
#Requires: perl(IPS:Run) >= 0.99-1 - needed for enahnced qmailanalog run of pflogsumm
|
||||
#Requires: perl(Time::TAI64) >= 2.11
|
||||
Requires: perl(Data::Validate::IP)
|
||||
Requires: mutt >= 1.5.21
|
||||
Requires: smeserver-manager-jsquery >= 1.0
|
||||
Requires: smeserver-manager-jsquery >= 11.0.0-11
|
||||
Requires: smeserver-certificates >= 11.0
|
||||
#Requires: js-jquery > 2.2.4-3 (optional)
|
||||
|
||||
@@ -146,6 +147,58 @@ true
|
||||
%defattr(-,root,root)
|
||||
|
||||
%changelog
|
||||
* Tue Nov 04 2025 Brian Read <brianr@koozali.org> 11.0.0-131.sme
|
||||
- Add fix for IE browser local/language detect [SME: 13039]
|
||||
|
||||
* Tue Nov 04 2025 Brian Read <brianr@koozali.org> 11.0.0-130.sme
|
||||
- Adjust heading so that no white line under theme selector and move theme button in [SME: 13057]
|
||||
|
||||
* Tue Nov 04 2025 Brian Read <brianr@koozali.org> 11.0.0-129.sme
|
||||
- Useraccounts: Clean up forward email sub and make sure blank is errored [SME: 13056]
|
||||
|
||||
* Tue Nov 04 2025 Brian Read <brianr@koozali.org> 11.0.0-128.sme
|
||||
- Move group table to under others in User accounts setup panel [SME: 13068]
|
||||
|
||||
* Tue Nov 04 2025 Brian Read <brianr@koozali.org> 11.0.0-127.sme
|
||||
- Group panel: Move same var declations to outside innner scope [SME: 13073]
|
||||
|
||||
* Tue Nov 04 2025 Brian Read <brianr@koozali.org> 11.0.0-126.sme
|
||||
- Remove debugging dump in portforwarding which crashes if no data [SME: 13243]
|
||||
|
||||
* Mon Nov 03 2025 Brian Read <brianr@koozali.org> 11.0.0-125.sme
|
||||
- Arrange that Macaddress, InternalIP and comment cleared out when host entry switched to self [SME: 13207]
|
||||
|
||||
* Fri Oct 24 2025 Brian Read <brianr@koozali.org> 11.0.0-124.sme
|
||||
- Adjust CSS for logout button to remove overlap of border and rounding [SME: 13247]
|
||||
|
||||
* Fri Oct 24 2025 Brian Read <brianr@koozali.org> 11.0.0-123.sme
|
||||
- Take out references to js/jquery files now incorporated in the datatables.min.js [SME:13253]
|
||||
|
||||
* Tue Oct 21 2025 Brian Read <brianr@koozali.org> 11.0.0-122.sme
|
||||
- Correct code to only show user panels when AdminPanels property is empty or non existent [SME: 13082]
|
||||
|
||||
* Sat Sep 27 2025 Brian Read <brianr@koozali.org> 11.0.0-121.sme
|
||||
- Sort out ftp public setting [SME: 13194]
|
||||
|
||||
* Thu Sep 25 2025 Brian Read <brianr@koozali.org> 11.0.0-120.sme
|
||||
- Add CSS for multiple result buttons on panel - used by wireguard[SME: 13185]
|
||||
|
||||
* Thu Sep 25 2025 Brian Read <brianr@koozali.org> 11.0.0-119.sme
|
||||
- Change submit button disable/message as method as current method does not send name back as parameter [SME: 13184]
|
||||
|
||||
* Thu Sep 25 2025 Brian Read <brianr@koozali.org> 11.0.0-118.sme
|
||||
- Remove inline style for legacy panel [SME: 13177]
|
||||
|
||||
* Wed Sep 24 2025 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.0-117.sme
|
||||
- set correctly X-Forwarded-Proto for TKT auth [SME: 13175]
|
||||
updated CSP for smanager
|
||||
|
||||
* Mon Sep 15 2025 Brian Read <brianr@koozali.org> 11.0.0-116.sme
|
||||
- Fix other buttons in lists for elinks [SME: 13113]
|
||||
|
||||
* Sat Sep 13 2025 Brian Read <brianr@koozali.org> 11.0.0-115.sme
|
||||
- Fix login and logout and user table buttons so that they are valid html and work for elinks [SME: 13113]
|
||||
|
||||
* Sat Sep 13 2025 Brian Read <brianr@koozali.org> 11.0.0-114.sme
|
||||
- edit intial screen to suppress reconfig message unless admin logged in [SME: 13112]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user