Compare commits
	
		
			15 Commits
		
	
	
		
			11_0_0-113
			...
			11_0_0-125
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5c227a2032 | |||
| 8e270ef3fd | |||
| a04097bf5a | |||
| 9437dd792a | |||
| f03d82ebf7 | |||
| de2f78a089 | |||
| b838d9252a | |||
| 9c9ab91869 | |||
| 022b85bd69 | |||
| c6f8378881 | |||
| d720304f1a | |||
| 371a05379f | |||
| 7cb9591eb8 | |||
| a0524a7484 | |||
| 687e763684 | 
@@ -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;
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
.legacy-embedded {
 | 
			
		||||
  width: 99%;
 | 
			
		||||
  height: 600px; /* fallback default, matches your $height default */
 | 
			
		||||
}
 | 
			
		||||
@@ -502,4 +502,20 @@ 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;
 | 
			
		||||
}
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    left: 7%;
 | 
			
		||||
    transform: translateX(-50%);
 | 
			
		||||
    background-color: #4caf50b8;
 | 
			
		||||
    background-color: #4caf50;
 | 
			
		||||
    color: white !important;
 | 
			
		||||
    border: none;
 | 
			
		||||
    padding: 8px;
 | 
			
		||||
 
 | 
			
		||||
@@ -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>
 | 
			
		||||
@@ -43,30 +43,34 @@
 | 
			
		||||
              % 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 $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"
 | 
			
		||||
            % 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>
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
    <div class="sme-error module"><h5>
 | 
			
		||||
        Warning: you have not yet changed the default system password.</h5></div>
 | 
			
		||||
  <% } %>
 | 
			
		||||
  <% if ( $c->is_unsafe ) { %>
 | 
			
		||||
  <% if ( $c->is_unsafe && $c->is_logged_in && $c->is_admin) { %>
 | 
			
		||||
    <div class="sme-error module"><h5>
 | 
			
		||||
        Warning: a reconfigure and reboot is required before proceeding! Failure to do so now
 | 
			
		||||
        may leave your system in an unknown state!</h5></div>
 | 
			
		||||
@@ -22,4 +22,4 @@
 | 
			
		||||
      </br>Please, consult <a href="https://wiki.koozali.org/SME_Server:Download" target="_blank">https://wiki.koozali.org/SME_Server:Download</a> to get the latest version
 | 
			
		||||
  </h5></div>
 | 
			
		||||
<% } %>
 | 
			
		||||
</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>
 | 
			
		||||
							
								
								
									
										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 113
 | 
			
		||||
%define release 125
 | 
			
		||||
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,43 @@ true
 | 
			
		||||
%defattr(-,root,root)
 | 
			
		||||
 | 
			
		||||
%changelog
 | 
			
		||||
* 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]
 | 
			
		||||
 | 
			
		||||
* Mon Aug 11 2025 Brian Read <brianr@koozali.org> 11.0.0-113.sme
 | 
			
		||||
- Re-factor all template files to make them nicely formatted  [SME: 13103]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user