Compare commits
	
		
			12 Commits
		
	
	
		
			11_0_0-114
			...
			11_0_0-123
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 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; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
| } | ||||
| @@ -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> | ||||
| @@ -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 114 | ||||
| %define release 123 | ||||
| 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,34 @@ true | ||||
| %defattr(-,root,root) | ||||
|  | ||||
| %changelog | ||||
| * 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