Compare commits
	
		
			19 Commits
		
	
	
		
			11_0_0-39_
			...
			11_0_0-49_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7ad224998c | |||
| 3070e0656c | |||
| 642d013437 | |||
| a62968d2d9 | |||
| 0e777fd51a | |||
| eee68afa2b | |||
| c2d677594b | |||
| f6fe2216a0 | |||
| 6d3f8f48c2 | |||
| f8d9ec34e3 | |||
| 835d439e42 | |||
| 4797a1b189 | |||
| 1e4ec809b5 | |||
| d1197f55cf | |||
| b5d6de3bcf | |||
| ec4f515012 | |||
| 9b03d377e2 | |||
| 957d2ada21 | |||
| be49419eba | 
@@ -45,6 +45,7 @@ for my $event ( qw( smeserver-manager-update smanager-refresh bootstrap-console-
 | 
			
		||||
    event_link('locales2-conf', "$event", '80');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
event_link('post-upgrade-and-reboot','post-upgrade-and-reboot',80);
 | 
			
		||||
event_link('systemd-default', "smeserver-manager-update", '88');
 | 
			
		||||
event_link('systemd-reload', "smeserver-manager-update", '89');
 | 
			
		||||
templates2events("/etc/rsyslog.conf", "smeserver-manager-update");
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								root/etc/e-smith/events/actions/.perltidyrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								root/etc/e-smith/events/actions/.perltidyrc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
-pbp -nst -nse -l=120 -ce -csc -pt=2 -kbl=0 -mbl=1 -lbl=1
 | 
			
		||||
@@ -1,218 +1,207 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
 | 
			
		||||
#----------------------------------------------------------------------
 | 
			
		||||
# copyright (C) 1999-2006 Mitel Networks Corporation
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
# 		
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
# 		
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program; if not, write to the Free Software
 | 
			
		||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
#----------------------------------------------------------------------
 | 
			
		||||
package esmith;
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
use constant SMNGR_LIB => '/usr/share/smanager/lib';
 | 
			
		||||
use constant I18NMODULES => 'SrvMngr/I18N/Modules';
 | 
			
		||||
use constant WEBFUNCTIONS => 'SrvMngr/Controller';
 | 
			
		||||
use constant NAVDIR => '/home/e-smith/db';
 | 
			
		||||
use constant SMNGR_LIB     => '/usr/share/smanager/lib';
 | 
			
		||||
use constant I18NMODULES   => 'SrvMngr/I18N/Modules';
 | 
			
		||||
use constant WEBFUNCTIONS  => 'SrvMngr/Controller';
 | 
			
		||||
use constant NAVDIR        => '/home/e-smith/db';
 | 
			
		||||
use constant NAVIGATIONDIR => 'navigation2';
 | 
			
		||||
use constant DEBUG => 0;
 | 
			
		||||
 | 
			
		||||
use constant DEBUG         => 0;
 | 
			
		||||
use esmith::NavigationDB;
 | 
			
		||||
use esmith::I18N;
 | 
			
		||||
 | 
			
		||||
use Data::Dumper;	# activate if DEBUG
 | 
			
		||||
 | 
			
		||||
use Data::Dumper;    # activate if DEBUG
 | 
			
		||||
binmode(STDOUT, ":encoding(UTF-8)");
 | 
			
		||||
 | 
			
		||||
my $navigation_ignore = 
 | 
			
		||||
	"(\.\.?|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm(-.*)?)";
 | 
			
		||||
 | 
			
		||||
my $i18n = new esmith::I18N;
 | 
			
		||||
 | 
			
		||||
my $navigation_ignore = "(\.\.?|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm(-.*)?)";
 | 
			
		||||
my $i18n              = new esmith::I18N;
 | 
			
		||||
my %navdbs;
 | 
			
		||||
 | 
			
		||||
opendir FUNCTIONS, SMNGR_LIB.'/'.WEBFUNCTIONS or 
 | 
			
		||||
    die "Couldn't open ", SMNGR_LIB.'/'.WEBFUNCTIONS, "\n";
 | 
			
		||||
my @files = grep (!/^${navigation_ignore}$/, readdir (FUNCTIONS));
 | 
			
		||||
opendir FUNCTIONS, SMNGR_LIB . '/' . WEBFUNCTIONS
 | 
			
		||||
    or die "Couldn't open ", SMNGR_LIB . '/' . WEBFUNCTIONS, "\n";
 | 
			
		||||
my @files = grep (!/^${navigation_ignore}$/, readdir(FUNCTIONS));
 | 
			
		||||
closedir FUNCTIONS;
 | 
			
		||||
my @langs = $i18n->availableLanguages();
 | 
			
		||||
 | 
			
		||||
my @langs = $i18n->availableLanguages(); 
 | 
			
		||||
#my @langs = ('tr');  #Temp override
 | 
			
		||||
foreach my $lang (@langs) {
 | 
			
		||||
    my $long_lex = SMNGR_LIB . '/' . I18NMODULES . "/General/general_$lang.lex";
 | 
			
		||||
    next unless (-e $long_lex);
 | 
			
		||||
    open(LEX, '<:encoding(UTF-8)', $long_lex)
 | 
			
		||||
        or die "Couldn't open ", $long_lex, " for reading.\n";
 | 
			
		||||
    my @gen_lex = <LEX>;
 | 
			
		||||
    close LEX;
 | 
			
		||||
 | 
			
		||||
    #my @files = ('Portforwarding.pm');  #Temp override
 | 
			
		||||
    foreach my $file (@files) {
 | 
			
		||||
        next if (-d SMNGR_LIB . '/' . WEBFUNCTIONS . "/$file");
 | 
			
		||||
 | 
			
		||||
foreach my $lang (@langs)
 | 
			
		||||
{
 | 
			
		||||
	my $long_lex = SMNGR_LIB.'/'.I18NMODULES."/General/general_$lang.lex";
 | 
			
		||||
	next unless ( -e $long_lex );
 | 
			
		||||
        #        next unless ( $file =~ m/D.*\.pm$/ );
 | 
			
		||||
        next unless ($file =~ m/[A-Z].*\.pm$/);
 | 
			
		||||
        my $file2 = lc($file);
 | 
			
		||||
        $file2 =~ s/\.pm$//;
 | 
			
		||||
 | 
			
		||||
	open(LEX, '<:encoding(UTF-8)', $long_lex)
 | 
			
		||||
		 or die "Couldn't open ", $long_lex, " for reading.\n";
 | 
			
		||||
	my @gen_lex = <LEX>;
 | 
			
		||||
	close LEX;
 | 
			
		||||
        #--------------------------------------------------
 | 
			
		||||
        # extract heading, description and weight information
 | 
			
		||||
        # from Mojo controller
 | 
			
		||||
        #--------------------------------------------------
 | 
			
		||||
        open(SCRIPT, SMNGR_LIB . '/' . WEBFUNCTIONS . "/$file");
 | 
			
		||||
        my $heading            = undef;
 | 
			
		||||
        my $description        = undef;
 | 
			
		||||
        my $heading_weight     = undef;
 | 
			
		||||
        my $description_weight = undef;
 | 
			
		||||
        my $menucat            = undef;
 | 
			
		||||
        my $routes             = undef;
 | 
			
		||||
 | 
			
		||||
	#my @files = ('Portforwarding.pm');  #Temp override
 | 
			
		||||
	foreach my $file (@files)
 | 
			
		||||
	{
 | 
			
		||||
		next if (-d SMNGR_LIB.'/'.WEBFUNCTIONS . "/$file");
 | 
			
		||||
		#        next unless ( $file =~ m/D.*\.pm$/ );
 | 
			
		||||
			next unless ( $file =~ m/[A-Z].*\.pm$/ );
 | 
			
		||||
        while (<SCRIPT>) {
 | 
			
		||||
            $heading     = $1 if (/^\s*#\s*heading\s*:\s*(.+?)\s*$/);
 | 
			
		||||
            $description = $1
 | 
			
		||||
                if (/^\s*#\s*description\s*:\s*(.+?)\s*$/);
 | 
			
		||||
            ($heading_weight, $description_weight) = ($1, $2)
 | 
			
		||||
                if (/^\s*#\s*navigation\s*:\s*(\d+?)\s+(\d+?)\s*$/);
 | 
			
		||||
            $menucat = $1
 | 
			
		||||
                if (/^\s*#\s*menu\s*:\s*(.+?)\s*$/);
 | 
			
		||||
            last
 | 
			
		||||
                if (defined $heading
 | 
			
		||||
                and defined $description
 | 
			
		||||
                and defined $heading_weight
 | 
			
		||||
                and defined $description_weight
 | 
			
		||||
                and defined $menucat);
 | 
			
		||||
 | 
			
		||||
		my $file2 = lc($file);
 | 
			
		||||
		$file2 =~ s/\.pm$//;
 | 
			
		||||
		#-------------------------------------------------- 
 | 
			
		||||
		# extract heading, description and weight information
 | 
			
		||||
		# from Mojo controller
 | 
			
		||||
		#-------------------------------------------------- 
 | 
			
		||||
		open(SCRIPT, SMNGR_LIB.'/'.WEBFUNCTIONS . "/$file");
 | 
			
		||||
		my $heading            	= undef;
 | 
			
		||||
		my $description        	= undef;
 | 
			
		||||
		my $heading_weight     	= undef;
 | 
			
		||||
		my $description_weight 	= undef;
 | 
			
		||||
		my $menucat		= undef;
 | 
			
		||||
		my $routes		= undef;
 | 
			
		||||
            # routes : end  (stop before eof if 'menu' is not here before 'routes'!!!
 | 
			
		||||
            $routes = $1 if (/^\s*#\s*routes\s*:\s*(.+?)\s*$/);
 | 
			
		||||
            last         if (defined $routes and $routes eq 'end');
 | 
			
		||||
        } ## end while (<SCRIPT>)
 | 
			
		||||
        close SCRIPT;
 | 
			
		||||
        print "updating script $file for lang $lang\n" if DEBUG;
 | 
			
		||||
        my $navdb   = $navdbs{$lang};
 | 
			
		||||
        my $navinfo = NAVDIR . '/' . NAVIGATIONDIR . "/navigation.$lang";
 | 
			
		||||
        $navdb ||= esmith::NavigationDB->open($navinfo);
 | 
			
		||||
        $navdb ||= esmith::NavigationDB->create($navinfo)
 | 
			
		||||
            or die "Couldn't create $navinfo\n";
 | 
			
		||||
        $navdbs{$lang} ||= $navdb;
 | 
			
		||||
        my $rec = $navdb->get($file2)
 | 
			
		||||
            || $navdb->new_record($file2, { type => 'panel' });
 | 
			
		||||
        my @panel_lex = ();
 | 
			
		||||
        $long_lex = SMNGR_LIB . '/' . I18NMODULES . '/' . ucfirst($file2) . "/${file2}_$lang.lex";
 | 
			
		||||
 | 
			
		||||
		while ( <SCRIPT> )
 | 
			
		||||
		{
 | 
			
		||||
			$heading = $1 if (/^\s*#\s*heading\s*:\s*(.+?)\s*$/);
 | 
			
		||||
			$description = $1 
 | 
			
		||||
			if (/^\s*#\s*description\s*:\s*(.+?)\s*$/);
 | 
			
		||||
			($heading_weight, $description_weight) = ($1, $2) 
 | 
			
		||||
			if (/^\s*#\s*navigation\s*:\s*(\d+?)\s+(\d+?)\s*$/);
 | 
			
		||||
			$menucat = $1 
 | 
			
		||||
			if (/^\s*#\s*menu\s*:\s*(.+?)\s*$/);
 | 
			
		||||
        if (-e $long_lex) {
 | 
			
		||||
            open(LEX, '<:encoding(UTF-8)', $long_lex)
 | 
			
		||||
                or die "Couldn't open ", $long_lex, " for reading.\n";
 | 
			
		||||
            @panel_lex = <LEX>;
 | 
			
		||||
            close LEX;
 | 
			
		||||
        } ## end if (-e $long_lex)
 | 
			
		||||
 | 
			
		||||
			last if (defined $heading and 
 | 
			
		||||
			defined $description and
 | 
			
		||||
			defined $heading_weight and
 | 
			
		||||
			defined $description_weight and
 | 
			
		||||
			defined $menucat);
 | 
			
		||||
        #Extract the prefix for this module
 | 
			
		||||
        my @keys   = values @panel_lex;    # Get all values from the array
 | 
			
		||||
        my $i      = 0;                    # Initialize the index
 | 
			
		||||
        my $found  = 0;                    # Flag to check if the prefix was found
 | 
			
		||||
        my $prefix = "xx_";                # Probably never match!!
 | 
			
		||||
 | 
			
		||||
			# routes : end  (stop before eof if 'menu' is not here before 'routes'!!!
 | 
			
		||||
			$routes = $1 if (/^\s*#\s*routes\s*:\s*(.+?)\s*$/);
 | 
			
		||||
			last if (defined $routes and $routes eq 'end');
 | 
			
		||||
		}
 | 
			
		||||
		close SCRIPT;
 | 
			
		||||
        while ($i < @keys) {               # Loop until we run out of entries
 | 
			
		||||
            my $extracted_value = $keys[$i] || "";    # The current entry
 | 
			
		||||
                                                      #print("Extracted val: ".$extracted_value."\n");
 | 
			
		||||
 | 
			
		||||
		print "updating script $file for lang $lang\n"if DEBUG;
 | 
			
		||||
		my $navdb = $navdbs{$lang};
 | 
			
		||||
		my $navinfo = NAVDIR.'/'.NAVIGATIONDIR . "/navigation.$lang";
 | 
			
		||||
		$navdb ||= esmith::NavigationDB->open($navinfo);
 | 
			
		||||
		$navdb ||= esmith::NavigationDB->create($navinfo) or
 | 
			
		||||
			die "Couldn't create $navinfo\n";
 | 
			
		||||
			$navdbs{$lang} ||= $navdb;
 | 
			
		||||
		my $rec = $navdb->get($file2) || 
 | 
			
		||||
			$navdb->new_record($file2, { type => 'panel' } );
 | 
			
		||||
		
 | 
			
		||||
		my @panel_lex = ();
 | 
			
		||||
		$long_lex = SMNGR_LIB.'/'.I18NMODULES.'/'.ucfirst($file2)."/${file2}_$lang.lex";
 | 
			
		||||
		if ( -e $long_lex ) {
 | 
			
		||||
			open(LEX, '<:encoding(UTF-8)', $long_lex)
 | 
			
		||||
				 or die "Couldn't open ", $long_lex, " for reading.\n";
 | 
			
		||||
			@panel_lex = <LEX>;
 | 
			
		||||
			close LEX;
 | 
			
		||||
		}
 | 
			
		||||
		#Extract the prefix for this module
 | 
			
		||||
		my @keys = values @panel_lex;  # Get all values from the array
 | 
			
		||||
		
 | 
			
		||||
		my $i = 0;                    # Initialize the index
 | 
			
		||||
		my $found = 0;                # Flag to check if the prefix was found
 | 
			
		||||
		my $prefix = "xx_";			  # Probably never match!!
 | 
			
		||||
            # Extract prefix from the second value (up to and including the first underscore)
 | 
			
		||||
            #my ($prefix) = $second_value =~ /^'(.*?_)/;  # Match everything up to and including the first underscore
 | 
			
		||||
            ($prefix) = $extracted_value =~ /^'(.*?_)/;    # Match everything up to and including the first underscore
 | 
			
		||||
 | 
			
		||||
		while ($i < @keys) {          # Loop until we run out of entries
 | 
			
		||||
			my $extracted_value = $keys[$i] || "";  # The current entry
 | 
			
		||||
			#print("Extracted val: ".$extracted_value."\n");
 | 
			
		||||
            if (defined $prefix) {
 | 
			
		||||
                $found = 1;                                # Set found flag to true
 | 
			
		||||
                last;                                      # Exit the loop if prefix is found
 | 
			
		||||
            } else {
 | 
			
		||||
 | 
			
		||||
			# Extract prefix from the second value (up to and including the first underscore)
 | 
			
		||||
			#my ($prefix) = $second_value =~ /^'(.*?_)/;  # Match everything up to and including the first underscore
 | 
			
		||||
			($prefix) = $extracted_value =~ /^'(.*?_)/;  # Match everything up to and including the first underscore
 | 
			
		||||
			
 | 
			
		||||
			if (defined $prefix) {
 | 
			
		||||
				$found = 1;           # Set found flag to true
 | 
			
		||||
				last;                 # Exit the loop if prefix is found
 | 
			
		||||
			} else {
 | 
			
		||||
				#print("Extracted Val: " . $extracted_value . "\n");
 | 
			
		||||
			}
 | 
			
		||||
                #print("Extracted Val: " . $extracted_value . "\n");
 | 
			
		||||
            }
 | 
			
		||||
            $i++;                                          # Increment the index to check the next entry
 | 
			
		||||
        } ## end while ($i < @keys)
 | 
			
		||||
 | 
			
		||||
			$i++;                     # Increment the index to check the next entry
 | 
			
		||||
		}
 | 
			
		||||
        if (!$found) {
 | 
			
		||||
            #print(STDERR "No valid prefix found in any entries: " . $file2 . " (" . $lang . ")\n");    # if DEBUG;
 | 
			
		||||
            $prefix = "xx_";    # Probably never match!!
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (!$found) {
 | 
			
		||||
			print(STDERR "No valid prefix found in any entries: ".$file2." (".$lang.")\n"); # if DEBUG;
 | 
			
		||||
			$prefix = "xx_";			  # Probably never match!!
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
		#print("Prefix: ".$prefix." ".$file2." (".$lang.")\n");
 | 
			
		||||
		
 | 
			
		||||
		my %Lexicon = ();
 | 
			
		||||
		push(@panel_lex, @gen_lex);
 | 
			
		||||
		my $top_error = 0;
 | 
			
		||||
        #print("Prefix: ".$prefix." ".$file2." (".$lang.")\n");
 | 
			
		||||
        my %Lexicon = ();
 | 
			
		||||
        push(@panel_lex, @gen_lex);
 | 
			
		||||
        my $top_error = 0;
 | 
			
		||||
        chomp @panel_lex;
 | 
			
		||||
 | 
			
		||||
		chomp @panel_lex;
 | 
			
		||||
		for (@panel_lex) {
 | 
			
		||||
			next unless $_;	# first one empty
 | 
			
		||||
			my ($k, $v) = split / => /, $_;
 | 
			
		||||
		#	errors on split to $v (use DEBUG to see)
 | 
			
		||||
			if ( $k and $v ) {
 | 
			
		||||
				$k =~ s/\'//g;
 | 
			
		||||
				$v =~ s/\'//g;
 | 
			
		||||
				$v =~ s/,$//g;
 | 
			
		||||
				$Lexicon{ lc($k) } = $v;
 | 
			
		||||
			} else {
 | 
			
		||||
				$k = "?" unless ($k);
 | 
			
		||||
				print STDERR "Error for $lang $file2 on $k \n" if DEBUG;
 | 
			
		||||
				$top_error++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if ( $top_error > 0) {
 | 
			
		||||
			if ( DEBUG ) {
 | 
			
		||||
				print STDERR "$top_error errors for $lang $file2\n";
 | 
			
		||||
				#		print Dumper(\@panel_lex);
 | 
			
		||||
				#		print Dumper(\%Lexicon);
 | 
			
		||||
				#		exit 1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		$heading = "" unless defined $heading;
 | 
			
		||||
		$description = "" unless defined $description;
 | 
			
		||||
		# Get the base language code from $lang
 | 
			
		||||
		my $base_lang = (split('-', $lang))[0];
 | 
			
		||||
		my $loc_heading =  process_localization( \%Lexicon, $heading, $lang, $prefix );
 | 
			
		||||
		my $loc_description =  process_localization( \%Lexicon, $description, $lang, $prefix );
 | 
			
		||||
		$loc_heading =~ s/^\s*(\w.*?)\s*$/$1/;
 | 
			
		||||
		$loc_description =~ s/^\s*(\w.*?)\s*$/$1/;
 | 
			
		||||
        for (@panel_lex) {
 | 
			
		||||
            next unless $_;     # first one empty
 | 
			
		||||
            my ($k, $v) = split / => /, $_;
 | 
			
		||||
 | 
			
		||||
		$rec->merge_props(
 | 
			
		||||
			Heading => $loc_heading,
 | 
			
		||||
			Description => $loc_description,
 | 
			
		||||
			HeadingWeight => localise( \%Lexicon, $heading_weight ),
 | 
			
		||||
			DescriptionWeight => localise( \%Lexicon, $description_weight ),
 | 
			
		||||
			MenuCat => (defined $menucat ? $menucat : 'A'));
 | 
			
		||||
	}
 | 
			
		||||
	#warn "trying to close for lang $lang\n";
 | 
			
		||||
	my $navdb = $navdbs{$lang};
 | 
			
		||||
	$navdb->close();
 | 
			
		||||
}
 | 
			
		||||
            #	errors on split to $v (use DEBUG to see)
 | 
			
		||||
            if ($k and $v) {
 | 
			
		||||
                $k =~ s/\'//g;
 | 
			
		||||
                $v =~ s/\'//g;
 | 
			
		||||
                $v =~ s/,$//g;
 | 
			
		||||
                $Lexicon{ lc($k) } = $v;
 | 
			
		||||
            } else {
 | 
			
		||||
                $k = "?" unless ($k);
 | 
			
		||||
                print STDERR "Error for $lang $file2 on $k \n" if DEBUG;
 | 
			
		||||
                $top_error++;
 | 
			
		||||
            }
 | 
			
		||||
        } ## end for (@panel_lex)
 | 
			
		||||
 | 
			
		||||
        if ($top_error > 0) {
 | 
			
		||||
            if (DEBUG) {
 | 
			
		||||
                print STDERR "$top_error errors for $lang $file2\n";
 | 
			
		||||
 | 
			
		||||
                #		print Dumper(\@panel_lex);
 | 
			
		||||
                #		print Dumper(\%Lexicon);
 | 
			
		||||
                #		exit 1;
 | 
			
		||||
            } ## end if (DEBUG)
 | 
			
		||||
        } ## end if ($top_error > 0)
 | 
			
		||||
        $heading     = "" unless defined $heading;
 | 
			
		||||
        $description = "" unless defined $description;
 | 
			
		||||
 | 
			
		||||
        # Get the base language code from $lang
 | 
			
		||||
        my $base_lang       = (split('-', $lang))[0];
 | 
			
		||||
        my $loc_heading     = process_localization(\%Lexicon, $heading,     $lang, $prefix);
 | 
			
		||||
        my $loc_description = process_localization(\%Lexicon, $description, $lang, $prefix);
 | 
			
		||||
        $loc_heading     =~ s/^\s*(\w.*?)\s*$/$1/;
 | 
			
		||||
        $loc_description =~ s/^\s*(\w.*?)\s*$/$1/;
 | 
			
		||||
        $rec->merge_props(
 | 
			
		||||
            Heading           => $loc_heading,
 | 
			
		||||
            Description       => $loc_description,
 | 
			
		||||
            HeadingWeight     => localise(\%Lexicon, $heading_weight),
 | 
			
		||||
            DescriptionWeight => localise(\%Lexicon, $description_weight),
 | 
			
		||||
            MenuCat           => (defined $menucat ? $menucat : 'A')
 | 
			
		||||
        );
 | 
			
		||||
    } ## end foreach my $file (@files)
 | 
			
		||||
 | 
			
		||||
    #warn "trying to close for lang $lang\n";
 | 
			
		||||
    my $navdb = $navdbs{$lang};
 | 
			
		||||
    $navdb->close();
 | 
			
		||||
} ## end foreach my $lang (@langs)
 | 
			
		||||
 | 
			
		||||
sub localise {
 | 
			
		||||
    my ($lexicon, $string) = @_;
 | 
			
		||||
 | 
			
		||||
    #print("Looking up:".$string."\n");
 | 
			
		||||
    $string  = "" unless defined $string;
 | 
			
		||||
    $string = "" unless defined $string;
 | 
			
		||||
    my $lc_string = lc($string);
 | 
			
		||||
    my $res = $lexicon->{$lc_string} || $string;
 | 
			
		||||
    my $res       = $lexicon->{$lc_string} || $string;
 | 
			
		||||
 | 
			
		||||
    #print("Returning:".$res."\n");
 | 
			
		||||
    return $res;
 | 
			
		||||
}
 | 
			
		||||
} ## end sub localise
 | 
			
		||||
 | 
			
		||||
# Subroutine to process localization
 | 
			
		||||
sub process_localization {
 | 
			
		||||
@@ -226,15 +215,17 @@ sub process_localization {
 | 
			
		||||
 | 
			
		||||
    # Check the condition
 | 
			
		||||
    if ($loc_heading eq $heading && $base_lang ne 'en') {
 | 
			
		||||
 | 
			
		||||
        # Construct the new key by combining the prefix and the original heading
 | 
			
		||||
        my $key = $prefix . $heading;
 | 
			
		||||
 | 
			
		||||
        # Localize using the constructed key
 | 
			
		||||
        $loc_heading = localise($lexicon_ref, $key);
 | 
			
		||||
 | 
			
		||||
        # See if it got a hit
 | 
			
		||||
        if ($loc_heading eq $key){
 | 
			
		||||
			$loc_heading = $heading;
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return $loc_heading; # Optionally return the localized heading
 | 
			
		||||
}
 | 
			
		||||
        if ($loc_heading eq $key) {
 | 
			
		||||
            $loc_heading = $heading;
 | 
			
		||||
        }
 | 
			
		||||
    } ## end if ($loc_heading eq $heading...)
 | 
			
		||||
    return $loc_heading;    # Optionally return the localized heading
 | 
			
		||||
} ## end sub process_localization
 | 
			
		||||
							
								
								
									
										3
									
								
								root/etc/e-smith/events/actions/post-upgrade-and-reboot
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								root/etc/e-smith/events/actions/post-upgrade-and-reboot
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
/usr/sbin/e-smith/signal-event post-upgrade
 | 
			
		||||
/usr/sbin/e-smith/signal-event reboot
 | 
			
		||||
@@ -68,9 +68,18 @@ color: #8ebe43;
 | 
			
		||||
background-color: #8ebe43;
 | 
			
		||||
    }
 | 
			
		||||
      
 | 
			
		||||
/* flag container no flag */
 | 
			
		||||
/* flag container*/
 | 
			
		||||
#flag-container span {
 | 
			
		||||
  font-size: 24px;
 | 
			
		||||
	font-size: 24px;
 | 
			
		||||
    display: flex;                     /* Allows for easy centering */
 | 
			
		||||
    justify-content: center;           /* Center horizontally */
 | 
			
		||||
    align-items: center;               /* Center vertically */
 | 
			
		||||
    width: 100%;                       /* Full width of parent */
 | 
			
		||||
    height: 24px;                      /* Set a fixed height */
 | 
			
		||||
    border: 1px solid #ccc;            /* Light gray border */
 | 
			
		||||
    border-radius: 5px;                /* Rounded corners */
 | 
			
		||||
    cursor: default;                   /* Prevent text cursor */
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.fallback-box {
 | 
			
		||||
@@ -84,4 +93,4 @@ background-color: #8ebe43;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HERE
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@@ -80,6 +80,7 @@ a:active { color: #606060; text-decoration: none; }
 | 
			
		||||
 | 
			
		||||
.sme-error {
 | 
			
		||||
    color: red;
 | 
			
		||||
    display:block;
 | 
			
		||||
    background-color: #ffffff;
 | 
			
		||||
    border-width: 1px;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
@@ -93,6 +94,7 @@ a:active { color: #606060; text-decoration: none; }
 | 
			
		||||
 | 
			
		||||
.sme-warning {
 | 
			
		||||
    color: orange;
 | 
			
		||||
    display:block;  
 | 
			
		||||
    background-color: #ffffff;
 | 
			
		||||
    border-width: 1px;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
@@ -276,4 +278,4 @@ a.menu-title {
 | 
			
		||||
 | 
			
		||||
/*end*/
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Server Manager 2 Mojo
 | 
			
		||||
Requires=network.target httpd-e-smith.service ldap.service
 | 
			
		||||
After=network.target 
 | 
			
		||||
Requires=network-online.target httpd-e-smith.service ldap.service
 | 
			
		||||
After=network-online.target 
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
 
 | 
			
		||||
@@ -224,12 +224,12 @@ sub setup_plugins {
 | 
			
		||||
    # CSRF protection if production mode
 | 
			
		||||
#    $self->plugin('Mojolicious::Plugin::CSRFDefender' => {
 | 
			
		||||
#   Adapted plugin for use with GET method
 | 
			
		||||
    $self->plugin('SrvMngr::Plugin::CSRFDefender' => {
 | 
			
		||||
	onetime => 1,
 | 
			
		||||
	error_status => 400,
 | 
			
		||||
	error_content => 'Error: CSRF token is invalid or outdated'
 | 
			
		||||
    #$self->plugin('SrvMngr::Plugin::CSRFDefender' => {
 | 
			
		||||
	#onetime => 1,
 | 
			
		||||
	#error_status => 400,
 | 
			
		||||
	#error_content => 'Error: CSRF token is invalid or outdated'
 | 
			
		||||
    	#error_template => 'csrf_400'
 | 
			
		||||
	}) if ( $self->mode eq 'production' );
 | 
			
		||||
	#}) if ( $self->mode eq 'production' );
 | 
			
		||||
 | 
			
		||||
    $self->plugin('SrvMngr::Plugin::I18N' => {namespace => 'SrvMngr::I18N', default => 'en'});
 | 
			
		||||
 | 
			
		||||
@@ -866,4 +866,4 @@ sub get_reg_mask {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
1;
 | 
			
		||||
@@ -20,9 +20,9 @@ use esmith::DomainsDB;
 | 
			
		||||
use esmith::AccountsDB;
 | 
			
		||||
 | 
			
		||||
#use URI::Escape;
 | 
			
		||||
our $ddb = esmith::DomainsDB->open  || die "Couldn't open domains db";
 | 
			
		||||
our $cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
my ($ddb,$cdb,$adb);
 | 
			
		||||
#our $cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
our $REGEXP_DOMAIN = qq([a-zA-Z0-9\-\.]+);
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
@@ -30,6 +30,9 @@ sub main {
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
    my %dom_datas = ();
 | 
			
		||||
    my $title     = $c->l('dom_FORM_TITLE');
 | 
			
		||||
	$ddb = esmith::DomainsDB->open  || die "Couldn't open domains db";
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $dom_datas{trt} = 'LST';
 | 
			
		||||
    my @domains;
 | 
			
		||||
 | 
			
		||||
@@ -54,6 +57,9 @@ sub do_display {
 | 
			
		||||
    my $rt     = $c->current_route;
 | 
			
		||||
    my $trt    = $c->param('trt');
 | 
			
		||||
    my $domain = $c->param('Domain') || '';
 | 
			
		||||
	$ddb = esmith::DomainsDB->open  || die "Couldn't open domains db";
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
 | 
			
		||||
    #$trt = 'DEL' if ( $rt eq 'domaindel1' );
 | 
			
		||||
    #$trt = 'UPD' if ( $rt eq 'domainupd1' );
 | 
			
		||||
@@ -121,6 +127,9 @@ sub do_update {
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
    my $rt        = $c->current_route;
 | 
			
		||||
    my $trt       = $c->param('trt');
 | 
			
		||||
	$ddb = esmith::DomainsDB->open  || die "Couldn't open domains db";
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    my %dom_datas = ();
 | 
			
		||||
    my ($res, $result) = '';
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,14 +18,17 @@ use SrvMngr qw(theme_list init_session);
 | 
			
		||||
#use Data::Dumper;
 | 
			
		||||
#use esmith::FormMagick::Panel::groups;
 | 
			
		||||
use esmith::AccountsDB;
 | 
			
		||||
our $cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
#our $cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
my ($cdb,$adb);
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c = shift;
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
    my %grp_datas = ();
 | 
			
		||||
    my $title     = $c->l('grp_FORM_TITLE');
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $grp_datas{trt} = 'LST';
 | 
			
		||||
    my @groups;
 | 
			
		||||
 | 
			
		||||
@@ -44,6 +47,8 @@ sub do_display {
 | 
			
		||||
    my $group     = $c->param('group');
 | 
			
		||||
    my %grp_datas = ();
 | 
			
		||||
    my $title     = $c->l('grp_FORM_TITLE');
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $grp_datas{'trt'} = $trt;
 | 
			
		||||
 | 
			
		||||
    if ($trt eq 'ADD') {
 | 
			
		||||
@@ -99,6 +104,8 @@ sub do_update {
 | 
			
		||||
    my $title     = $c->l('grp_FORM_TITLE');
 | 
			
		||||
    my ($res, $result) = '';
 | 
			
		||||
    my %grp_datas = ();
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $grp_datas{'trt'}   = $trt;
 | 
			
		||||
    $grp_datas{'group'} = $groupName;
 | 
			
		||||
    my @members = ();
 | 
			
		||||
 
 | 
			
		||||
@@ -25,10 +25,11 @@ use HTML::Entities;
 | 
			
		||||
use Net::IPv4Addr qw(ipv4_in_network);
 | 
			
		||||
 | 
			
		||||
#use URI::Escape;
 | 
			
		||||
our $ddb = esmith::DomainsDB->open  || die "Couldn't open hostentries db";
 | 
			
		||||
our $cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
our $hdb = esmith::HostsDB->open    || die "Couldn't open hosts db";
 | 
			
		||||
our $ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
 | 
			
		||||
#our $ddb = esmith::DomainsDB->open  || die "Couldn't open hostentries db";
 | 
			
		||||
#our $cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
#our $hdb = esmith::HostsDB->open    || die "Couldn't open hosts db";
 | 
			
		||||
#our $ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
 | 
			
		||||
my ($ddb,$cdb,$hdb,$ndb);
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c = shift;
 | 
			
		||||
@@ -36,6 +37,10 @@ sub main {
 | 
			
		||||
    my %hos_datas = ();
 | 
			
		||||
    my $title     = $c->l('hos_FORM_TITLE');
 | 
			
		||||
    my $notif     = '';
 | 
			
		||||
	#my $ddb = esmith::DomainsDB->open  || die "Couldn't open hostentries db";
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$hdb = esmith::HostsDB->open    || die "Couldn't open hosts db";
 | 
			
		||||
	$ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
 | 
			
		||||
    $hos_datas{trt} = 'LIST';
 | 
			
		||||
    my %dom_hosts = ();
 | 
			
		||||
 | 
			
		||||
@@ -68,6 +73,9 @@ sub do_display {
 | 
			
		||||
    $trt = 'LST' if ($trt ne 'DEL' && $trt ne 'UPD' && $trt ne 'ADD');
 | 
			
		||||
    my %hos_datas = ();
 | 
			
		||||
    my $title     = $c->l('hos_FORM_TITLE');
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$hdb = esmith::HostsDB->open    || die "Couldn't open hosts db";
 | 
			
		||||
	$ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
 | 
			
		||||
    my $notif     = '';
 | 
			
		||||
    $hos_datas{'trt'} = $trt;
 | 
			
		||||
 | 
			
		||||
@@ -112,6 +120,9 @@ sub do_update {
 | 
			
		||||
    my $trt       = ($c->param('trt') || 'LIST');
 | 
			
		||||
    my %hos_datas = ();
 | 
			
		||||
    my $title     = $c->l('hos_FORM_TITLE');
 | 
			
		||||
	$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$hdb = esmith::HostsDB->open    || die "Couldn't open hosts db";
 | 
			
		||||
	$ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
 | 
			
		||||
    my $notif     = '';
 | 
			
		||||
    my $result    = '';
 | 
			
		||||
    $hos_datas{'name'}       = lc $c->param('Name');
 | 
			
		||||
 
 | 
			
		||||
@@ -19,15 +19,18 @@ use esmith::ConfigDB;
 | 
			
		||||
use esmith::DomainsDB;
 | 
			
		||||
 | 
			
		||||
#use esmith::FormMagick::Panel::ibays;
 | 
			
		||||
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
#our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
my ($adb,$cdb);
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c = shift;
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
    my %iba_datas = ();
 | 
			
		||||
    my $title     = $c->l('iba_FORM_TITLE');
 | 
			
		||||
    $iba_datas{'trt'} = 'LIST';
 | 
			
		||||
    $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
	$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
	$iba_datas{'trt'} = 'LIST';
 | 
			
		||||
    my @ibays;
 | 
			
		||||
 | 
			
		||||
    if ($adb) {
 | 
			
		||||
@@ -42,6 +45,8 @@ sub do_display {
 | 
			
		||||
    my $rt   = $c->current_route;
 | 
			
		||||
    my $trt  = ($c->param('trt') || 'LIST');
 | 
			
		||||
    my $ibay = $c->param('ibay') || '';
 | 
			
		||||
    $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
	$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
 | 
			
		||||
    #$trt = 'DEL' if ( $ibay );
 | 
			
		||||
    #$trt = 'ADD' if ( $rt eq 'ibayadd' );
 | 
			
		||||
@@ -116,6 +121,8 @@ sub do_update {
 | 
			
		||||
    $iba_datas{'trt'} = $trt;
 | 
			
		||||
    my $result = '';
 | 
			
		||||
    my $res;
 | 
			
		||||
    $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
	$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
 | 
			
		||||
    if ($trt eq 'ADD') {
 | 
			
		||||
        my $name = ($c->param('ibay') || '');
 | 
			
		||||
 
 | 
			
		||||
@@ -354,7 +354,7 @@ sub get_selected_LIST {
 | 
			
		||||
    my $selected      = shift;    #Parameter is name of selected row.
 | 
			
		||||
    my $is_new_record = shift;    #Indicates new record required (defaults)
 | 
			
		||||
    my %ret           = {};
 | 
			
		||||
    return $ret;
 | 
			
		||||
    return %ret;
 | 
			
		||||
} ## end sub get_selected_LIST
 | 
			
		||||
 | 
			
		||||
sub get_selected_PARAMS {
 | 
			
		||||
@@ -362,7 +362,7 @@ sub get_selected_PARAMS {
 | 
			
		||||
    my $selected      = shift;    #Parameter is name of selected row.
 | 
			
		||||
    my $is_new_record = shift;    #Indicates new record required (defaults)
 | 
			
		||||
    my %ret           = {};
 | 
			
		||||
    return $ret;
 | 
			
		||||
    return %ret;
 | 
			
		||||
} ## end sub get_selected_PARAMS
 | 
			
		||||
 | 
			
		||||
sub get_selected_CHECKALLDOMAINS {
 | 
			
		||||
@@ -370,7 +370,7 @@ sub get_selected_CHECKALLDOMAINS {
 | 
			
		||||
    my $selected      = shift;    #Parameter is name of selected row.
 | 
			
		||||
    my $is_new_record = shift;    #Indicates new record required (defaults)
 | 
			
		||||
    my %ret           = {};
 | 
			
		||||
    return $ret;
 | 
			
		||||
    return %ret;
 | 
			
		||||
} ## end sub get_selected_CHECKALLDOMAINS
 | 
			
		||||
 | 
			
		||||
sub get_selected_CHECKALLENABLEDDOMAINS {
 | 
			
		||||
@@ -378,7 +378,7 @@ sub get_selected_CHECKALLENABLEDDOMAINS {
 | 
			
		||||
    my $selected      = shift;    #Parameter is name of selected row.
 | 
			
		||||
    my $is_new_record = shift;    #Indicates new record required (defaults)
 | 
			
		||||
    my %ret           = {};
 | 
			
		||||
    return $ret;
 | 
			
		||||
    return %ret;
 | 
			
		||||
} ## end sub get_selected_CHECKALLENABLEDDOMAINS
 | 
			
		||||
 | 
			
		||||
sub get_selected_CHECKONEDOMAIN {
 | 
			
		||||
@@ -386,7 +386,7 @@ sub get_selected_CHECKONEDOMAIN {
 | 
			
		||||
    my $selected      = shift;    #Parameter is name of selected row.
 | 
			
		||||
    my $is_new_record = shift;    #Indicates new record required (defaults)
 | 
			
		||||
    my %ret           = {};
 | 
			
		||||
    return $ret;
 | 
			
		||||
    return %ret;
 | 
			
		||||
} ## end sub get_selected_CHECKONEDOMAIN
 | 
			
		||||
 | 
			
		||||
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
 | 
			
		||||
@@ -563,4 +563,4 @@ sub update_enabled_domains {
 | 
			
		||||
    my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" enabled `;
 | 
			
		||||
    return $output || "-empty-";
 | 
			
		||||
} ## end sub update_enabled_domains
 | 
			
		||||
1;
 | 
			
		||||
1;
 | 
			
		||||
@@ -305,10 +305,10 @@ sub do_display {
 | 
			
		||||
    my $modul     = "";
 | 
			
		||||
 | 
			
		||||
    # Accessing all parameters
 | 
			
		||||
    my %params = $c->req->params->to_hash;
 | 
			
		||||
    my $params = $c->req->params->to_hash;
 | 
			
		||||
 | 
			
		||||
    # Get number of parameters
 | 
			
		||||
    my $num_params = keys %params;
 | 
			
		||||
    my $num_params = scalar keys %$params;
 | 
			
		||||
 | 
			
		||||
    #Tag as Post or Get (ie. create new entry or edit existing one
 | 
			
		||||
    my $is_new_record = ($c->req->method() eq 'POST');
 | 
			
		||||
@@ -445,4 +445,4 @@ sub do_display {
 | 
			
		||||
    );
 | 
			
		||||
    $c->render(template => "letsencrypt");
 | 
			
		||||
} ## end sub do_display
 | 
			
		||||
1;
 | 
			
		||||
1;
 | 
			
		||||
@@ -17,8 +17,9 @@ use SrvMngr qw(theme_list init_session subnet_mask get_reg_mask ip_number);
 | 
			
		||||
#use Data::Dumper;
 | 
			
		||||
use esmith::util;
 | 
			
		||||
use esmith::HostsDB;
 | 
			
		||||
my $network_db = esmith::NetworksDB->open() || die("Couldn't open networks db");
 | 
			
		||||
#my $network_db = esmith::NetworksDB->open() || die("Couldn't open networks db");
 | 
			
		||||
my $ret = "OK";
 | 
			
		||||
my ($network_db);
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c = shift;
 | 
			
		||||
@@ -26,6 +27,7 @@ sub main {
 | 
			
		||||
    my %ln_datas = ();
 | 
			
		||||
    $ln_datas{return} = "";
 | 
			
		||||
    my $title = $c->l('ln_LOCAL NETWORKS');
 | 
			
		||||
	$network_db = esmith::NetworksDB->open() || die("Couldn't open networks db");
 | 
			
		||||
    my $modul = '';
 | 
			
		||||
    $ln_datas{trt} = 'LIST';
 | 
			
		||||
    my @localnetworks;
 | 
			
		||||
@@ -47,6 +49,7 @@ sub do_display {
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
    my $rt = $c->current_route;
 | 
			
		||||
    my $trt = ($c->param('trt') || 'LIST');
 | 
			
		||||
	$network_db = esmith::NetworksDB->open() || die("Couldn't open networks db");
 | 
			
		||||
    $trt = 'DEL'  if ($rt eq 'localnetworksdel');
 | 
			
		||||
    $trt = 'ADD'  if ($rt eq 'localnetworksadd');
 | 
			
		||||
    $trt = 'ADD1' if ($rt eq 'localnetworksadd1');
 | 
			
		||||
@@ -81,7 +84,7 @@ sub do_display {
 | 
			
		||||
    if ($trt eq 'DEL1') {
 | 
			
		||||
 | 
			
		||||
        #After Remove clicked on Delete network panel
 | 
			
		||||
        my $network_db   = esmith::NetworksDB->open() || die("Failed to open Networkdb-1");
 | 
			
		||||
        $network_db   = esmith::NetworksDB->open() || die("Failed to open Networkdb-1");
 | 
			
		||||
        my $localnetwork = $c->param("localnetwork");
 | 
			
		||||
        my $delete_hosts = $c->param("deletehost") || "1";                                    #default to deleting them.
 | 
			
		||||
        my $rec = $network_db->get($localnetwork) || die("Failed to find network on db:$localnetwork");
 | 
			
		||||
@@ -135,7 +138,7 @@ sub do_display {
 | 
			
		||||
 | 
			
		||||
sub remove_network {
 | 
			
		||||
    my $network      = shift;
 | 
			
		||||
    my $network_db   = esmith::NetworksDB->open();
 | 
			
		||||
    $network_db   = esmith::NetworksDB->open();
 | 
			
		||||
    my $record       = $network_db->get($network);
 | 
			
		||||
    my $delete_hosts = shift;
 | 
			
		||||
 | 
			
		||||
@@ -265,3 +268,4 @@ sub add_network {
 | 
			
		||||
        );
 | 
			
		||||
    } ## end else [ if ($totalHosts == 1) ]
 | 
			
		||||
} ## end sub add_network
 | 
			
		||||
1;
 | 
			
		||||
 
 | 
			
		||||
@@ -18,12 +18,11 @@ use SrvMngr qw(theme_list init_session);
 | 
			
		||||
#use Data::Dumper;
 | 
			
		||||
use esmith::util;
 | 
			
		||||
use esmith::HostsDB;
 | 
			
		||||
our $db = esmith::ConfigDB->open
 | 
			
		||||
    || die "Can't open configuration database: $!\n";
 | 
			
		||||
our $tcp_db = esmith::ConfigDB->open('portforward_tcp')
 | 
			
		||||
    || die "Can't open portforward_tcp database: $!\n";
 | 
			
		||||
our $udp_db = esmith::ConfigDB->open('portforward_udp')
 | 
			
		||||
    || die "Can't open portforward_udp database: $!\n";
 | 
			
		||||
#our $db = esmith::ConfigDB->open || die "Can't open configuration database: $!\n";
 | 
			
		||||
#our $tcp_db = esmith::ConfigDB->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
 | 
			
		||||
#our $udp_db = esmith::ConfigDB->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
 | 
			
		||||
my ($cdb,$tcp_db,$udp_db);
 | 
			
		||||
 | 
			
		||||
my %ret = ();
 | 
			
		||||
use constant FALSE => 0;
 | 
			
		||||
use constant TRUE  => 1;
 | 
			
		||||
@@ -35,6 +34,9 @@ sub main {
 | 
			
		||||
    $pf_datas{return} = "";
 | 
			
		||||
    my $title = $c->l('pf_FORM_TITLE');
 | 
			
		||||
    my $modul = '';
 | 
			
		||||
	$cdb = esmith::ConfigDB->open || die "Can't open configuration database: $!\n";
 | 
			
		||||
	$tcp_db = esmith::ConfigDB->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
 | 
			
		||||
	$udp_db = esmith::ConfigDB->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
 | 
			
		||||
    $pf_datas{trt} = 'LIST';
 | 
			
		||||
    my @tcpforwards = $tcp_db->get_all;
 | 
			
		||||
    my @udpforwards = $udp_db->get_all;
 | 
			
		||||
@@ -55,6 +57,9 @@ sub do_display {
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
    my $rt = $c->current_route;
 | 
			
		||||
    my $trt = ($c->param('trt') || 'LIST');
 | 
			
		||||
	my $cdb = esmith::ConfigDB->open || die "Can't open configuration database: $!\n";
 | 
			
		||||
	my $tcp_db = esmith::ConfigDB->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
 | 
			
		||||
	my $udp_db = esmith::ConfigDB->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
 | 
			
		||||
    $trt = 'DEL'  if ($rt eq 'portforwardingdel');
 | 
			
		||||
    $trt = 'ADD'  if ($rt eq 'portforwardingadd');
 | 
			
		||||
    $trt = 'ADD1' if ($rt eq 'portforwardingadd1');
 | 
			
		||||
@@ -207,8 +212,8 @@ sub add_portforward {
 | 
			
		||||
sub get_destination_host {
 | 
			
		||||
    my $q           = shift;
 | 
			
		||||
    my $dhost       = $q->param("dhost");
 | 
			
		||||
    my $localip     = $db->get_prop('InternalInterface', 'IPAddress');
 | 
			
		||||
    my $external_ip = $db->get_prop('ExternalInterface', 'IPAddress') || $localip;
 | 
			
		||||
    my $localip     = $cdb->get_prop('InternalInterface', 'IPAddress');
 | 
			
		||||
    my $external_ip = $cdb->get_prop('ExternalInterface', 'IPAddress') || $localip;
 | 
			
		||||
 | 
			
		||||
    if ($dhost =~ /^(127.0.0.1|$localip|$external_ip)$/i) {
 | 
			
		||||
 | 
			
		||||
@@ -354,8 +359,8 @@ sub validate_destination_host {
 | 
			
		||||
    my $c     = shift;
 | 
			
		||||
    my $dhost = $c->param('dhost');
 | 
			
		||||
    $dhost =~ s/^\s+|\s+$//g;
 | 
			
		||||
    my $localip = $db->get_prop('InternalInterface', 'IPAddress');
 | 
			
		||||
    my $external_ip = $db->get_prop('ExternalInterface', 'IPAddress') || $localip;
 | 
			
		||||
    my $localip = $cdb->get_prop('InternalInterface', 'IPAddress');
 | 
			
		||||
    my $external_ip = $cdb->get_prop('ExternalInterface', 'IPAddress') || $localip;
 | 
			
		||||
 | 
			
		||||
    if ($dhost =~ /^(localhost|127.0.0.1|$localip|$external_ip)$/i) {
 | 
			
		||||
 | 
			
		||||
@@ -363,7 +368,7 @@ sub validate_destination_host {
 | 
			
		||||
        $c->param(-name => 'dhost', -value => 'localhost');
 | 
			
		||||
        return (ret => 'pf_SUCCESS');
 | 
			
		||||
    } ## end if ($dhost =~ /^(localhost|127.0.0.1|$localip|$external_ip)$/i)
 | 
			
		||||
    my $systemmode = $db->get_value('SystemMode');
 | 
			
		||||
    my $systemmode = $cdb->get_value('SystemMode');
 | 
			
		||||
 | 
			
		||||
    if ($systemmode eq 'serveronly') {
 | 
			
		||||
        return (ret => 'pf_IN_SERVERONLY');
 | 
			
		||||
 
 | 
			
		||||
@@ -15,13 +15,15 @@ use Locale::gettext;
 | 
			
		||||
use SrvMngr::I18N;
 | 
			
		||||
use SrvMngr qw(theme_list init_session);
 | 
			
		||||
use esmith::FormMagick::Panel::printers;
 | 
			
		||||
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
my $adb;
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c = shift;
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
    my %prt_datas = ();
 | 
			
		||||
    my $title     = $c->l('prt_FORM_TITLE');
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $prt_datas{'trt'} = 'LIST';
 | 
			
		||||
    my @printerDrivers;
 | 
			
		||||
 | 
			
		||||
@@ -37,6 +39,7 @@ sub do_display {
 | 
			
		||||
    my $rt      = $c->current_route;
 | 
			
		||||
    my $trt     = ($c->param('trt') || 'LIST');
 | 
			
		||||
    my $printer = $c->param('printer') || '';
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
 | 
			
		||||
    #$trt = 'DEL' if ( $printer );
 | 
			
		||||
    #$trt = 'ADD' if ( $rt eq 'printeradd' );
 | 
			
		||||
@@ -77,6 +80,7 @@ sub do_update {
 | 
			
		||||
    my $trt       = ($c->param('trt') || 'LIST');
 | 
			
		||||
    my %prt_datas = ();
 | 
			
		||||
    my $title     = $c->l('prt_FORM_TITLE');
 | 
			
		||||
   	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $prt_datas{'trt'} = $trt;
 | 
			
		||||
    my ($res, $result) = '';
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,8 +20,9 @@ use SrvMngr qw(theme_list init_session);
 | 
			
		||||
use esmith::AccountsDB;
 | 
			
		||||
 | 
			
		||||
#use URI::Escape;
 | 
			
		||||
our $cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
#our $cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
my ($cdb,$adb);
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c = shift;
 | 
			
		||||
@@ -31,6 +32,8 @@ sub main {
 | 
			
		||||
    my $notif     = '';
 | 
			
		||||
    $pse_datas{trt} = 'LST';
 | 
			
		||||
    my @pseudonyms;
 | 
			
		||||
	#$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
 | 
			
		||||
    if ($adb) {
 | 
			
		||||
        @pseudonyms = $adb->pseudonyms();
 | 
			
		||||
@@ -47,7 +50,9 @@ sub do_display {
 | 
			
		||||
    my $pseudonym = $c->param('pseudonym') || '';
 | 
			
		||||
    my $title     = $c->l('pse_FORM_TITLE');
 | 
			
		||||
    my %pse_datas = ();
 | 
			
		||||
    $pse_datas{'trt'} = $trt;
 | 
			
		||||
 	#$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
	$pse_datas{'trt'} = $trt;
 | 
			
		||||
 | 
			
		||||
    if ($trt eq 'ADD') {
 | 
			
		||||
 | 
			
		||||
@@ -92,6 +97,8 @@ sub do_update {
 | 
			
		||||
    my $rt        = $c->current_route;
 | 
			
		||||
    my $trt       = ($c->param('trt') || 'LST');
 | 
			
		||||
    my $title     = $c->l('pse_FORM_TITLE');
 | 
			
		||||
   	#$cdb = esmith::ConfigDB->open   || die "Couldn't open configuration db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    my %pse_datas = ();
 | 
			
		||||
    $pse_datas{'trt'} = $trt;
 | 
			
		||||
    my ($res, $result) = '';
 | 
			
		||||
 
 | 
			
		||||
@@ -19,14 +19,15 @@ use Locale::gettext;
 | 
			
		||||
use SrvMngr::I18N;
 | 
			
		||||
use SrvMngr qw(theme_list init_session);
 | 
			
		||||
 | 
			
		||||
#our $db = esmith::ConfigDB->open || die "Couldn't open config db";
 | 
			
		||||
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
my $adb;
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c = shift;
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
    my %quo_datas = ();
 | 
			
		||||
    my $title     = $c->l('quo_FORM_TITLE');
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $quo_datas{'trt'} = 'LIST';
 | 
			
		||||
    my @userAccounts;
 | 
			
		||||
 | 
			
		||||
@@ -45,6 +46,7 @@ sub do_display {
 | 
			
		||||
    $trt = 'UPD' if ($user);
 | 
			
		||||
    my %quo_datas = ();
 | 
			
		||||
    my $title     = $c->l('quo_FORM_TITLE');
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $quo_datas{'trt'} = $trt;
 | 
			
		||||
 | 
			
		||||
    if ($trt eq 'UPD') {
 | 
			
		||||
@@ -73,6 +75,7 @@ sub do_update {
 | 
			
		||||
    $quo_datas{trt} = $trt;
 | 
			
		||||
    my $result = '';
 | 
			
		||||
    my $res;
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
 | 
			
		||||
    if ($trt eq 'UPD') {
 | 
			
		||||
        $quo_datas{user}    = ($c->param('user') || '');
 | 
			
		||||
@@ -156,4 +159,10 @@ sub validate_quota {
 | 
			
		||||
        or die($c->l('quo_ERR_MODIFYING') . "\n");
 | 
			
		||||
    return 'OK';
 | 
			
		||||
} ## end sub validate_quota
 | 
			
		||||
 | 
			
		||||
sub toMB
 | 
			
		||||
{
 | 
			
		||||
    my ($self,$kb) = @_;
 | 
			
		||||
    return sprintf("%.2f", $kb / 1024);
 | 
			
		||||
}
 | 
			
		||||
1
 | 
			
		||||
 
 | 
			
		||||
@@ -56,10 +56,11 @@ sub do_action {
 | 
			
		||||
 | 
			
		||||
            #    esmith::util::backgroundCommand( 1, "/sbin/e-smith/signal-event", "post-upgrade",
 | 
			
		||||
            #	    "; ", "/sbin/e-smith/signal-event", "reboot" );
 | 
			
		||||
            system("/sbin/e-smith/signal-event", "post-upgrade") == 0
 | 
			
		||||
                or die("Error occurred while running post-upgrade.\n");
 | 
			
		||||
            system("/sbin/e-smith/signal-event", "reboot") == 0
 | 
			
		||||
                or die("Error occurred while rebooting.\n");
 | 
			
		||||
            esmith::util::backgroundCommand( 1, "/sbin/e-smith/signal-event", "post-upgrade-and-reboot");
 | 
			
		||||
		    #system("/sbin/e-smith/signal-event", "post-upgrade") == 0
 | 
			
		||||
		    #or die("Error occurred while running post-upgrade.\n");
 | 
			
		||||
		    #system("/sbin/e-smith/signal-event", "reboot") == 0
 | 
			
		||||
		    #or die("Error occurred while rebooting.\n");
 | 
			
		||||
        } ## end unless ($debug)
 | 
			
		||||
    } ## end elsif ($function eq 'reconfigure')
 | 
			
		||||
    $c->stash(title => $title, modul => $result);
 | 
			
		||||
 
 | 
			
		||||
@@ -28,12 +28,15 @@ use esmith::util;
 | 
			
		||||
#use Exporter;
 | 
			
		||||
#use Carp qw(verbose);
 | 
			
		||||
#use esmith::FormMagick::Panel::useraccounts;
 | 
			
		||||
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
#our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
my ($cdb,$adb);
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c = shift;
 | 
			
		||||
    $c->app->log->info($c->log_req);
 | 
			
		||||
	$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    my $notif     = '';
 | 
			
		||||
    my %usr_datas = ();
 | 
			
		||||
    my $title     = $c->l('usr_FORM_TITLE');
 | 
			
		||||
@@ -52,6 +55,8 @@ sub do_display {
 | 
			
		||||
    my %usr_datas = ();
 | 
			
		||||
    my $title     = $c->l('usr_FORM_TITLE');
 | 
			
		||||
    my ($notif, $modul) = '';
 | 
			
		||||
	$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    $usr_datas{'trt'} = $trt;
 | 
			
		||||
 | 
			
		||||
    if ($trt eq 'ADD') {
 | 
			
		||||
@@ -138,6 +143,8 @@ sub do_update {
 | 
			
		||||
    $usr_datas{trt} = $trt;
 | 
			
		||||
    my $title = $c->l('usr_FORM_TITLE');
 | 
			
		||||
    my ($res, $result) = '';
 | 
			
		||||
	$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
 | 
			
		||||
	$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
 | 
			
		||||
    if ($trt eq 'ADD') {
 | 
			
		||||
 | 
			
		||||
@@ -394,10 +401,12 @@ sub remove_account {
 | 
			
		||||
sub reset_password {
 | 
			
		||||
    my ($c, $user, $passw1) = @_;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    unless (($user) = ($user =~ /^(\w[\-\w_\.]*)$/)) {
 | 
			
		||||
        return $c->l('usr_TAINTED_USER');
 | 
			
		||||
    }
 | 
			
		||||
    $user = $1;
 | 
			
		||||
	my $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
 | 
			
		||||
    my $acct = $adb->get($user);
 | 
			
		||||
 | 
			
		||||
    if ($acct->prop('type') eq "user") {
 | 
			
		||||
@@ -445,10 +454,9 @@ sub validate_password {
 | 
			
		||||
    }
 | 
			
		||||
    $reason ||= "Software error: password check failed";
 | 
			
		||||
    return "OK" if ($reason eq "ok");
 | 
			
		||||
    return
 | 
			
		||||
          $c->l("Bad Password Choice") . ": "
 | 
			
		||||
    return $c->l("Bad Password Choice") . ": "
 | 
			
		||||
        . $c->l("The password you have chosen is not a good choice, because") . " "
 | 
			
		||||
        . $c->($reason) . ".";
 | 
			
		||||
        . $c->l($reason) . ".";
 | 
			
		||||
} ## end sub validate_password
 | 
			
		||||
 | 
			
		||||
sub emailForward_list {
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ use esmith::AccountsDB;
 | 
			
		||||
use Locale::gettext;
 | 
			
		||||
use SrvMngr::I18N;
 | 
			
		||||
use SrvMngr qw( theme_list init_session is_normal_password );
 | 
			
		||||
our $cdb = esmith::ConfigDB->open_ro || die "Couldn't open configuration db";
 | 
			
		||||
#our $cdb = esmith::ConfigDB->open_ro || die "Couldn't open configuration db";
 | 
			
		||||
 | 
			
		||||
sub main {
 | 
			
		||||
    my $c         = shift;
 | 
			
		||||
@@ -194,6 +194,7 @@ sub check_password {
 | 
			
		||||
    my $c        = shift;
 | 
			
		||||
    my $password = shift;
 | 
			
		||||
    my $strength;
 | 
			
		||||
   	my $cdb = esmith::ConfigDB->open_ro || die "Couldn't open configuration db";
 | 
			
		||||
    my $rec = $cdb->get('passwordstrength');
 | 
			
		||||
    $strength = ($rec ? ($rec->prop('Users') || 'none') : 'none');
 | 
			
		||||
    return validate_password($c, $strength, $password);
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ use Locale::gettext;
 | 
			
		||||
use SrvMngr::I18N;
 | 
			
		||||
use SrvMngr qw(theme_list init_session);
 | 
			
		||||
use esmith::ConfigDB;
 | 
			
		||||
use Time::TAI64;
 | 
			
		||||
#use Time::TAI64;
 | 
			
		||||
use File::Basename;
 | 
			
		||||
use HTML::Entities;
 | 
			
		||||
use esmith::FormMagick qw(gen_locale_date_string);
 | 
			
		||||
@@ -104,10 +104,11 @@ sub do_action {
 | 
			
		||||
sub timestamp2local {
 | 
			
		||||
    $_ = shift;
 | 
			
		||||
 | 
			
		||||
    if (/^(\@[0-9a-f]{24})(.*)/s) {
 | 
			
		||||
        return Time::TAI64::tai64nlocal($1) . $2;
 | 
			
		||||
    } elsif (/^([0-9]{10}\.[0-9]{3})(.*)/s) {
 | 
			
		||||
        return localtime($1) . $2;
 | 
			
		||||
    #if (/^(\@[0-9a-f]{24})(.*)/s) {
 | 
			
		||||
    #    return Time::TAI64::tai64nlocal($1) . $2;
 | 
			
		||||
    #} els
 | 
			
		||||
	if (/^([0-9]{10}\.[0-9]{3})(.*)/s) {
 | 
			
		||||
		return localtime($1) . $2;
 | 
			
		||||
    }
 | 
			
		||||
    return $_;
 | 
			
		||||
} ## end sub timestamp2local
 | 
			
		||||
@@ -128,6 +129,7 @@ sub findlogFiles {
 | 
			
		||||
            # or not log files
 | 
			
		||||
            foreach (
 | 
			
		||||
                qw(
 | 
			
		||||
                journal
 | 
			
		||||
                lastlog
 | 
			
		||||
                btmp$
 | 
			
		||||
                wtmp
 | 
			
		||||
@@ -293,4 +295,4 @@ sub download_logFile {
 | 
			
		||||
    );
 | 
			
		||||
    return undef;
 | 
			
		||||
} ## end sub download_logFile
 | 
			
		||||
1;
 | 
			
		||||
1;
 | 
			
		||||
@@ -43,8 +43,9 @@ sub init_data {
 | 
			
		||||
sub reconf_needed {
 | 
			
		||||
 | 
			
		||||
    my $cdb = esmith::ConfigDB->open_ro() or die("can't open Config DB");
 | 
			
		||||
    my $unsafe = ($cdb->get('bootstrap-console') and $cdb->get('bootstrap-console')->prop('Run') eq 'yes') ||
 | 
			
		||||
         ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
 | 
			
		||||
    #my $unsafe = ($cdb->get('bootstrap-console') and $cdb->get('bootstrap-console')->prop('Run') eq 'yes') ||
 | 
			
		||||
    #     ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
 | 
			
		||||
	my $unsafe = ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';   
 | 
			
		||||
    return $unsafe;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -104,5 +105,4 @@ sub check_adminalias {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
@@ -0,0 +1,17 @@
 | 
			
		||||
/* css/sme-password.css */
 | 
			
		||||
.input-container {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
}
 | 
			
		||||
.sme-password {
 | 
			
		||||
    padding-right: 5px; /* Ensure space for the toggle icon */
 | 
			
		||||
}
 | 
			
		||||
.toggle-password {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    right: 4px; /* Position it towards the right */
 | 
			
		||||
    top: 50%; /* Center vertically */
 | 
			
		||||
    transform: translateY(-50%); /* Adjust for exact centering */
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    width: 20px; /* Set the width of the icon */
 | 
			
		||||
    height: 20px; /* Set the height of the icon */
 | 
			
		||||
}
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								root/usr/share/smanager/themes/default/public/images/visible.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								root/usr/share/smanager/themes/default/public/images/visible.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.2 KiB  | 
@@ -1,278 +1,298 @@
 | 
			
		||||
document.addEventListener('DOMContentLoaded', () => {
 | 
			
		||||
  const flagContainer = document.getElementById('flag-container');
 | 
			
		||||
 | 
			
		||||
        async function getCountryName(countryCode) {
 | 
			
		||||
            try {
 | 
			
		||||
                const response = await fetch(`https://restcountries.com/v3.1/alpha/${countryCode}`);
 | 
			
		||||
                if (!response.ok) throw new Error('Country not found');
 | 
			
		||||
                const data = await response.json();
 | 
			
		||||
                // Return the name in the native language
 | 
			
		||||
                return data[0].name.common; 
 | 
			
		||||
            } catch (error) {
 | 
			
		||||
                console.error(error);
 | 
			
		||||
                return 'Unknown Country';
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function getFlagEmoji(locale) {
 | 
			
		||||
            // Split the locale to get the language and country code
 | 
			
		||||
            const parts = locale.split('-');
 | 
			
		||||
            let countryCode;
 | 
			
		||||
 | 
			
		||||
            // Handle single subtag (language only) or double subtag (language-country)
 | 
			
		||||
            if (parts.length === 1) {
 | 
			
		||||
                countryCode = getCountryCodeFromLanguage(parts[0]);
 | 
			
		||||
            } else if (parts.length === 2) {
 | 
			
		||||
                countryCode = parts[1].toLowerCase(); // Use the country code
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // If country code is not found, set a fallback output
 | 
			
		||||
            if (!countryCode) {
 | 
			
		||||
                const fallback = `? ${locale.toUpperCase()}`; // Just a question mark and the full locale
 | 
			
		||||
                return { flag: fallback, isUnknown: true, countryName: 'Unknown Country' };
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Convert the country code to a flag emoji
 | 
			
		||||
            return {
 | 
			
		||||
                flag: String.fromCodePoint(...[...countryCode.toUpperCase()].map(char => 0x1F1E6 + char.charCodeAt(0) - 'A'.charCodeAt(0))),
 | 
			
		||||
                isUnknown: false,
 | 
			
		||||
                countryCode: countryCode
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function getCountryCodeFromLanguage(language) {
 | 
			
		||||
            // Map languages to countries (this is an example, extend as needed)
 | 
			
		||||
            const languageToCountryMap = {
 | 
			
		||||
                  // Add more mappings as needed
 | 
			
		||||
    "af": "NA",
 | 
			
		||||
    "agq": "CM",
 | 
			
		||||
    "ak": "GH",
 | 
			
		||||
    "am": "ET",
 | 
			
		||||
    "ar": "01",
 | 
			
		||||
    "as": "IN",
 | 
			
		||||
    "asa": "TZ",
 | 
			
		||||
    "ast": "ES",
 | 
			
		||||
    "az": "rl",
 | 
			
		||||
    "bas": "CM",
 | 
			
		||||
    "be": "BY",
 | 
			
		||||
    "bem": "ZM",
 | 
			
		||||
    "bez": "TZ",
 | 
			
		||||
    "bg": "BG",
 | 
			
		||||
    "bm": "ML",
 | 
			
		||||
    "bn": "BD",
 | 
			
		||||
    "bo": "CN",
 | 
			
		||||
    "br": "FR",
 | 
			
		||||
    "brx": "IN",
 | 
			
		||||
    "bs": "rl",
 | 
			
		||||
    "ca": "AD",
 | 
			
		||||
    "ccp": "BD",
 | 
			
		||||
    "ce": "RU",
 | 
			
		||||
    "cgg": "UG",
 | 
			
		||||
    "chr": "US",
 | 
			
		||||
    "ckb": "IQ",
 | 
			
		||||
    "cs": "CZ",
 | 
			
		||||
    "cy": "GB",
 | 
			
		||||
    "da": "DK",
 | 
			
		||||
    "dav": "KE",
 | 
			
		||||
    "de": "DE",
 | 
			
		||||
    "dje": "NE",
 | 
			
		||||
    "dsb": "DE",
 | 
			
		||||
    "dua": "CM",
 | 
			
		||||
    "dyo": "SN",
 | 
			
		||||
    "dz": "BT",
 | 
			
		||||
    "ebu": "KE",
 | 
			
		||||
    "ee": "GH",
 | 
			
		||||
    "el": "CY",
 | 
			
		||||
    "en": "01",
 | 
			
		||||
    "es": "ES",
 | 
			
		||||
    "et": "EE",
 | 
			
		||||
    "eu": "ES",
 | 
			
		||||
    "ewo": "CM",
 | 
			
		||||
    "fa": "AF",
 | 
			
		||||
    "ff": "CM",
 | 
			
		||||
    "fi": "FI",
 | 
			
		||||
    "fil": "PH",
 | 
			
		||||
    "fo": "FO",
 | 
			
		||||
    "fr": "FR",
 | 
			
		||||
    "fur": "IT",
 | 
			
		||||
    "fy": "NL",
 | 
			
		||||
    "ga": "IE",
 | 
			
		||||
    "gd": "GB",
 | 
			
		||||
    "gl": "ES",
 | 
			
		||||
    "gsw": "CH",
 | 
			
		||||
    "gu": "IN",
 | 
			
		||||
    "guz": "KE",
 | 
			
		||||
    "gv": "IM",
 | 
			
		||||
    "ha": "GH",
 | 
			
		||||
    "haw": "US",
 | 
			
		||||
    "he": "IL",
 | 
			
		||||
    "hi": "IN",
 | 
			
		||||
    "hr": "HR",
 | 
			
		||||
    "hsb": "DE",
 | 
			
		||||
    "hu": "HU",
 | 
			
		||||
    "hy": "AM",
 | 
			
		||||
    "id": "ID",
 | 
			
		||||
    "ig": "NG",
 | 
			
		||||
    "ii": "CN",
 | 
			
		||||
    "is": "IS",
 | 
			
		||||
    "it": "IT",
 | 
			
		||||
    "ja": "JP",
 | 
			
		||||
    "jgo": "CM",
 | 
			
		||||
    "jmc": "TZ",
 | 
			
		||||
    "ka": "GE",
 | 
			
		||||
    "kab": "DZ",
 | 
			
		||||
    "kam": "KE",
 | 
			
		||||
    "kde": "TZ",
 | 
			
		||||
    "kea": "CV",
 | 
			
		||||
    "khq": "ML",
 | 
			
		||||
    "ki": "KE",
 | 
			
		||||
    "kk": "KZ",
 | 
			
		||||
    "kkj": "CM",
 | 
			
		||||
    "kl": "GL",
 | 
			
		||||
    "kln": "KE",
 | 
			
		||||
    "km": "KH",
 | 
			
		||||
    "kn": "IN",
 | 
			
		||||
    "ko": "KP",
 | 
			
		||||
    "kok": "IN",
 | 
			
		||||
    "ks": "IN",
 | 
			
		||||
    "ksb": "TZ",
 | 
			
		||||
    "ksf": "CM",
 | 
			
		||||
    "ksh": "DE",
 | 
			
		||||
    "kw": "GB",
 | 
			
		||||
    "ky": "KG",
 | 
			
		||||
    "lag": "TZ",
 | 
			
		||||
    "lb": "LU",
 | 
			
		||||
    "lg": "UG",
 | 
			
		||||
    "lkt": "US",
 | 
			
		||||
    "ln": "AO",
 | 
			
		||||
    "lo": "LA",
 | 
			
		||||
    "lrc": "IQ",
 | 
			
		||||
    "lt": "LT",
 | 
			
		||||
    "lu": "CD",
 | 
			
		||||
    "luo": "KE",
 | 
			
		||||
    "Luo": "KE",
 | 
			
		||||
    "luy": "KE",
 | 
			
		||||
    "lv": "LV",
 | 
			
		||||
    "mas": "KE",
 | 
			
		||||
    "mer": "KE",
 | 
			
		||||
    "mfe": "MU",
 | 
			
		||||
    "mg": "MG",
 | 
			
		||||
    "mgh": "MZ",
 | 
			
		||||
    "mgo": "CM",
 | 
			
		||||
    "mk": "MK",
 | 
			
		||||
    "ml": "IN",
 | 
			
		||||
    "mn": "MN",
 | 
			
		||||
    "mr": "IN",
 | 
			
		||||
    "ms": "BN",
 | 
			
		||||
    "mt": "MT",
 | 
			
		||||
    "mua": "CM",
 | 
			
		||||
    "my": "MM",
 | 
			
		||||
    "mzn": "IR",
 | 
			
		||||
    "naq": "NA",
 | 
			
		||||
    "nb": "NO",
 | 
			
		||||
    "nd": "ZW",
 | 
			
		||||
    "nds": "DE",
 | 
			
		||||
    "ne": "IN",
 | 
			
		||||
    "nl": "NL",
 | 
			
		||||
    "nmg": "CM",
 | 
			
		||||
    "nn": "NO",
 | 
			
		||||
    "nnh": "CM",
 | 
			
		||||
    "nus": "SS",
 | 
			
		||||
    "nyn": "UG",
 | 
			
		||||
    "om": "ET",
 | 
			
		||||
    "or": "IN",
 | 
			
		||||
    "os": "GE",
 | 
			
		||||
    "pa": "ab",
 | 
			
		||||
    "pl": "PL",
 | 
			
		||||
    "ps": "AF",
 | 
			
		||||
    "pt": "PT",
 | 
			
		||||
    "qu": "BO",
 | 
			
		||||
    "rm": "CH",
 | 
			
		||||
    "rn": "BI",
 | 
			
		||||
    "ro": "RO",
 | 
			
		||||
    "rof": "TZ",
 | 
			
		||||
    "ru": "RU",
 | 
			
		||||
    "rw": "RW",
 | 
			
		||||
    "rwk": "TZ",
 | 
			
		||||
    "sah": "RU",
 | 
			
		||||
    "saq": "KE",
 | 
			
		||||
    "sbp": "TZ",
 | 
			
		||||
    "se": "SE",
 | 
			
		||||
    "seh": "MZ",
 | 
			
		||||
    "ses": "ML",
 | 
			
		||||
    "sg": "CF",
 | 
			
		||||
    "shi": "tn",
 | 
			
		||||
    "si": "LK",
 | 
			
		||||
    "sk": "SK",
 | 
			
		||||
    "sl": "SI",
 | 
			
		||||
    "smn": "FI",
 | 
			
		||||
    "sn": "ZW",
 | 
			
		||||
    "so": "SO",
 | 
			
		||||
    "sq": "AL",
 | 
			
		||||
    "sr": "rl",
 | 
			
		||||
    "sv": "AX",
 | 
			
		||||
    "sw": "CD",
 | 
			
		||||
    "ta": "IN",
 | 
			
		||||
    "te": "IN",
 | 
			
		||||
    "teo": "KE",
 | 
			
		||||
    "tg": "TJ",
 | 
			
		||||
    "th": "TH",
 | 
			
		||||
    "ti": "ER",
 | 
			
		||||
    "to": "TO",
 | 
			
		||||
    "tr": "TR",
 | 
			
		||||
    "tt": "RU",
 | 
			
		||||
    "twq": "NE",
 | 
			
		||||
    "tzm": "MA",
 | 
			
		||||
    "ug": "CN",
 | 
			
		||||
    "uk": "UA",
 | 
			
		||||
    "ur": "IN",
 | 
			
		||||
    "uz": "ab",
 | 
			
		||||
    "vai": "tn",
 | 
			
		||||
    "Vai": "tn",
 | 
			
		||||
    "vi": "VN",
 | 
			
		||||
    "vun": "TZ",
 | 
			
		||||
    "wae": "CH",
 | 
			
		||||
    "wo": "SN",
 | 
			
		||||
    "xog": "UG",
 | 
			
		||||
    "yav": "CM",
 | 
			
		||||
    "yi": "01",
 | 
			
		||||
    "yo": "BJ",
 | 
			
		||||
    "yue": "ns",
 | 
			
		||||
    "zgh": "MA",
 | 
			
		||||
    "zh": "ns",
 | 
			
		||||
    "zu": "ZA"
 | 
			
		||||
	const flagContainer = document.getElementById('flag-container');
 | 
			
		||||
	// Mapping of language codes to country codes and their names
 | 
			
		||||
	const languageToCountryMap = {
 | 
			
		||||
		"af": { code: "NA", name: "Namibia" },
 | 
			
		||||
		"agq": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"ak": { code: "GH", name: "Ghana" },
 | 
			
		||||
		"am": { code: "ET", name: "Ethiopia" },
 | 
			
		||||
		"ar": { code: "SA", name: "Saudi Arabia" },
 | 
			
		||||
		"as": { code: "IN", name: "India" },
 | 
			
		||||
		"asa": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"ast": { code: "ES", name: "Spain" },
 | 
			
		||||
		"az": { code: "AZ", name: "Azerbaijan" },
 | 
			
		||||
		"bas": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"be": { code: "BY", name: "Belarus" },
 | 
			
		||||
		"bem": { code: "ZM", name: "Zambia" },
 | 
			
		||||
		"bez": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"bg": { code: "BG", name: "Bulgaria" },
 | 
			
		||||
		"bm": { code: "ML", name: "Mali" },
 | 
			
		||||
		"bn": { code: "BD", name: "Bangladesh" },
 | 
			
		||||
		"bo": { code: "CN", name: "China" },
 | 
			
		||||
		"br": { code: "FR", name: "France" },
 | 
			
		||||
		"brx": { code: "IN", name: "India" },
 | 
			
		||||
		"bs": { code: "BA", name: "Bosnia and Herzegovina" },
 | 
			
		||||
		"ca": { code: "AD", name: "Andorra" },
 | 
			
		||||
		"ccp": { code: "BD", name: "Bangladesh" },
 | 
			
		||||
		"ce": { code: "RU", name: "Russia" },
 | 
			
		||||
		"cgg": { code: "UG", name: "Uganda" },
 | 
			
		||||
		"chr": { code: "US", name: "United States" },
 | 
			
		||||
		"ckb": { code: "IQ", name: "Iraq" },
 | 
			
		||||
		"cs": { code: "CZ", name: "Czech Republic" },
 | 
			
		||||
		"cy": { code: "GB", name: "United Kingdom" },
 | 
			
		||||
		"da": { code: "DK", name: "Denmark" },
 | 
			
		||||
		"dav": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"de": { code: "DE", name: "Germany" },
 | 
			
		||||
		"dje": { code: "NE", name: "Niger" },
 | 
			
		||||
		"dsb": { code: "DE", name: "Germany" },
 | 
			
		||||
		"dua": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"dyo": { code: "SN", name: "Senegal" },
 | 
			
		||||
		"dz": { code: "BT", name: "Bhutan" },
 | 
			
		||||
		"ebu": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"ee": { code: "GH", name: "Ghana" },
 | 
			
		||||
		"el": { code: "CY", name: "Cyprus" },
 | 
			
		||||
		"en": { code: "US", name: "United States" }, // Assume US for English if unspecified
 | 
			
		||||
		"es": { code: "ES", name: "Spain" },
 | 
			
		||||
		"et": { code: "EE", name: "Estonia" },
 | 
			
		||||
		"eu": { code: "ES", name: "Spain" },
 | 
			
		||||
		"ewo": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"fa": { code: "AF", name: "Afghanistan" },
 | 
			
		||||
		"ff": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"fi": { code: "FI", name: "Finland" },
 | 
			
		||||
		"fil": { code: "PH", name: "Philippines" },
 | 
			
		||||
		"fo": { code: "FO", name: "Faroe Islands" },
 | 
			
		||||
		"fr": { code: "FR", name: "France" },
 | 
			
		||||
		"fur": { code: "IT", name: "Italy" },
 | 
			
		||||
		"fy": { code: "NL", name: "Netherlands" },
 | 
			
		||||
		"ga": { code: "IE", name: "Ireland" },
 | 
			
		||||
		"gd": { code: "GB", name: "United Kingdom" },
 | 
			
		||||
		"gl": { code: "ES", name: "Spain" },
 | 
			
		||||
		"gsw": { code: "CH", name: "Switzerland" },
 | 
			
		||||
		"gu": { code: "IN", name: "India" },
 | 
			
		||||
		"guz": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"gv": { code: "IM", name: "Isle of Man" },
 | 
			
		||||
		"ha": { code: "GH", name: "Ghana" },
 | 
			
		||||
		"haw": { code: "US", name: "United States" },
 | 
			
		||||
		"he": { code: "IL", name: "Israel" },
 | 
			
		||||
		"hi": { code: "IN", name: "India" },
 | 
			
		||||
		"hr": { code: "HR", name: "Croatia" },
 | 
			
		||||
		"hsb": { code: "DE", name: "Germany" },
 | 
			
		||||
		"hu": { code: "HU", name: "Hungary" },
 | 
			
		||||
		"hy": { code: "AM", name: "Armenia" },
 | 
			
		||||
		"id": { code: "ID", name: "Indonesia" },
 | 
			
		||||
		"ig": { code: "NG", name: "Nigeria" },
 | 
			
		||||
		"ii": { code: "CN", name: "China" },
 | 
			
		||||
		"is": { code: "IS", name: "Iceland" },
 | 
			
		||||
		"it": { code: "IT", name: "Italy" },
 | 
			
		||||
		"ja": { code: "JP", name: "Japan" },
 | 
			
		||||
		"jgo": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"jmc": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"ka": { code: "GE", name: "Georgia" },
 | 
			
		||||
		"kab": { code: "DZ", name: "Algeria" },
 | 
			
		||||
		"kam": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"kde": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"kea": { code: "CV", name: "Cabo Verde" },
 | 
			
		||||
		"khq": { code: "ML", name: "Mali" },
 | 
			
		||||
		"ki": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"kk": { code: "KZ", name: "Kazakhstan" },
 | 
			
		||||
		"kkj": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"kl": { code: "GL", name: "Greenland" },
 | 
			
		||||
		"kln": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"km": { code: "KH", name: "Cambodia" },
 | 
			
		||||
		"kn": { code: "IN", name: "India" },
 | 
			
		||||
		"ko": { code: "KP", name: "North Korea" },
 | 
			
		||||
		"kok": { code: "IN", name: "India" },
 | 
			
		||||
		"ks": { code: "IN", name: "India" },
 | 
			
		||||
		"ksb": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"ksf": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"ksh": { code: "DE", name: "Germany" },
 | 
			
		||||
		"kw": { code: "GB", name: "United Kingdom" },
 | 
			
		||||
		"ky": { code: "KG", name: "Kyrgyzstan" },
 | 
			
		||||
		"lag": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"lb": { code: "LU", name: "Luxembourg" },
 | 
			
		||||
		"lg": { code: "UG", name: "Uganda" },
 | 
			
		||||
		"lkt": { code: "US", name: "United States" },
 | 
			
		||||
		"ln": { code: "AO", name: "Angola" },
 | 
			
		||||
		"lo": { code: "LA", name: "Laos" },
 | 
			
		||||
		"lrc": { code: "IQ", name: "Iraq" },
 | 
			
		||||
		"lt": { code: "LT", name: "Lithuania" },
 | 
			
		||||
		"lu": { code: "CD", name: "Democratic Republic of the Congo" },
 | 
			
		||||
		"luo": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"Luo": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"luy": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"lv": { code: "LV", name: "Latvia" },
 | 
			
		||||
		"mas": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"mer": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"mfe": { code: "MU", name: "Mauritius" },
 | 
			
		||||
		"mg": { code: "MG", name: "Madagascar" },
 | 
			
		||||
		"mgh": { code: "MZ", name: "Mozambique" },
 | 
			
		||||
		"mgo": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"mk": { code: "MK", name: "North Macedonia" },
 | 
			
		||||
		"ml": { code: "IN", name: "India" },
 | 
			
		||||
		"mn": { code: "MN", name: "Mongolia" },
 | 
			
		||||
		"mr": { code: "IN", name: "India" },
 | 
			
		||||
		"ms": { code: "BN", name: "Brunei" },
 | 
			
		||||
		"mt": { code: "MT", name: "Malta" },
 | 
			
		||||
		"mua": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"my": { code: "MM", name: "Myanmar" },
 | 
			
		||||
		"mzn": { code: "IR", name: "Iran" },
 | 
			
		||||
		"naq": { code: "NA", name: "Namibia" },
 | 
			
		||||
		"nb": { code: "NO", name: "Norway" },
 | 
			
		||||
		"nd": { code: "ZW", name: "Zimbabwe" },
 | 
			
		||||
		"nds": { code: "DE", name: "Germany" },
 | 
			
		||||
		"ne": { code: "IN", name: "India" },
 | 
			
		||||
		"nl": { code: "NL", name: "Netherlands" },
 | 
			
		||||
		"nmg": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"nn": { code: "NO", name: "Norway" },
 | 
			
		||||
		"nnh": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"nus": { code: "SS", name: "South Sudan" },
 | 
			
		||||
		"nyn": { code: "UG", name: "Uganda" },
 | 
			
		||||
		"om": { code: "ET", name: "Ethiopia" },
 | 
			
		||||
		"or": { code: "IN", name: "India" },
 | 
			
		||||
		"os": { code: "GE", name: "Georgia" },
 | 
			
		||||
		"pa": { code: "PK", name: "Pakistan" },
 | 
			
		||||
		"pl": { code: "PL", name: "Poland" },
 | 
			
		||||
		"ps": { code: "AF", name: "Afghanistan" },
 | 
			
		||||
		"pt": { code: "PT", name: "Portugal" },
 | 
			
		||||
		"qu": { code: "BO", name: "Bolivia" },
 | 
			
		||||
		"rm": { code: "CH", name: "Switzerland" },
 | 
			
		||||
		"rn": { code: "BI", name: "Burundi" },
 | 
			
		||||
		"ro": { code: "RO", name: "Romania" },
 | 
			
		||||
		"rof": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"ru": { code: "RU", name: "Russia" },
 | 
			
		||||
		"rw": { code: "RW", name: "Rwanda" },
 | 
			
		||||
		"rwk": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"sah": { code: "RU", name: "Russia" },
 | 
			
		||||
		"saq": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"sbp": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"se": { code: "SE", name: "Sweden" },
 | 
			
		||||
		"seh": { code: "MZ", name: "Mozambique" },
 | 
			
		||||
		"ses": { code: "ML", name: "Mali" },
 | 
			
		||||
		"sg": { code: "CF", name: "Central African Republic" },
 | 
			
		||||
		"shi": { code: "TN", name: "Tunisia" },
 | 
			
		||||
		"si": { code: "LK", name: "Sri Lanka" },
 | 
			
		||||
		"sk": { code: "SK", name: "Slovakia" },
 | 
			
		||||
		"sl": { code: "SI", name: "Slovenia" },
 | 
			
		||||
		"smn": { code: "FI", name: "Finland" },
 | 
			
		||||
		"sn": { code: "ZW", name: "Zimbabwe" },
 | 
			
		||||
		"so": { code: "SO", name: "Somalia" },
 | 
			
		||||
		"sq": { code: "AL", name: "Albania" },
 | 
			
		||||
		"sr": { code: "RS", name: "Serbia" },
 | 
			
		||||
		"sv": { code: "SE", name: "Sweden" },
 | 
			
		||||
		"sw": { code: "CD", name: "Democratic Republic of the Congo" },
 | 
			
		||||
		"ta": { code: "IN", name: "India" },
 | 
			
		||||
		"te": { code: "IN", name: "India" },
 | 
			
		||||
		"teo": { code: "KE", name: "Kenya" },
 | 
			
		||||
		"tg": { code: "TJ", name: "Tajikistan" },
 | 
			
		||||
		"th": { code: "TH", name: "Thailand" },
 | 
			
		||||
		"ti": { code: "ER", name: "Eritrea" },
 | 
			
		||||
		"to": { code: "TO", name: "Tonga" },
 | 
			
		||||
		"tr": { code: "TR", name: "Turkey" },
 | 
			
		||||
		"tt": { code: "RU", name: "Russia" },
 | 
			
		||||
		"twq": { code: "NE", name: "Niger" },
 | 
			
		||||
		"tzm": { code: "MA", name: "Morocco" },
 | 
			
		||||
		"ug": { code: "CN", name: "China" },
 | 
			
		||||
		"uk": { code: "UA", name: "Ukraine" },
 | 
			
		||||
		"ur": { code: "IN", name: "India" },
 | 
			
		||||
		"uz": { code: "UZ", name: "Uzbekistan" },
 | 
			
		||||
		"vai": { code: "TN", name: "Tunisia" },
 | 
			
		||||
		"Vai": { code: "TN", name: "Tunisia" },
 | 
			
		||||
		"vi": { code: "VN", name: "Vietnam" },
 | 
			
		||||
		"vun": { code: "TZ", name: "Tanzania" },
 | 
			
		||||
		"wae": { code: "CH", name: "Switzerland" },
 | 
			
		||||
		"wo": { code: "SN", name: "Senegal" },
 | 
			
		||||
		"xog": { code: "UG", name: "Uganda" },
 | 
			
		||||
		"yav": { code: "CM", name: "Cameroon" },
 | 
			
		||||
		"yi": { code: "01", name: "Unknown" }, // Placeholder for unspecified region
 | 
			
		||||
		"yo": { code: "BJ", name: "Benin" },
 | 
			
		||||
		"yue": { code: "CN", name: "China" },
 | 
			
		||||
		"zgh": { code: "MA", name: "Morocco" },
 | 
			
		||||
		"zh": { code: "CN", name: "China" },
 | 
			
		||||
		"zu": { code: "ZA", name: "South Africa" },
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            };
 | 
			
		||||
		//async function getCountryName(countryCode) {
 | 
			
		||||
			//try {
 | 
			
		||||
				//const response = await fetch(`https://restcountries.com/v3.1/alpha/${countryCode}`);
 | 
			
		||||
				//if (!response.ok) throw new Error('Country not found');
 | 
			
		||||
				//const data = await response.json();
 | 
			
		||||
				//// Return the name in the native language
 | 
			
		||||
				//return data[0].name.common; 
 | 
			
		||||
			//} catch (error) {
 | 
			
		||||
				//console.error(error);
 | 
			
		||||
				//return 'Unknown Country';
 | 
			
		||||
			//}
 | 
			
		||||
		//}
 | 
			
		||||
 | 
			
		||||
            return languageToCountryMap[language] || null;
 | 
			
		||||
        }
 | 
			
		||||
		function getCountryNameFromLanguage(language) {
 | 
			
		||||
			return languageToCountryMap[language] ? languageToCountryMap[language].name : null;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        async function displayLocaleAndFlag() {
 | 
			
		||||
            // Get the browser locale
 | 
			
		||||
            const userLocale = navigator.language || navigator.userLanguage;
 | 
			
		||||
            const { flag, isUnknown, countryCode } = getFlagEmoji(userLocale);
 | 
			
		||||
		function getCountryCodeFromLanguage(language) {
 | 
			
		||||
			return languageToCountryMap[language] ? languageToCountryMap[language].code : null;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		function getCountryNameFromCountryCode(countryCode) {
 | 
			
		||||
			//alert(`Country code: ${countryCode}`);
 | 
			
		||||
			for (const language in languageToCountryMap) {
 | 
			
		||||
				if (languageToCountryMap.hasOwnProperty(language)) {
 | 
			
		||||
					if (languageToCountryMap[language].code === countryCode) {
 | 
			
		||||
						return languageToCountryMap[language].name;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return null; // Return null if country code not found
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
            // Display the locale and the corresponding flag (or fallback)
 | 
			
		||||
            //document.getElementById('locale').textContent = `Your Locale: ${userLocale}`;
 | 
			
		||||
		function getFlagEmoji(locale) {
 | 
			
		||||
			// Split the locale to get the language and country code
 | 
			
		||||
			const parts = locale.split('-');
 | 
			
		||||
			let countryCode;
 | 
			
		||||
 | 
			
		||||
            if (isUnknown) {
 | 
			
		||||
                const fallbackDiv = document.createElement('div');
 | 
			
		||||
                fallbackDiv.className = 'fallback-box';
 | 
			
		||||
                fallbackDiv.textContent = `? ${userLocale.toUpperCase()}`; // Only show ? and locale code inside the box
 | 
			
		||||
                //document.getElementById('flag-container').textContent = "Flag: ";
 | 
			
		||||
                document.getElementById('flag-container').appendChild(fallbackDiv);
 | 
			
		||||
                // Tooltip for fallback
 | 
			
		||||
                fallbackDiv.title = "Unknown Country"; // Tooltip for fallback
 | 
			
		||||
            } else {
 | 
			
		||||
                const countryName = await getCountryName(countryCode);
 | 
			
		||||
                const flagSpan = document.createElement('span');
 | 
			
		||||
                flagSpan.textContent = flag; // Use flag emoji
 | 
			
		||||
                flagSpan.title = countryName; // Tooltip for the flag in country language
 | 
			
		||||
                //document.getElementById('flag-container').textContent = "Flag: ";
 | 
			
		||||
                document.getElementById('flag-container').appendChild(flagSpan);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
			// Handle single subtag (language only) or double subtag (language-country)
 | 
			
		||||
			if (parts.length === 1) {
 | 
			
		||||
				countryCode = getCountryCodeFromLanguage(parts[0]);
 | 
			
		||||
			} else if (parts.length === 2) {
 | 
			
		||||
				countryCode = parts[1].toLowerCase(); // Use the country code
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
        displayLocaleAndFlag();
 | 
			
		||||
});
 | 
			
		||||
			// If country code is not found, set a fallback output
 | 
			
		||||
			if (!countryCode) {
 | 
			
		||||
				const fallback = `? ${locale.toUpperCase()}`; // Just a question mark and the full locale
 | 
			
		||||
				return { flag: fallback, isUnknown: true, countryName: 'Unknown Country' };
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Convert the country code to a flag emoji
 | 
			
		||||
			return {
 | 
			
		||||
				flag: String.fromCodePoint(...[...countryCode.toUpperCase()].map(char => 0x1F1E6 + char.charCodeAt(0) - 'A'.charCodeAt(0))),
 | 
			
		||||
				isUnknown: false,
 | 
			
		||||
				countryCode: countryCode
 | 
			
		||||
			};
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
function displayLocaleAndFlag() {
 | 
			
		||||
    // Get the browser locale
 | 
			
		||||
    const userLocale = navigator.language || navigator.userLanguage;
 | 
			
		||||
    //alert(`User Locale: ${userLocale}`); // Alert the detected locale
 | 
			
		||||
 | 
			
		||||
    const { flag, isUnknown, countryCode } = getFlagEmoji(userLocale);
 | 
			
		||||
    
 | 
			
		||||
    //alert(`Country Code: ${countryCode}, Is Unknown: ${isUnknown}`); // Debug country code and unknown flag status
 | 
			
		||||
 | 
			
		||||
    // Display the locale and the corresponding flag (or fallback)
 | 
			
		||||
    //document.getElementById('locale').textContent = `Your Locale: ${userLocale}`;
 | 
			
		||||
 | 
			
		||||
    if (isUnknown) {
 | 
			
		||||
        const fallbackDiv = document.createElement('div');
 | 
			
		||||
        fallbackDiv.className = 'fallback-box';
 | 
			
		||||
        fallbackDiv.textContent = `? ${userLocale.toUpperCase()}`; // Show ? and locale code inside the box
 | 
			
		||||
        document.getElementById('flag-container').appendChild(fallbackDiv);
 | 
			
		||||
        
 | 
			
		||||
        // Tooltip for fallback
 | 
			
		||||
        fallbackDiv.title = "Unknown Country"; // Tooltip for fallback
 | 
			
		||||
        //alert('Fallback triggered: Unknown Country'); // Debug fallback
 | 
			
		||||
    } else {
 | 
			
		||||
        const countryName = getCountryNameFromCountryCode(countryCode.toUpperCase());
 | 
			
		||||
        //alert(`Country Name from Country Code: ${countryName}`); // Alert the country name
 | 
			
		||||
 | 
			
		||||
        const flagSpan = document.createElement('span');
 | 
			
		||||
        flagSpan.textContent = flag; // Use flag emoji
 | 
			
		||||
        flagSpan.title = countryName; // Tooltip for the flag in country language
 | 
			
		||||
        document.getElementById('flag-container').appendChild(flagSpan);
 | 
			
		||||
        
 | 
			
		||||
        //alert(`Flag Emoji: ${flag}`); // Debug flag emoji display
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		displayLocaleAndFlag();
 | 
			
		||||
	});
 | 
			
		||||
@@ -0,0 +1,31 @@
 | 
			
		||||
// js/sme-password.js
 | 
			
		||||
$(document).ready(function() {
 | 
			
		||||
    // For each password input
 | 
			
		||||
    $('.sme-password').each(function() {
 | 
			
		||||
        // Create a new container
 | 
			
		||||
        //alert("sme-password");
 | 
			
		||||
        var $inputContainer = $('<div class="input-container"></div>');
 | 
			
		||||
        
 | 
			
		||||
        // Move the input into the new container
 | 
			
		||||
        $(this).wrap($inputContainer);
 | 
			
		||||
        
 | 
			
		||||
        // Create the toggle image
 | 
			
		||||
        var $togglePassword = $('<img src="images/visible.png" alt="Show Password" class="toggle-password" />');
 | 
			
		||||
        
 | 
			
		||||
        // Append the toggle image to the container
 | 
			
		||||
        $(this).after($togglePassword);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $('.toggle-password').on('click', function() {
 | 
			
		||||
        // Find the associated password field
 | 
			
		||||
        var input = $(this).siblings('.sme-password');
 | 
			
		||||
 | 
			
		||||
        // Toggle the type attribute between password and text
 | 
			
		||||
        var inputType = input.attr('type') === 'password' ? 'text' : 'password';
 | 
			
		||||
        input.attr('type', inputType);
 | 
			
		||||
        
 | 
			
		||||
        // Toggle the icon source based on the input type
 | 
			
		||||
        var iconSrc = inputType === 'password' ? 'images/visible.png' : 'images/visible-slash.png';
 | 
			
		||||
        $(this).attr('src', iconSrc);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_tape_configure-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_tape_restore-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_configure-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_configure1-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_restore-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_restore1-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_sel_restore-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_sel_restore1-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_sel_restore2-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_verify-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module back_workstn_verify1-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas->{function}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module backup-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $bac_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module bugreport-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	(DBG)trt: <%= $bugr_datas->{trt} %><br>
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module bugreport2-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	(DBG)trt: <%= $bugr_datas->{trt} %><br>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module clamav-panel'>
 | 
			
		||||
    %if ($config->{debug} == 1) {
 | 
			
		||||
    %if (config->{debug} == 1) {
 | 
			
		||||
	<p>(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	(DBG)FsS stat: <%= $clm_datas->{FilesystemScan}%> <br>
 | 
			
		||||
	(DBG)Quar stat: <%=$clm_datas->{Quarantine} %>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module datetime-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $dat_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module directory-panel'>
 | 
			
		||||
 | 
			
		||||
    %if ($config->{debug} == 1) {
 | 
			
		||||
    %if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	(DBG)dir. access: <%= $dir_datas->{access}%><br>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module domains-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $dom_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module emailaccess-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $mai_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module emaildeliver-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $mai_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module emailfilter-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $mai_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module emailreceive-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $mai_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module emailsettings-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == TRUE) {
 | 
			
		||||
    % if (config->{debug} == TRUE) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $mai_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module module-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
		<p>
 | 
			
		||||
			%= dumper $c->current_route
 | 
			
		||||
		</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module groups-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $grp_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module hostentries-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $hos_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module ibays-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $iba_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	</p>
 | 
			
		||||
@@ -25,4 +25,4 @@
 | 
			
		||||
    </p>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
% end
 | 
			
		||||
% end
 | 
			
		||||
@@ -11,6 +11,7 @@
 | 
			
		||||
    %= stylesheet '/css/sme_main.css'
 | 
			
		||||
    %= stylesheet '/css/sme_menu.css'
 | 
			
		||||
    %= stylesheet '/css/styles.css'
 | 
			
		||||
    %= stylesheet '/css/sme-password.css'
 | 
			
		||||
    %= content_for 'head_contrib'
 | 
			
		||||
    % if (config 'hasJquery') {
 | 
			
		||||
	%= include 'partials/_js_imports'
 | 
			
		||||
@@ -32,6 +33,7 @@
 | 
			
		||||
	%= javascript '/js/buttons.html5.min.js'
 | 
			
		||||
	%= javascript '/js/buttons.print.min.js'
 | 
			
		||||
	%= javascript '/js/flag-by-locale.js'
 | 
			
		||||
	%= javascript '/js/sme-password.js'
 | 
			
		||||
 | 
			
		||||
	<link rel="stylesheet" href="/smanager/css/flag-icon.min.css">
 | 
			
		||||
	%= stylesheet '/css/sme-jquery-overrides.css'
 | 
			
		||||
@@ -125,4 +127,4 @@
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
</html>
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
%= stylesheet '/css/letsencrypt.css'
 | 
			
		||||
<div id="module" class="module Letsencrypt-panel">
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<pre>
 | 
			
		||||
		%= dumper $c->current_route
 | 
			
		||||
		%= dumper $lets_data->{trt}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module localnetworks-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $c->stash("ret")
 | 
			
		||||
 
 | 
			
		||||
@@ -43,9 +43,9 @@
 | 
			
		||||
    <p><span class=label>
 | 
			
		||||
    %=l 'PASSWORD'
 | 
			
		||||
    </span><span class=input>
 | 
			
		||||
    %= password_field 'Password', id => 'id_password', autocomplete => 'current-password'
 | 
			
		||||
    %= password_field 'Password', id => 'id_password', autocomplete => 'current-password', class=>'sme-password'
 | 
			
		||||
    % if (config 'hasJquery') {
 | 
			
		||||
	<a href='#' id='togglePassword' class='toggle-password tg-icon'> <img src="images/visible.png" height="16" alt="Visible"></a>
 | 
			
		||||
	%#<a href='#' id='togglePassword' class='toggle-password tg-icon'> <img src="images/visible.png" height="16" alt="Visible"></a>
 | 
			
		||||
    % }
 | 
			
		||||
    </span></p>
 | 
			
		||||
%}
 | 
			
		||||
@@ -66,4 +66,4 @@
 | 
			
		||||
  % end
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
%end
 | 
			
		||||
%end
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module module-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,9 @@
 | 
			
		||||
<font class="sme-copyright">
 | 
			
		||||
%	if ( $c->is_logged_in ) {
 | 
			
		||||
	SME Server <%= session 'releaseVersion' %>-<%= $c->app->VERSION %> Manager II
 | 
			
		||||
	% my $mode;
 | 
			
		||||
	% if (config->{mode} eq 'development'){ $mode = '-dev';} else { $mode = '';}
 | 
			
		||||
	(Mojo:<%= Mojolicious->VERSION %><%= $mode %>)
 | 
			
		||||
% }
 | 
			
		||||
<br>Copyright 1999-2006 Mitel Corporation<br>
 | 
			
		||||
%= session 'copyRight'
 | 
			
		||||
 
 | 
			
		||||
@@ -90,7 +90,7 @@
 | 
			
		||||
					%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&ibays=$ibays_entry_name">
 | 
			
		||||
                                        %       <a href="ibaysd?CsrfDef=$csrf_token&trt=DEL&ibay=$ibays_entry_name">
 | 
			
		||||
					%	<button type='button' class='sme-remove-button' title='$remove_text' >
 | 
			
		||||
					%		$remove_text
 | 
			
		||||
					%	</button>
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'PASSWORD_NEW', class => 'label'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'newPass', class => 'input'
 | 
			
		||||
	%= password_field 'newPass', class => 'input' , class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'PASSWORD_VERIFY_NEW', class => 'label'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'newPassVerify', class => 'input'
 | 
			
		||||
	%= password_field 'newPassVerify', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
 | 
			
		||||
@@ -39,4 +39,4 @@
 | 
			
		||||
	
 | 
			
		||||
    % end    
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -8,9 +8,9 @@
 | 
			
		||||
        Warning: a reconfigure and reboot is required before proceeding! Failure to do so now
 | 
			
		||||
        may leave your system in an unknown state!</h5></div>
 | 
			
		||||
    <% } %>
 | 
			
		||||
    <% if ( $c->session->{Access} eq 'public' && (($config->{debug} ne '0') || ($config->{mode} ne 'production')) ) { %>
 | 
			
		||||
    <% if ( $c->session->{Access} eq 'public' && ((config->{debug} ne '0') || (config->{mode} ne 'production')) ) { %>
 | 
			
		||||
	<div class="sme-error"><h5>
 | 
			
		||||
        Warning: Development or debug mode enabled AND public access is offered !
 | 
			
		||||
        </h5></div>
 | 
			
		||||
    <% } %>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
<!--*** toggle hide/unhide password field in login panel ***-->
 | 
			
		||||
<!--*** toggle hide/unhide password field in login panel ***
 | 
			
		||||
 | 
			
		||||
% content_for 'js_togglePassword' => begin
 | 
			
		||||
  %= javascript begin
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
 | 
			
		||||
  % end
 | 
			
		||||
% end
 | 
			
		||||
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<!--*** toggle hide/unhide menu contents navigation menu ***-->
 | 
			
		||||
 | 
			
		||||
@@ -98,4 +98,4 @@
 | 
			
		||||
 | 
			
		||||
	});
 | 
			
		||||
  % end
 | 
			
		||||
% end
 | 
			
		||||
% end
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
		SelectInput();
 | 
			
		||||
	};
 | 
			
		||||
	</script>
 | 
			
		||||
	% if ($config->{debug} == 1) {
 | 
			
		||||
	% if (config->{debug} == 1) {
 | 
			
		||||
		<pre>
 | 
			
		||||
			%= dumper $lets_data
 | 
			
		||||
		</pre>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
		SelectInput();
 | 
			
		||||
	};
 | 
			
		||||
	</script>
 | 
			
		||||
	% if ($config->{debug} == 1) {
 | 
			
		||||
	% if (config->{debug} == 1) {
 | 
			
		||||
		<pre>
 | 
			
		||||
			%= dumper $lets_data
 | 
			
		||||
		</pre>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
		SelectInput();
 | 
			
		||||
	};
 | 
			
		||||
	</script>
 | 
			
		||||
	% if ($config->{debug} == 1) {
 | 
			
		||||
	% if (config->{debug} == 1) {
 | 
			
		||||
		<pre>
 | 
			
		||||
			%= dumper $lets_data
 | 
			
		||||
		</pre>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
		SelectInput();
 | 
			
		||||
	};
 | 
			
		||||
	</script>
 | 
			
		||||
	% if ($config->{debug} == 1) {
 | 
			
		||||
	% if (config->{debug} == 1) {
 | 
			
		||||
		<pre>
 | 
			
		||||
			%= dumper $lets_data
 | 
			
		||||
		</pre>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
		SelectInput();
 | 
			
		||||
	};
 | 
			
		||||
	</script>
 | 
			
		||||
	% if ($config->{debug} == 1) {
 | 
			
		||||
	% if (config->{debug} == 1) {
 | 
			
		||||
		<pre>
 | 
			
		||||
			%= dumper $lets_data
 | 
			
		||||
		</pre>
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@
 | 
			
		||||
    % my $btn = l('ADD');
 | 
			
		||||
    % my $network_db = esmith::NetworksDB->open();
 | 
			
		||||
    
 | 
			
		||||
   % if ($config->{debug} == 1) {
 | 
			
		||||
   % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $c->stash("ret")
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    % my $subnet = $ln_datas->{subnet};
 | 
			
		||||
    % my $router = $ln_datas->{router};
 | 
			
		||||
    
 | 
			
		||||
   % if ($config->{debug} == 1) {
 | 
			
		||||
   % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $c->stash("ret")
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
	% unless (length($retref)) {%ret = (ret=>"");}
 | 
			
		||||
	% else {%ret = %$retref;}
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
		%= dumper "Ret:".$ret{ret};
 | 
			
		||||
	</p>	
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
	<br />
 | 
			
		||||
    % my $btn = l('ADD');
 | 
			
		||||
    
 | 
			
		||||
   % if ($config->{debug} == 1) {
 | 
			
		||||
   % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $c->stash("ret")
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    % my $cmmnt = $pf_datas->{cmmnt};
 | 
			
		||||
    % my $allow = $pf_datas->{allow};
 | 
			
		||||
    
 | 
			
		||||
   % if ($config->{debug} == 1) {
 | 
			
		||||
   % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $c->stash("ret")
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'PASSWORD_NEW', class => 'label'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'newPass', class => 'input'
 | 
			
		||||
	%= password_field 'newPass', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
 | 
			
		||||
@@ -26,7 +26,7 @@
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'PASSWORD_VERIFY_NEW', class => 'label'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'newPassVerify', class => 'input'
 | 
			
		||||
	%= password_field 'newPassVerify', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
 | 
			
		||||
@@ -41,4 +41,4 @@
 | 
			
		||||
	
 | 
			
		||||
    % end    
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'usr_CURRENT_SYSTEM_PASSWORD', class => 'label'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'CurPass', class => 'input'
 | 
			
		||||
	%= password_field 'CurPass', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'usr_NEW_SYSTEM_PASSWORD', class => 'label'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'Pass', class => 'input'
 | 
			
		||||
	%= password_field 'Pass', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
 | 
			
		||||
@@ -27,7 +27,7 @@
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'usr_NEW_SYSTEM_PASSWORD_VERIFY', class => 'label'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'PassVerify', class => 'input'
 | 
			
		||||
	%= password_field 'PassVerify', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
 | 
			
		||||
@@ -42,4 +42,4 @@
 | 
			
		||||
	
 | 
			
		||||
    % end
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module portforwarding-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
		%= dumper "<pf>".$c->current_route
 | 
			
		||||
		%= dumper $c->stash("ret")
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module printers-panel'>
 | 
			
		||||
 | 
			
		||||
    %if ($config->{debug} == 1) {
 | 
			
		||||
    %if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $prt_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module proxy-panel'>
 | 
			
		||||
    %if ($config->{debug} == 1) {
 | 
			
		||||
    %if (config->{debug} == 1) {
 | 
			
		||||
	<p>(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	(DBG)ht stat: <%= $prx_datas->{http_proxy_status}%> <br>
 | 
			
		||||
	(DBG)sm stat: <%=$prx_datas->{smtp_proxy_status} %>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module pseudonyms-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $pse_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module qmailanalog-panel'>
 | 
			
		||||
    %if ($config->{debug} == 1) {
 | 
			
		||||
    %if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module quota-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $quo_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module reboot-panel'>
 | 
			
		||||
 | 
			
		||||
    %if ($config->{debug} == 1) {
 | 
			
		||||
    %if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	</p>
 | 
			
		||||
@@ -20,16 +20,15 @@
 | 
			
		||||
 | 
			
		||||
	<p>
 | 
			
		||||
    %= $c->render_to_string(inline => $c->l('rbo_DESCRIPTION'))
 | 
			
		||||
    <br>
 | 
			
		||||
    <br><br>
 | 
			
		||||
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'rbo_LABEL_REBOOT'
 | 
			
		||||
	</span>
 | 
			
		||||
 | 
			
		||||
	<span class=data>
 | 
			
		||||
	%= select_field 'function' => $c->rebootFunction_list()
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
	</p><br>
 | 
			
		||||
 | 
			
		||||
	%= submit_button "$btn", class => 'action'
 | 
			
		||||
 | 
			
		||||
@@ -38,4 +37,4 @@
 | 
			
		||||
    %= hidden_field 'debug' => '1'
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
%end
 | 
			
		||||
%end
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module remoteaccess-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $rma_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<div id='roundcube' class='roundcube roundcube-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
		<p>
 | 
			
		||||
			%= dumper $c->current_route
 | 
			
		||||
		</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module useraccounts-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $usr_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module userpassword-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $pwd_datas
 | 
			
		||||
@@ -47,7 +47,7 @@
 | 
			
		||||
	<p><span class=label>
 | 
			
		||||
	%= l 'pwd_PASSWORD_OLD'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'Oldpass', class => 'input' 
 | 
			
		||||
	%= password_field 'Oldpass', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	<br><br></p>
 | 
			
		||||
    % }
 | 
			
		||||
@@ -55,14 +55,14 @@
 | 
			
		||||
	<p><span class=label>
 | 
			
		||||
	%=l 'pwd_PASSWORD_NEW'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'Pass', class => 'input'
 | 
			
		||||
	%= password_field 'Pass', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	<br><br></p>
 | 
			
		||||
 | 
			
		||||
	<p><span class=label>
 | 
			
		||||
	%=l 'pwd_PASSWORD_VERIFY_NEW'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= password_field 'Passverify', class => 'input'
 | 
			
		||||
	%= password_field 'Passverify', class => 'input', class=>'sme-password'
 | 
			
		||||
	</span>
 | 
			
		||||
	<br><br></p>
 | 
			
		||||
 | 
			
		||||
@@ -75,4 +75,4 @@
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
% end
 | 
			
		||||
% end
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module viewlogfiles-panel'>
 | 
			
		||||
    %if ($config->{debug} == 1) {
 | 
			
		||||
    %if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module viewlogfiles2-panel'>
 | 
			
		||||
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	(DBG)trt: <%= $log_datas->{trt} %><br>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
<div id='module' class='module workgroup-panel'>
 | 
			
		||||
 | 
			
		||||
    %if ($config->{debug} == 1) {
 | 
			
		||||
    %if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	(DBG)route: <%= $c->current_route %><br>
 | 
			
		||||
	(DBG)pdc: <%= $wkg_datas->{ServerRole}%><br>
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
	<span class=label>
 | 
			
		||||
	%=l 'wkg_LABEL_WORKGROUP', class => 'label'
 | 
			
		||||
	</span><span class=data>
 | 
			
		||||
	%= text_field 'Workgroup' =>  $wkg_datas->{Workgroup}, class => 'input'
 | 
			
		||||
	%= text_field 'Workgroup' =>  $wkg_datas->{Workgroup}, class => 'input' , pattern=>".{1,15}", title=>"Limited to 15 characters by the NETBIOS"
 | 
			
		||||
	</span>
 | 
			
		||||
	</p>
 | 
			
		||||
	<p>
 | 
			
		||||
@@ -63,4 +63,4 @@
 | 
			
		||||
    % end    
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
%end
 | 
			
		||||
%end
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module yum-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $yum_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module yumconfig-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $yum_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module yuminstall-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $yum_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module yumlogfile-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $yum_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module yumpostupg-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $yum_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module yumremove-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $yum_datas
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
% content_for 'module' => begin
 | 
			
		||||
 | 
			
		||||
<div id='module' class='module yumupdate-panel'>
 | 
			
		||||
    % if ($config->{debug} == 1) {
 | 
			
		||||
    % if (config->{debug} == 1) {
 | 
			
		||||
	<p>
 | 
			
		||||
	%= dumper $c->current_route
 | 
			
		||||
	%= dumper $yum_datas
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user