Compare commits
33 Commits
11_0_0-39_
...
11_0_0-59_
Author | SHA1 | Date | |
---|---|---|---|
5fe285f9f2 | |||
1c93be6e8a | |||
ce96f72726 | |||
0fd7137edd | |||
d179b06f69 | |||
c2427189d5 | |||
887af04bfe | |||
34b85b1cde | |||
a5758b4431 | |||
58aa423089 | |||
c0b4d1f90e | |||
a979d472e8 | |||
d776f20736 | |||
a4668da720 | |||
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;
|
||||
@@ -273,6 +275,18 @@ a.menu-title {
|
||||
left: 2px;
|
||||
}
|
||||
|
||||
.roundcube div {
|
||||
height:462px;
|
||||
width:85%;
|
||||
margin-bottom:1%;
|
||||
}
|
||||
|
||||
.roundcube object {
|
||||
margin-top:1%;
|
||||
height:95%;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
|
||||
/*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
|
||||
|
@@ -17,6 +17,7 @@ use Mojo::Home;
|
||||
|
||||
use DBM::Deep;
|
||||
use Mojo::JWT;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
use Mojolicious::Plugin::Config;
|
||||
#use Mojolicious::Plugin::I18N;
|
||||
@@ -27,8 +28,10 @@ use SrvMngr::Model::Main;
|
||||
|
||||
use SrvMngr::Plugin::WithoutCache;
|
||||
|
||||
use esmith::I18N;
|
||||
|
||||
#this is overwrittrn with the "release" by the spec file - release can be "99.el8.sme"
|
||||
our $VERSION = '';
|
||||
our $VERSION = '51.el8.sme';
|
||||
#Extract the release value
|
||||
if ($VERSION =~ /^(\d+)/) {
|
||||
$VERSION = $1; # $1 contains the matched numeric digits
|
||||
@@ -40,9 +43,10 @@ $VERSION = eval $VERSION;
|
||||
use Exporter 'import';
|
||||
our @EXPORT_OK = qw(
|
||||
init_session get_mod_url theme_list
|
||||
getNavigation ip_number is_normal_password email_simple
|
||||
getNavigation ip_number validate_password is_normal_password email_simple
|
||||
mac_address_or_blank mac_address ip_number_or_blank
|
||||
lang_space get_routes_list subnet_mask get_reg_mask
|
||||
gen_locale_date_string get_public_ip_address
|
||||
);
|
||||
|
||||
has home => sub {
|
||||
@@ -208,6 +212,22 @@ sub setup_helpers {
|
||||
Mojo::JWT->new(secret => shift->app->secrets->[0] || die)
|
||||
});
|
||||
|
||||
$self->helper( selected_field => sub {
|
||||
my $self = shift;
|
||||
my @options = shift;
|
||||
my $selected = shift;
|
||||
my $count = 0;
|
||||
# search for occurence of value $selected in arrays; if found add selected => 'selected'
|
||||
for (my $i = 0; $i <= $#{$options[0]} ; $i++){
|
||||
if (grep /^$selected$/, @{$options[0][$i]}) {
|
||||
push( @{$options[0][$i]} ,'selected', 'selected' );
|
||||
$count++;last;
|
||||
}
|
||||
}
|
||||
push ( @{$options[0]} ,[ ucfirst( $selected), $selected, 'selected', 'selected'] ) if ($count <1);
|
||||
return @options;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -224,12 +244,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'});
|
||||
|
||||
@@ -768,7 +788,23 @@ sub ip_number {
|
||||
return 'OK';
|
||||
}
|
||||
|
||||
sub validate_password {
|
||||
my ($c, $strength, $pass) = @_;
|
||||
use esmith::util;
|
||||
use POSIX qw(locale_h);
|
||||
use locale;
|
||||
my $old_locale = setlocale(LC_ALL);
|
||||
setlocale(LC_ALL, "en_US");
|
||||
my $reason = esmith::util::validatePassword($pass,$strength);
|
||||
return "OK" if ($reason eq "ok");
|
||||
setlocale(LC_ALL, $old_locale);
|
||||
return
|
||||
$c->l("Bad Password Choice") . ": "
|
||||
. $c->l("The password you have chosen is not a good choice, because") . " "
|
||||
. $c->l($reason). ".";
|
||||
} ## end sub validate_password
|
||||
|
||||
# to deprecate : this is not anymore a way to validate our passwords
|
||||
sub is_normal_password {
|
||||
|
||||
# from CGI::FormMagick::Validator qw( password );
|
||||
@@ -784,6 +820,29 @@ sub is_normal_password {
|
||||
}
|
||||
}
|
||||
|
||||
sub gen_locale_date_string
|
||||
{
|
||||
my $self = shift;
|
||||
my $i18n = esmith::I18N->new();
|
||||
$i18n->setLocale('formmagick', $i18n->preferredLanguage());
|
||||
return strftime "%c", localtime;
|
||||
}
|
||||
|
||||
sub get_public_ip_address
|
||||
{
|
||||
my $self = shift;
|
||||
my $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
my $sysconfig = $cdb->get('sysconfig');
|
||||
if ($sysconfig)
|
||||
{
|
||||
my $publicIP = $sysconfig->prop('PublicIP');
|
||||
if ($publicIP)
|
||||
{
|
||||
return $publicIP;
|
||||
}
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub email_simple {
|
||||
my ($c, $data) = @_;
|
||||
|
@@ -32,10 +32,10 @@ use esmith::util;
|
||||
use esmith::lockfile;
|
||||
use esmith::BlockDevices;
|
||||
use constant DEBUG => $ENV{MOJO_SMANAGER_DEBUG} || 0;
|
||||
our $cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
||||
our $rdb = esmith::ConfigDB->open('/etc/e-smith/restore')
|
||||
|| die "Couldn't open restore db";
|
||||
#our $cdb = esmith::ConfigDB->open || die "Couldn't open config db"; #remove as cached gives problems
|
||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
||||
#our $rdb = esmith::ConfigDB->open('/etc/e-smith/restore') || die "Couldn't open restore db";
|
||||
my ($cdb,$adb,$rdb);
|
||||
my $es_backup = new esmith::Backup or die "Couldn't create Backup object\n";
|
||||
my @directories = $es_backup->restore_list;
|
||||
@directories = grep { -e "/$_" } @directories;
|
||||
@@ -52,6 +52,9 @@ sub main {
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
my %bac_datas = ();
|
||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
||||
$rdb = esmith::ConfigDB->open('/etc/e-smith/restore');
|
||||
my $title = $c->l('bac_BACKUP_TITLE');
|
||||
my $notif;
|
||||
$bac_datas{'function'} = 'desktop_backup';
|
||||
@@ -108,6 +111,9 @@ sub do_display {
|
||||
my $rt = $c->current_route;
|
||||
my ($res, $result) = '';
|
||||
my $function = $c->param('Function');
|
||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
||||
$rdb = esmith::ConfigDB->open('/etc/e-smith/restore');
|
||||
|
||||
if ($function =~ /^(\S+)$/) {
|
||||
$function = $1;
|
||||
@@ -129,7 +135,11 @@ sub do_display {
|
||||
$c->stash(compressionlevel => $CompressionLevel, exclude => \@exclude, directories => \@directories);
|
||||
|
||||
# streaming download in template
|
||||
return $c->render("/backdown");
|
||||
$c->render(template=>"backdown");
|
||||
#sleep(30);
|
||||
# Redirect to the front page
|
||||
#$c->redirect_to('/backup');
|
||||
return ""
|
||||
} ## end if ($function eq 'desktop_backup')
|
||||
|
||||
if ($function eq 'tape_configure') {
|
||||
@@ -265,6 +275,9 @@ sub do_update {
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
my $rt = $c->current_route;
|
||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
||||
$rdb = esmith::ConfigDB->open('/etc/e-smith/restore');
|
||||
my $function = $c->param('Function');
|
||||
DEBUG && warn("do_update $function");
|
||||
my %bac_datas = ();
|
||||
@@ -1847,7 +1860,7 @@ sub showSize {
|
||||
} ## end sub showSize
|
||||
|
||||
sub desktopBackupRecordStatus {
|
||||
my ($backup, $phase, $status) = @_;
|
||||
my ($c,$backup, $phase, $status) = @_;
|
||||
my $now = time();
|
||||
warn("Backup terminated: $phase failed - status: $status\n");
|
||||
$backup->set_prop('EndEpochTime', "$now");
|
||||
@@ -2011,4 +2024,4 @@ sub vmount {
|
||||
return (qx(/bin/mount -t nfs -o nolock,timeo=30,retrans=1,retry=0 "$host:/$share" $mountdir 2>&1));
|
||||
}
|
||||
} ## end sub vmount
|
||||
1;
|
||||
1;
|
@@ -14,7 +14,7 @@ use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
use Text::Template;
|
||||
use File::Basename;
|
||||
use esmith::FormMagick qw( gen_locale_date_string );
|
||||
use SrvMngr qw( gen_locale_date_string );
|
||||
our $cdb = esmith::ConfigDB->open or die "Couldn't open ConfigDB\n";
|
||||
|
||||
# Get some basic info on the current SME install
|
||||
|
@@ -12,8 +12,8 @@ use Mojo::Base 'Mojolicious::Controller';
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
use esmith::FormMagick;
|
||||
use esmith::util;
|
||||
use SrvMngr qw( gen_locale_date_string );
|
||||
our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
|
||||
sub main {
|
||||
@@ -41,7 +41,7 @@ sub main {
|
||||
|
||||
# get rid of trailing carriage return on last field
|
||||
chop($dat_datas{ampm});
|
||||
$dat_datas{'now_string'} = esmith::FormMagick->gen_locale_date_string();
|
||||
$dat_datas{'now_string'} = gen_locale_date_string;
|
||||
$c->stash(title => $title, modul => $modul, dat_datas => \%dat_datas);
|
||||
$c->render('datetime');
|
||||
} ## end sub main
|
||||
|
@@ -14,8 +14,6 @@ use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
|
||||
#use esmith::util qw(ldapBase);
|
||||
use esmith::FormMagick::Panel::directory;
|
||||
our $db = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
|
||||
sub main {
|
||||
@@ -75,4 +73,21 @@ sub do_update {
|
||||
$c->stash(title => $title, modul => $result);
|
||||
$c->render(template => 'module');
|
||||
} ## end sub do_update
|
||||
|
||||
sub get_ldap_base {
|
||||
return esmith::util::ldapBase(get_value('','DomainName'));
|
||||
}
|
||||
|
||||
sub get_value {
|
||||
my $fm = shift;
|
||||
my $item = shift;
|
||||
|
||||
my $record = $db->get($item);
|
||||
if ($record) {
|
||||
return $record->value();
|
||||
}
|
||||
else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
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');
|
||||
|
@@ -13,21 +13,23 @@ use warnings;
|
||||
use Mojo::Base 'Mojolicious::Controller';
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw( theme_list init_session is_normal_password );
|
||||
use SrvMngr qw( theme_list init_session validate_password );
|
||||
use esmith::AccountsDB;
|
||||
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 +44,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 +120,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') || '');
|
||||
@@ -379,31 +385,6 @@ sub check_password {
|
||||
return validate_password($c, $strength, $password);
|
||||
} ## end sub check_password
|
||||
|
||||
sub validate_password {
|
||||
my ($c, $strength, $pass) = @_;
|
||||
use Crypt::Cracklib;
|
||||
my $reason;
|
||||
|
||||
if ($strength eq "none") {
|
||||
return $c->l("Passwords must be at least 7 characters long") unless (length($pass) > 6);
|
||||
return "OK";
|
||||
}
|
||||
$reason = is_normal_password($c, $pass, undef);
|
||||
return $reason unless ($reason eq "OK");
|
||||
return "OK" unless ($strength eq "strong");
|
||||
|
||||
if (-f '/usr/lib64/cracklib_dict.pwd') {
|
||||
$reason = fascist_check($pass, '/usr/lib64/cracklib_dict');
|
||||
} else {
|
||||
$reason = fascist_check($pass, '/usr/lib/cracklib_dict');
|
||||
}
|
||||
$reason ||= "Software error: password check failed";
|
||||
return "OK" if ($reason eq "ok");
|
||||
return
|
||||
$c->l("Bad Password Choice") . ": "
|
||||
. $c->l("The password you have chosen is not a good choice, because") . " "
|
||||
. $c->($reason) . ".";
|
||||
} ## end sub validate_password
|
||||
|
||||
=head2 group_list()
|
||||
|
||||
|
@@ -1,566 +0,0 @@
|
||||
#
|
||||
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-16 10:30:16
|
||||
#
|
||||
#
|
||||
# Routines to be edited by the developer to provide content and validation for parameters
|
||||
# and provison of the control data for table(s)
|
||||
#
|
||||
use esmith::util;
|
||||
use esmith::util::network;
|
||||
use esmith::ConfigDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::AccountsDB;
|
||||
use esmith::NetworksDB;
|
||||
use esmith::DomainsDB;
|
||||
use constant FALSE => 0;
|
||||
use constant TRUE => 1;
|
||||
|
||||
#The most common ones
|
||||
our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
|
||||
# Validation routines - parameters for each panel
|
||||
sub validate_LIST {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if (!TRUE) #validate $c->param('InternalIP')
|
||||
{
|
||||
$ret .= 'Validation for InternalIP failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('ExternalIP')
|
||||
{
|
||||
$ret .= 'Validation for ExternalIP failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('InternetIP')
|
||||
{
|
||||
$ret .= 'Validation for InternetIP failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('Issuer')
|
||||
{
|
||||
$ret .= 'Validation for Issuer failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('Expiry')
|
||||
{
|
||||
$ret .= 'Validation for Expiry failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('NotBefore')
|
||||
{
|
||||
$ret .= 'Validation for NotBefore failed';
|
||||
}
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub validate_LIST
|
||||
|
||||
sub validate_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if (!TRUE) #validate $c->param('status')
|
||||
{
|
||||
$ret .= 'Validation for status failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('hookScript')
|
||||
{
|
||||
$ret .= 'Validation for hookScript failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('hostOverride')
|
||||
{
|
||||
$ret .= 'Validation for hostOverride failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('ACCEPT_TERMS')
|
||||
{
|
||||
$ret .= 'Validation for ACCEPT_TERMS failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('API')
|
||||
{
|
||||
$ret .= 'Validation for API failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('keysize')
|
||||
{
|
||||
$ret .= 'Validation for keysize failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('configure')
|
||||
{
|
||||
$ret .= 'Validation for configure failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('Email')
|
||||
{
|
||||
$ret .= 'Validation for Email failed';
|
||||
}
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub validate_PARAMS
|
||||
|
||||
sub validate_CHECKALLDOMAINS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if (!TRUE) #validate $c->param('AllDomainsCheck')
|
||||
{
|
||||
$ret .= 'Validation for AllDomainsCheck failed';
|
||||
}
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub validate_CHECKALLDOMAINS
|
||||
|
||||
sub validate_CHECKALLENABLEDDOMAINS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if (!TRUE) #validate $c->param('EnabledDomainsCheck')
|
||||
{
|
||||
$ret .= 'Validation for EnabledDomainsCheck failed';
|
||||
}
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub validate_CHECKALLENABLEDDOMAINS
|
||||
|
||||
sub validate_CHECKONEDOMAIN {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
# Validation for each field
|
||||
my $ret = "";
|
||||
|
||||
if (!TRUE) #validate $c->param('OneDomainToCheck')
|
||||
{
|
||||
$ret .= 'Validation for OneDomainToCheck failed';
|
||||
}
|
||||
|
||||
if (!TRUE) #validate $c->param('OneDomainsCheck')
|
||||
{
|
||||
$ret .= 'Validation for OneDomainsCheck failed';
|
||||
}
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub validate_CHECKONEDOMAIN
|
||||
|
||||
# Get singleton data for each panel
|
||||
sub get_data_for_panel_LIST {
|
||||
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
|
||||
# my ($reply, $err, $server_cert) = Net::SSLeay::sslcat('localhost', 443, '/');
|
||||
# my $issuer = Net::SSLeay::X509_NAME_oneline(Net::SSLeay::X509_get_issuer_name($server_cert));
|
||||
# my $before = Net::SSLeay::P_ASN1_TIME_get_isotime(Net::SSLeay::X509_get_notBefore($server_cert));
|
||||
# my $expiry = Net::SSLeay::P_ASN1_TIME_get_isotime(Net::SSLeay::X509_get_notAfter($server_cert));
|
||||
my %ret = (
|
||||
'Data1' => 'Data for LIST', #Example
|
||||
# fields from Inputs in LIST $fields['LIST']
|
||||
'InternalIP' => $cdb->get_prop('InternalInterface', 'IPAddress'),
|
||||
'ExternalIP' => $cdb->get_prop('ExternalInterface', 'IPAddress'),
|
||||
'InternetIP' => $c->get_my_ip(),
|
||||
'Issuer' => '$issuer',
|
||||
'Expiry' => '$expiry',
|
||||
'NotBefore' => '$before',
|
||||
);
|
||||
return %ret;
|
||||
} ## end sub get_data_for_panel_LIST
|
||||
|
||||
sub get_data_for_panel_PARAMS {
|
||||
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
my %ret = (
|
||||
'Data1' => 'Data for PARAMS', #Example
|
||||
# fields from Inputs in PARAMS $fields['PARAMS']
|
||||
'status' => $cdb->get_prop('letsencrypt', 'status', 'disabled'),
|
||||
'hookScript' => $cdb->get_prop('letsencrypt', 'hookScript', 'disabled'),
|
||||
'hostOverride' => $cdb->get_prop('letsencrypt', 'hostOverride', 'disabled'),
|
||||
'ACCEPT_TERMS' => $cdb->get_prop('letsencrypt', 'ACCEPT_TERMS', ''),
|
||||
'API' => $cdb->get_prop('letsencrypt', 'API', '2'),
|
||||
'keysize' => $cdb->get_prop('letsencrypt', 'keysize', '4096'),
|
||||
'configure' => $cdb->get_prop('letsencrypt', 'configure', 'none'),
|
||||
'email' => $cdb->get_prop('letsencrypt', 'email')
|
||||
);
|
||||
return %ret;
|
||||
} ## end sub get_data_for_panel_PARAMS
|
||||
|
||||
sub get_data_for_panel_CHECKALLDOMAINS {
|
||||
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
my %ret = (
|
||||
'Data1' => 'Data for CHECKALLDOMAINS', #Example
|
||||
# fields from Inputs in CHECKALLDOMAINS $fields['CHECKALLDOMAINS']
|
||||
'AllDomainsCheck' => $c->update_all_domains(),
|
||||
);
|
||||
return %ret;
|
||||
} ## end sub get_data_for_panel_CHECKALLDOMAINS
|
||||
|
||||
sub get_data_for_panel_CHECKALLENABLEDDOMAINS {
|
||||
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
my %ret = (
|
||||
'Data1' => 'Data for CHECKALLENABLEDDOMAINS', #Example
|
||||
# fields from Inputs in CHECKALLENABLEDDOMAINS $fields['CHECKALLENABLEDDOMAINS']
|
||||
'EnabledDomainsCheck' => $c->update_enabled_domains(),
|
||||
);
|
||||
return %ret;
|
||||
} ## end sub get_data_for_panel_CHECKALLENABLEDDOMAINS
|
||||
|
||||
sub get_data_for_panel_CHECKONEDOMAIN {
|
||||
|
||||
# Return a hash with the fields required which will be loaded into the shared data
|
||||
my $c = shift;
|
||||
my %ret = (
|
||||
'Data1' => 'Data for CHECKONEDOMAIN', #Example
|
||||
# fields from Inputs in CHECKONEDOMAIN $fields['CHECKONEDOMAIN']
|
||||
'OneDomainToCheck' => $c->param("CHECKONEDOMAIN"),
|
||||
'OneDomainsCheck' => $c->update_one_domain($c->param("CHECKONEDOMAIN"))
|
||||
);
|
||||
return %ret;
|
||||
} ## end sub get_data_for_panel_CHECKONEDOMAIN
|
||||
|
||||
# Get control data for table(s)
|
||||
# Define a constant hash for field name mapping
|
||||
use constant DomainList_FIELD_MAPPING => (
|
||||
'Table1-Domain name / HOSTNAME' => 'Domain',
|
||||
'Table1-Brief description' => 'Description',
|
||||
'Table1-Content' => 'Content',
|
||||
'Table1-LABEL_NAMESERVERS' => 'Nameservers',
|
||||
'Table1-LABEL_POINT' => 'Source-for-Table1-LABEL_POINT',
|
||||
'Table1-LABEL_LECERT' => 'letsencryptSSLcert',
|
||||
'Table1-IS_IN_CERT' => 'isincert',
|
||||
'Table1-CHECK' => 'Check'
|
||||
|
||||
#'target_field2' => 'source_field2',
|
||||
# Add more mappings as needed
|
||||
);
|
||||
use constant TEST_DOMAIN_LIST => (
|
||||
{ "domain" => "Domain1", "fred" => "fred1", "description" => "Description1" },
|
||||
{ "domain" => "Domain2", "fred" => "fred2", "description" => "Description2" },
|
||||
{ "domain" => "Domain3", "fred" => "fred3", "description" => "Description3" },
|
||||
|
||||
# Add more test entries as needed
|
||||
);
|
||||
|
||||
sub actual_DomainList {
|
||||
my $c = shift;
|
||||
|
||||
# Actual code for extracting DomainList
|
||||
my @list = ();
|
||||
|
||||
# my @rv = Net::SSLeay::X509_get_subjectAltNames($server_cert);
|
||||
# foreach my $element (@rv) {
|
||||
# next if $element =~ /^\d+$/; ;
|
||||
# #print $element . "\n";
|
||||
# push @list, $element;
|
||||
# }
|
||||
my @data = ();
|
||||
my $check = $c->l('Check Domain');
|
||||
|
||||
for ($ddb->domains) {
|
||||
my $ns = $_->prop('Nameservers') || 'internet';
|
||||
my $le = $_->prop('letsencryptSSLcert') || 'disabled'; #letsencrypt configure all
|
||||
my $dname = $_->key;
|
||||
my $isincert = "N";
|
||||
my $link = $c->create_link("letsencryptd", "CHECKONEDOMAIN", "");
|
||||
my $checklink = "<a href='" . $link . "&CHECKONEDOMAIN=" . $_->key . "'>" . $check . "</a>";
|
||||
|
||||
#my $checklink = "<a href=''>check</a>";
|
||||
$isincert = "Y" if ($dname ~~ @list);
|
||||
|
||||
# domain
|
||||
push @data,
|
||||
{
|
||||
Domain => $_->key,
|
||||
$_->props,
|
||||
letsencryptSSLcert => $le,
|
||||
isincert => $isincert,
|
||||
Check => $checklink,
|
||||
Nameservers => $ns,
|
||||
};
|
||||
|
||||
#and hosts
|
||||
for my $h ($hdb->get_hosts_by_domain($dname)) {
|
||||
next if $ddb->get($h->key);
|
||||
next unless ($h->prop('HostType') eq "Self" || $h->prop('HostType') eq "Local");
|
||||
$le = $h->prop('letsencryptSSLcert') || 'disabled'; #letsencrypt configure all
|
||||
$isincert = "N";
|
||||
$isincert = "Y" if ($h->key ~~ @list);
|
||||
push @data, {
|
||||
Domain => "--> " . $h->key,
|
||||
$h->props,
|
||||
Description => $h->prop('ExternalIP') || $h->prop('InternalIP') || "",
|
||||
Content => $h->prop('HostType'),
|
||||
isincert => $isincert,
|
||||
Check => "", #$checklink
|
||||
Nameservers => $c->l($ns),
|
||||
};
|
||||
} ## end for my $h ($hdb->get_hosts_by_domain...)
|
||||
} ## end for ($ddb->domains)
|
||||
return @data;
|
||||
} ## end sub actual_DomainList
|
||||
|
||||
sub get_DomainList {
|
||||
|
||||
# Return an array of hashes of the contents for each row and column for DomainList
|
||||
my $c = shift;
|
||||
my @source_records
|
||||
= $c->actual_DomainList(); #TEST_DOMAIN_LIST #Replace by code or call to produce contents of table;
|
||||
my @transformed_records;
|
||||
my %Field_Mapping = DomainList_FIELD_MAPPING;
|
||||
|
||||
# Iterate over each record in the source array
|
||||
for my $source_record (@source_records) {
|
||||
my %transformed_record;
|
||||
|
||||
# Iterate over each key-value pair in the $Field_Mapping constant
|
||||
while (my ($target, $source) = each %Field_Mapping) {
|
||||
|
||||
# Check if the source field exists in the source record
|
||||
if (exists $source_record->{$source}) {
|
||||
|
||||
# Assign the source field value to the target field in the transformed record
|
||||
$transformed_record{$target} = $source_record->{$source};
|
||||
}
|
||||
} ## end while (my ($target, $source...))
|
||||
|
||||
# Add transformed record to the array if it's not empty
|
||||
push @transformed_records, \%transformed_record if %transformed_record;
|
||||
} ## end for my $source_record (...)
|
||||
return \@transformed_records;
|
||||
} ## end sub get_DomainList
|
||||
|
||||
# Return hash with values from row in which link clicked on table
|
||||
sub get_selected_LIST {
|
||||
my $c = shift;
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
} ## end sub get_selected_LIST
|
||||
|
||||
sub get_selected_PARAMS {
|
||||
my $c = shift;
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
} ## end sub get_selected_PARAMS
|
||||
|
||||
sub get_selected_CHECKALLDOMAINS {
|
||||
my $c = shift;
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
} ## end sub get_selected_CHECKALLDOMAINS
|
||||
|
||||
sub get_selected_CHECKALLENABLEDDOMAINS {
|
||||
my $c = shift;
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
} ## end sub get_selected_CHECKALLENABLEDDOMAINS
|
||||
|
||||
sub get_selected_CHECKONEDOMAIN {
|
||||
my $c = shift;
|
||||
my $selected = shift; #Parameter is name of selected row.
|
||||
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||
my %ret = {};
|
||||
return $ret;
|
||||
} ## end sub get_selected_CHECKONEDOMAIN
|
||||
|
||||
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
|
||||
sub perform_LIST {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = "";
|
||||
my $db = $cdb; #maybe one of the others
|
||||
my $dbkey = 'ChangeThis';
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: InternalIP e.g. $db->set_prop($dbkey,'InternalIP',$c->param('InternalIP'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for InternalIP';
|
||||
} ## end if (!TRUE)
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: ExternalIP e.g. $db->set_prop($dbkey,'ExternalIP',$c->param('ExternalIP'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for ExternalIP';
|
||||
} ## end if (!TRUE)
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: InternetIP e.g. $db->set_prop($dbkey,'InternetIP',$c->param('InternetIP'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for InternetIP';
|
||||
} ## end if (!TRUE)
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: Issuer e.g. $db->set_prop($dbkey,'Issuer',$c->param('Issuer'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for Issuer';
|
||||
} ## end if (!TRUE)
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: Expiry e.g. $db->set_prop($dbkey,'Expiry',$c->param('Expiry'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for Expiry';
|
||||
} ## end if (!TRUE)
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: NotBefore e.g. $db->set_prop($dbkey,'NotBefore',$c->param('NotBefore'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for NotBefore';
|
||||
} ## end if (!TRUE)
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub perform_LIST
|
||||
|
||||
sub perform_PARAMS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = "";
|
||||
my $db = $cdb; #maybe one of the others
|
||||
my $dbkey = 'letsencrypt';
|
||||
|
||||
# To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g."
|
||||
if (!$db->set_prop($dbkey, 'status', $c->param('status'), type => 'service')) {
|
||||
$ret .= 'Perform/save failed for status';
|
||||
}
|
||||
|
||||
if (!$db->set_prop($dbkey, 'hookScript', $c->param('hookScript'), type => 'service')) {
|
||||
$ret .= 'Perform/save failed for hookScript';
|
||||
}
|
||||
|
||||
if (!$db->set_prop($dbkey, 'hostOverride', $c->param('hostOverride'), type => 'service')) {
|
||||
$ret .= 'Perform/save failed for hostOverride';
|
||||
}
|
||||
|
||||
if (!$db->set_prop($dbkey, 'ACCEPT_TERMS', $c->param('ACCEPT_TERMS'), type => 'service')) {
|
||||
$ret .= 'Perform/save failed for ACCEPT_TERMS';
|
||||
}
|
||||
if (!$db->set_prop($dbkey, 'API', $c->param('API'), type => 'service')) { $ret .= 'Perform/save failed for API'; }
|
||||
|
||||
if (!$db->set_prop($dbkey, 'keysize', $c->param('keysize'), type => 'service')) {
|
||||
$ret .= 'Perform/save failed for keysize';
|
||||
}
|
||||
|
||||
if (!$db->set_prop($dbkey, 'configure', $c->param('configure'), type => 'service')) {
|
||||
$ret .= 'Perform/save failed for configure';
|
||||
}
|
||||
|
||||
if (!$db->set_prop($dbkey, 'email', $c->param('email'), type => 'service')) {
|
||||
$ret .= 'Perform/save failed for email';
|
||||
}
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub perform_PARAMS
|
||||
|
||||
sub perform_CHECKALLDOMAINS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = "";
|
||||
my $db = $cdb; #maybe one of the others
|
||||
my $dbkey = 'ChangeThis';
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: AllDomainsCheck e.g. $db->set_prop($dbkey,'AllDomainsCheck',$c->param('AllDomainsCheck'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for AllDomainsCheck';
|
||||
} ## end if (!TRUE)
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub perform_CHECKALLDOMAINS
|
||||
|
||||
sub perform_CHECKALLENABLEDDOMAINS {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = "";
|
||||
my $db = $cdb; #maybe one of the others
|
||||
my $dbkey = 'ChangeThis';
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: EnabledDomainsCheck e.g. $db->set_prop($dbkey,'EnabledDomainsCheck',$c->param('EnabledDomainsCheck'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for EnabledDomainsCheck';
|
||||
} ## end if (!TRUE)
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub perform_CHECKALLENABLEDDOMAINS
|
||||
|
||||
sub perform_CHECKONEDOMAIN {
|
||||
my $c = shift;
|
||||
my $prefix_data = shift; #Data hash as parameter
|
||||
my $ret = "";
|
||||
my $db = $cdb; #maybe one of the others
|
||||
my $dbkey = 'ChangeThis';
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: OneDomainToCheck e.g. $db->set_prop($dbkey,'OneDomainToCheck',$c->param('OneDomainToCheck'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for OneDomainToCheck';
|
||||
} ## end if (!TRUE)
|
||||
|
||||
if (!TRUE
|
||||
) #copy or perform with value: OneDomainsCheck e.g. $db->set_prop($dbkey,'OneDomainsCheck',$c->param('OneDomainsCheck'),type=>'service'))
|
||||
{
|
||||
$ret .= 'Perform/save failed for OneDomainsCheck';
|
||||
} ## end if (!TRUE)
|
||||
if ($ret eq "") { $ret = 'ok'; }
|
||||
return $ret;
|
||||
} ## end sub perform_CHECKONEDOMAIN
|
||||
|
||||
sub create_link {
|
||||
|
||||
# WIP
|
||||
my ($c, $route, $panel, $index) = @_;
|
||||
my $link = "$route?trt=$panel&Selected=$index";
|
||||
return $link;
|
||||
} ## end sub create_link
|
||||
|
||||
sub get_my_ip {
|
||||
my ($self, $item, $prop, $default) = @_;
|
||||
my $output = `/usr/sbin/e-smith/getmyip`;
|
||||
return $output || "IP";
|
||||
} ## end sub get_my_ip
|
||||
|
||||
sub update_one_domain {
|
||||
my ($self, $domain) = @_;
|
||||
return "$domain not domain" unless ($ddb->get($domain) || $hdb->get($domain));
|
||||
($domain) = ($domain =~ /([\w\p{L}.]+)/);
|
||||
my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains " " $domain `;
|
||||
return $output || "-empty-";
|
||||
} ## end sub update_one_domain
|
||||
|
||||
sub update_all_domains {
|
||||
my $self = shift;
|
||||
my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" all `;
|
||||
return $output || "-empty-";
|
||||
} ## end sub update_all_domains
|
||||
|
||||
sub update_enabled_domains {
|
||||
my $self = shift;
|
||||
my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" enabled `;
|
||||
return $output || "-empty-";
|
||||
} ## end sub update_enabled_domains
|
||||
1;
|
@@ -1,448 +0,0 @@
|
||||
package SrvMngr::Controller::Letsencrypt;
|
||||
#
|
||||
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
#
|
||||
#----------------------------------------------------------------------
|
||||
# heading : Network
|
||||
# description : Letsencrypt certificate
|
||||
# navigation : 6000 6600
|
||||
#
|
||||
# name : letsencrypt, method : get, url : /letsencrypt, ctlact : Letsencrypt#main
|
||||
# name : letsencryptu, method : post, url : /letsencryptu, ctlact : Letsencrypt#do_update
|
||||
# name : letsencryptd, method : get, url : /letsencryptd, ctlact : Letsencrypt#do_display
|
||||
#
|
||||
# routes : end
|
||||
#
|
||||
# Documentation: https://wiki.contribs.org/Letsencrypt
|
||||
#----------------------------------------------------------------------
|
||||
#
|
||||
# Scheme of things:
|
||||
#
|
||||
# TBA!!
|
||||
use strict;
|
||||
use warnings;
|
||||
use Mojo::Base 'Mojolicious::Controller';
|
||||
use constant FALSE => 0;
|
||||
use constant TRUE => 1;
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
use Data::Dumper;
|
||||
use esmith::util;
|
||||
use esmith::util::network;
|
||||
use esmith::ConfigDB;
|
||||
use esmith::AccountsDB;
|
||||
use esmith::NetworksDB;
|
||||
use esmith::HostsDB;
|
||||
use esmith::DomainsDB;
|
||||
require
|
||||
'/usr/share/smanager/lib/SrvMngr/Controller/Letsencrypt-Custom.pm'; #The code that is to be added by the developer
|
||||
|
||||
sub main {
|
||||
#
|
||||
# Initial entry - route is "/<whatever>"
|
||||
#
|
||||
#set initial panel
|
||||
#for initial panel:
|
||||
#Specifiy panel to enter
|
||||
#load up _data hash with DB fields
|
||||
#load up stash with pointer(s) to control fields hash(= get-))
|
||||
#and a pointer to the prefix_data hash
|
||||
#render initial panel
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
|
||||
#The most common ones
|
||||
my $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
my $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
my $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
my $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
my $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
my %lets_data = ();
|
||||
my $title = $c->l('lets_Letsencrypt_certificate');
|
||||
my $modul = '';
|
||||
$lets_data{'trt'} = 'LIST';
|
||||
|
||||
#Load any DB entries into the <prefix>_data area so as they are preset in the form
|
||||
# which DB - this only really works if the initial panel is a PARAMS type panel and not a TABLE
|
||||
my $db = $cdb; #pickup local or global db or Default to config
|
||||
$c->do_display($lets_data{'trt'});
|
||||
} ## end sub main
|
||||
|
||||
# Post request with params - submit from the form
|
||||
sub do_update {
|
||||
#
|
||||
# Return after submit pushed on panel (this is a post) - route is "/<whatever>u"
|
||||
# parameters in the params hash.
|
||||
#
|
||||
#load up all params into prefix_data hash:
|
||||
#By panel (series of if statements - only one executed):
|
||||
#call validate-PANEL() - return ret = ok or error message
|
||||
#if validation not ok:
|
||||
#render back to current panel with error message in stash
|
||||
#otherwise:
|
||||
#By panel (series of if statements - only one executed):
|
||||
#do whatever is required: call perform-PANEL() - return "ok" or Error Message
|
||||
#call signal-event for any global actions specified (check it exists - error and continue?)
|
||||
#if action smeserver-<whatever>-update exists
|
||||
#signal_event smeserver-<whatever>-update
|
||||
#call signal-event for any specific actions for thids panel (check it exists first - error and continue)
|
||||
#set success in stash
|
||||
#if no "nextpanel" entry:
|
||||
#set firstpanel
|
||||
#else
|
||||
#set nextpanel
|
||||
#call render
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
my $modul = '';
|
||||
|
||||
#The most common ones - you might want to comment out any not used.
|
||||
my $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
my $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
my $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
my $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
my $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
my %lets_data = ();
|
||||
my $title = $c->l('lets_Letsencrypt_certificate');
|
||||
|
||||
# Accessing all POST parameters
|
||||
my %params = $c->req->params->to_hash;
|
||||
|
||||
# Get number of POST parameters
|
||||
my $num_params = keys %params;
|
||||
|
||||
#Params are available in the hash "params" - copy to the prefix_data hash
|
||||
#while (my ($key, $value) = each %{$c->req->params->to_hash}) {
|
||||
# $lets_data{$key} = $value;
|
||||
#}
|
||||
# the value of trt will tell you which panel has returned
|
||||
my $trt = $c->param('trt') || 'LIST'; #hidden control on every form.
|
||||
my $ret = 'ok';
|
||||
|
||||
#Validate the parameters in a custom sub one for each panel (although only one of these will be executed)
|
||||
my $thispanel;
|
||||
|
||||
if ($trt eq 'LIST') {
|
||||
|
||||
#Validate form parameters for panel LIST
|
||||
$ret = $c->validate_LIST(\%lets_data);
|
||||
$thispanel = 'LIST';
|
||||
} ## end if ($trt eq 'LIST')
|
||||
|
||||
if ($trt eq 'PARAMS') {
|
||||
|
||||
#Validate form parameters for panel PARAMS
|
||||
$ret = $c->validate_PARAMS(\%lets_data);
|
||||
$thispanel = 'PARAMS';
|
||||
} ## end if ($trt eq 'PARAMS')
|
||||
|
||||
if ($trt eq 'CHECKALLDOMAINS') {
|
||||
|
||||
#Validate form parameters for panel CHECKALLDOMAINS
|
||||
$ret = $c->validate_CHECKALLDOMAINS(\%lets_data);
|
||||
$thispanel = 'CHECKALLDOMAINS';
|
||||
} ## end if ($trt eq 'CHECKALLDOMAINS')
|
||||
|
||||
if ($trt eq 'CHECKALLENABLEDDOMAINS') {
|
||||
|
||||
#Validate form parameters for panel CHECKALLENABLEDDOMAINS
|
||||
$ret = $c->validate_CHECKALLENABLEDDOMAINS(\%lets_data);
|
||||
$thispanel = 'CHECKALLENABLEDDOMAINS';
|
||||
} ## end if ($trt eq 'CHECKALLENABLEDDOMAINS')
|
||||
|
||||
if ($trt eq 'CHECKONEDOMAIN') {
|
||||
|
||||
#Validate form parameters for panel CHECKONEDOMAIN
|
||||
$ret = $c->validate_CHECKONEDOMAIN(\%lets_data);
|
||||
$thispanel = 'CHECKONEDOMAIN';
|
||||
} ## end if ($trt eq 'CHECKONEDOMAIN')
|
||||
|
||||
if ($ret ne "ok") {
|
||||
$c->do_display($thispanel);
|
||||
} else {
|
||||
|
||||
#Do whatever is needed, including writing values to the DB
|
||||
if ($trt eq 'LIST') {
|
||||
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_LIST(\%lets_data);
|
||||
|
||||
if ($ret ne "ok") {
|
||||
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
lets_data => \%lets_data
|
||||
);
|
||||
$c->render(template => "letsencrypt");
|
||||
} else {
|
||||
$c->stash(success => $c->l('lets_LIST_panel_action_was_successful'))
|
||||
; #A bit bland - edit it in the lex file
|
||||
}
|
||||
} ## end if ($trt eq 'LIST')
|
||||
|
||||
if ($trt eq 'PARAMS') {
|
||||
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_PARAMS(\%lets_data);
|
||||
|
||||
if ($ret ne "ok") {
|
||||
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
lets_data => \%lets_data
|
||||
);
|
||||
$c->render(template => "letsencrypt");
|
||||
} else {
|
||||
$c->stash(success => $c->l('lets_PARAMS_panel_action_was_successful'))
|
||||
; #A bit bland - edit it in the lex file
|
||||
}
|
||||
} ## end if ($trt eq 'PARAMS')
|
||||
|
||||
if ($trt eq 'CHECKALLDOMAINS') {
|
||||
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_CHECKALLDOMAINS(\%lets_data);
|
||||
|
||||
if ($ret ne "ok") {
|
||||
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
lets_data => \%lets_data
|
||||
);
|
||||
$c->render(template => "letsencrypt");
|
||||
} else {
|
||||
$c->stash(success => $c->l('lets_CHECKALLDOMAINS_panel_action_was_successful'))
|
||||
; #A bit bland - edit it in the lex file
|
||||
}
|
||||
} ## end if ($trt eq 'CHECKALLDOMAINS')
|
||||
|
||||
if ($trt eq 'CHECKALLENABLEDDOMAINS') {
|
||||
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_CHECKALLENABLEDDOMAINS(\%lets_data);
|
||||
|
||||
if ($ret ne "ok") {
|
||||
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
lets_data => \%lets_data
|
||||
);
|
||||
$c->render(template => "letsencrypt");
|
||||
} else {
|
||||
$c->stash(success => $c->l('lets_CHECKALLENABLEDDOMAINS_panel_action_was_successful'))
|
||||
; #A bit bland - edit it in the lex file
|
||||
}
|
||||
} ## end if ($trt eq 'CHECKALLENABLEDDOMAINS')
|
||||
|
||||
if ($trt eq 'CHECKONEDOMAIN') {
|
||||
|
||||
#do whatever is required ...
|
||||
$ret = $c->perform_CHECKONEDOMAIN(\%lets_data);
|
||||
|
||||
if ($ret ne "ok") {
|
||||
|
||||
# return to the panel with error message
|
||||
$c->stash(error => $c->l($ret));
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
lets_data => \%lets_data
|
||||
);
|
||||
$c->render(template => "letsencrypt");
|
||||
} else {
|
||||
$c->stash(success => $c->l('lets_CHECKONEDOMAIN_panel_action_was_successful'))
|
||||
; #A bit bland - edit it in the lex file
|
||||
}
|
||||
} ## end if ($trt eq 'CHECKONEDOMAIN')
|
||||
|
||||
# and call any signal-events needed
|
||||
#TBD
|
||||
# Setup shared data and call panel
|
||||
if ('none' eq 'none') {
|
||||
$lets_data{'trt'} = 'LIST';
|
||||
} else {
|
||||
$lets_data{'trt'} = 'none';
|
||||
}
|
||||
$c->do_display($lets_data{'trt'});
|
||||
} ## end else [ if ($ret ne "ok") ]
|
||||
} ## end sub do_update
|
||||
|
||||
sub do_display {
|
||||
#
|
||||
# Return after link clicked in table (this is a get) - route is "/<whatever>d"
|
||||
# Expects ?trt=PANEL&selected="TableRowName" plus any other required
|
||||
#
|
||||
# OR it maybe a post from the main panel to add a new record
|
||||
#
|
||||
#load up all supplied params into prefix_data hash
|
||||
#call get-selected-PANEL() - returns hash of all relevent parameters
|
||||
#load up returned hash into prefix_data
|
||||
#render - to called panel
|
||||
my ($c, $trt) = @_;
|
||||
$c->app->log->info($c->log_req);
|
||||
|
||||
#The most common ones - you might want to comment out any not used.
|
||||
my $cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
|
||||
my $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||
my $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||
my $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
|
||||
my $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
|
||||
my %lets_data = ();
|
||||
my $title = $c->l('lets_Letsencrypt_certificate');
|
||||
my $modul = "";
|
||||
|
||||
# Accessing all parameters
|
||||
my %params = $c->req->params->to_hash;
|
||||
|
||||
# Get number of parameters
|
||||
my $num_params = keys %params;
|
||||
|
||||
#Tag as Post or Get (ie. create new entry or edit existing one
|
||||
my $is_new_record = ($c->req->method() eq 'POST');
|
||||
|
||||
#Params are available in the hash "params" - copy to the prefix_data hash
|
||||
#while (my ($key, $value) = each %{$c->req->params->to_hash}) {
|
||||
# $lets_data{$key} = $value;
|
||||
#}
|
||||
# the value of trt will tell you which panel has returned
|
||||
if (!$trt) {
|
||||
$trt = $c->param('trt') || 'LIST'; #Indicates where to go now
|
||||
}
|
||||
|
||||
# Now add in the params from the selected row from the table
|
||||
my %selectedrow;
|
||||
|
||||
if ($trt eq 'LIST') {
|
||||
|
||||
#Validate Get selected row (if applicable) LIST
|
||||
%selectedrow = $c->get_selected_LIST($lets_data{'Selected'}, $is_new_record);
|
||||
} ## end if ($trt eq 'LIST')
|
||||
|
||||
if ($trt eq 'PARAMS') {
|
||||
|
||||
#Validate Get selected row (if applicable) PARAMS
|
||||
%selectedrow = $c->get_selected_PARAMS($lets_data{'Selected'}, $is_new_record);
|
||||
} ## end if ($trt eq 'PARAMS')
|
||||
|
||||
if ($trt eq 'CHECKALLDOMAINS') {
|
||||
|
||||
#Validate Get selected row (if applicable) CHECKALLDOMAINS
|
||||
%selectedrow = $c->get_selected_CHECKALLDOMAINS($lets_data{'Selected'}, $is_new_record);
|
||||
} ## end if ($trt eq 'CHECKALLDOMAINS')
|
||||
|
||||
if ($trt eq 'CHECKALLENABLEDDOMAINS') {
|
||||
|
||||
#Validate Get selected row (if applicable) CHECKALLENABLEDDOMAINS
|
||||
%selectedrow = $c->get_selected_CHECKALLENABLEDDOMAINS($lets_data{'Selected'}, $is_new_record);
|
||||
} ## end if ($trt eq 'CHECKALLENABLEDDOMAINS')
|
||||
|
||||
if ($trt eq 'CHECKONEDOMAIN') {
|
||||
|
||||
#Validate Get selected row (if applicable) CHECKONEDOMAIN
|
||||
%selectedrow = $c->get_selected_CHECKONEDOMAIN($lets_data{'Selected'}, $is_new_record);
|
||||
} ## end if ($trt eq 'CHECKONEDOMAIN')
|
||||
|
||||
#Copy in the selected row params to the prefix_data hash to pass to the panel
|
||||
while (my ($key, $value) = each %selectedrow) {
|
||||
$lets_data{$key} = $value;
|
||||
}
|
||||
|
||||
# Where to go now
|
||||
$lets_data{'trt'} = $trt;
|
||||
|
||||
# Set up other shared data according to the panel to go to
|
||||
if ($trt eq 'LIST') {
|
||||
|
||||
# pickup any other contents needed and load them into hash shared with panel
|
||||
my %returned_hash;
|
||||
|
||||
# subroutine returns a hash directly
|
||||
%returned_hash = $c->get_data_for_panel_LIST();
|
||||
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$lets_data{$key} = $value;
|
||||
}
|
||||
} ## end if ($trt eq 'LIST')
|
||||
|
||||
if ($trt eq 'PARAMS') {
|
||||
|
||||
# pickup any other contents needed and load them into hash shared with panel
|
||||
my %returned_hash;
|
||||
|
||||
# subroutine returns a hash directly
|
||||
%returned_hash = $c->get_data_for_panel_PARAMS();
|
||||
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$lets_data{$key} = $value;
|
||||
}
|
||||
} ## end if ($trt eq 'PARAMS')
|
||||
|
||||
if ($trt eq 'CHECKALLDOMAINS') {
|
||||
|
||||
# pickup any other contents needed and load them into hash shared with panel
|
||||
my %returned_hash;
|
||||
|
||||
# subroutine returns a hash directly
|
||||
%returned_hash = $c->get_data_for_panel_CHECKALLDOMAINS();
|
||||
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$lets_data{$key} = $value;
|
||||
}
|
||||
} ## end if ($trt eq 'CHECKALLDOMAINS')
|
||||
|
||||
if ($trt eq 'CHECKALLENABLEDDOMAINS') {
|
||||
|
||||
# pickup any other contents needed and load them into hash shared with panel
|
||||
my %returned_hash;
|
||||
|
||||
# subroutine returns a hash directly
|
||||
%returned_hash = $c->get_data_for_panel_CHECKALLENABLEDDOMAINS();
|
||||
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$lets_data{$key} = $value;
|
||||
}
|
||||
} ## end if ($trt eq 'CHECKALLENABLEDDOMAINS')
|
||||
|
||||
if ($trt eq 'CHECKONEDOMAIN') {
|
||||
|
||||
# pickup any other contents needed and load them into hash shared with panel
|
||||
my %returned_hash;
|
||||
|
||||
# subroutine returns a hash directly
|
||||
%returned_hash = $c->get_data_for_panel_CHECKONEDOMAIN();
|
||||
|
||||
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||
while (my ($key, $value) = each %returned_hash) {
|
||||
$lets_data{$key} = $value;
|
||||
}
|
||||
} ## end if ($trt eq 'CHECKONEDOMAIN')
|
||||
|
||||
# and table control fields
|
||||
$c->stash(DomainList => $c->get_DomainList());
|
||||
|
||||
# Data for panel
|
||||
$c->stash(
|
||||
title => $title,
|
||||
modul => $modul,
|
||||
lets_data => \%lets_data
|
||||
);
|
||||
$c->render(template => "letsencrypt");
|
||||
} ## end sub do_display
|
||||
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');
|
||||
|
@@ -14,14 +14,15 @@ use Mojo::Base 'Mojolicious::Controller';
|
||||
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 +38,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 +79,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) = '';
|
||||
|
@@ -10,7 +10,7 @@ package SrvMngr::Controller::Qmailanalog;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Mojo::Base 'Mojolicious::Controller';
|
||||
use esmith::FormMagick qw(gen_locale_date_string);
|
||||
use SrvMngr qw(gen_locale_date_string);
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
|
@@ -11,22 +11,21 @@ package SrvMngr::Controller::Quota;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Mojo::Base 'Mojolicious::Controller';
|
||||
use esmith::FormMagick::Panel::quota;
|
||||
|
||||
#use esmith::TestUtils;
|
||||
use Scalar::Util qw(looks_like_number);
|
||||
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 +44,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') {
|
||||
@@ -53,9 +53,9 @@ sub do_display {
|
||||
if ($rec and $rec->prop('type') eq 'user') {
|
||||
$quo_datas{user} = $user;
|
||||
$quo_datas{userRec} = $rec;
|
||||
my $max = esmith::FormMagick::Panel::quota->toBestUnit($rec->prop('MaxBlocks'));
|
||||
my $max = $c->toBestUnit($rec->prop('MaxBlocks'));
|
||||
$quo_datas{hardlim} = $max;
|
||||
$max = esmith::FormMagick::Panel::quota->toBestUnit($rec->prop('MaxBlocksSoftLim'));
|
||||
$max = $c->toBestUnit($rec->prop('MaxBlocksSoftLim'));
|
||||
$quo_datas{softlim} = $max;
|
||||
} ## end if ($rec and $rec->prop...)
|
||||
} ## end if ($trt eq 'UPD')
|
||||
@@ -73,6 +73,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 +157,54 @@ 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);
|
||||
}
|
||||
|
||||
sub toMBNoDecimalPlaces
|
||||
{
|
||||
my ($self,$kb) = @_;
|
||||
return sprintf("%.0f", $kb / 1024);
|
||||
}
|
||||
|
||||
sub toGBNoDecimalPlaces
|
||||
{
|
||||
my ($self,$kb) = @_;
|
||||
return sprintf("%.0f", $kb / 1024 / 1024);
|
||||
}
|
||||
|
||||
sub toKB
|
||||
{
|
||||
my ($self,$mb) = @_;
|
||||
return sprintf("%.0f", $mb * 1024);
|
||||
}
|
||||
|
||||
|
||||
sub GBtoKB
|
||||
{
|
||||
my ($self,$gb) = @_;
|
||||
return sprintf("%.0f", $gb * 1024 * 1024);
|
||||
}
|
||||
|
||||
sub MBtoKB
|
||||
{
|
||||
my ($self,$mb) = @_;
|
||||
return sprintf("%.0f", $mb * 1024);
|
||||
}
|
||||
|
||||
sub toBestUnit
|
||||
{
|
||||
my ($self,$kb) = @_;
|
||||
return 0 if($kb == 0);
|
||||
return $kb."K" if($kb < 1024);
|
||||
return $kb."K" if($kb > 1024 && $kb < 1048576 && $kb % 1024 != 0);
|
||||
return $self->toMBNoDecimalPlaces($kb)."M" if($kb < 1048576);
|
||||
return $self->toMBNoDecimalPlaces($kb)."M" if($kb > 1048576
|
||||
&& ($kb % 1048576 != 0));
|
||||
return $self->toGBNoDecimalPlaces($kb)."G";
|
||||
}
|
||||
|
||||
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);
|
||||
|
@@ -134,7 +134,7 @@ sub networkAccess_list {
|
||||
return [
|
||||
[ $c->l('rma_NO_ACCESS') => 'off' ],
|
||||
[ $c->l('NETWORKS_ALLOW_LOCAL') => 'private' ],
|
||||
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public' ]
|
||||
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'normal' ]
|
||||
];
|
||||
} ## end sub networkAccess_list
|
||||
|
||||
|
@@ -17,10 +17,11 @@ use Mojo::Base 'Mojolicious::Controller';
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
use SrvMngr qw(gen_locale_date_string);
|
||||
|
||||
|
||||
#use SrvMngr::Review_sub qw(print_page);
|
||||
#use smeserver::Panel::review;
|
||||
use esmith::FormMagick::Panel::review;
|
||||
our $db = esmith::ConfigDB->open_ro || die "Couldn't open config db";
|
||||
our $domains = esmith::DomainsDB->open_ro || die "Couldn't open domains";
|
||||
our $networks = esmith::NetworksDB->open_ro || die "Couldn't open networks";
|
||||
@@ -33,7 +34,7 @@ sub main {
|
||||
my %rvw_datas = ();
|
||||
$rvw_datas{'servermode'} = (get_value('', 'SystemMode') || '');
|
||||
$rvw_datas{'localip'} = get_value('$c', 'LocalIP') . '/' . get_value('$c', 'LocalNetmask');
|
||||
$rvw_datas{'publicip'} = esmith::FormMagick::Panel::review->get_public_ip_address($c);
|
||||
$rvw_datas{'publicip'} = $c->get_public_ip_address($c);
|
||||
$rvw_datas{'gateway'} = $c->render_to_string(inline => print2_gateway_stanza($c));
|
||||
$rvw_datas{'serveronly'} = $c->render_to_string(inline => print2_serveronly_stanza($c));
|
||||
$rvw_datas{'addlocalnetworks'} = get_local_networks($c);
|
||||
@@ -151,6 +152,55 @@ sub get2_local_networks {
|
||||
} ## end else [ if ($numNetworks == 0)]
|
||||
} ## end sub get2_local_networks
|
||||
|
||||
sub get_net_prop {
|
||||
my $fm = shift;
|
||||
my $item = shift;
|
||||
my $prop = shift;
|
||||
|
||||
my $record = $networks->get($item);
|
||||
if ($record) {
|
||||
return $record->prop($prop);
|
||||
}
|
||||
else {
|
||||
return '';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
sub get_local_networks {
|
||||
my $fm = shift;
|
||||
|
||||
my @nets = $networks->get_all_by_prop('type' => 'network');
|
||||
|
||||
my $numNetworks = @nets;
|
||||
if ($numNetworks == 0) {
|
||||
return $fm->localise('NO_NETWORKS');
|
||||
}
|
||||
else {
|
||||
my $out = "";
|
||||
foreach my $network (sort @nets) {
|
||||
if ($out ne "") {
|
||||
$out .= "<BR>";
|
||||
}
|
||||
|
||||
$out .= $network->key."/" . get_net_prop($fm, $network->key, 'Mask');
|
||||
|
||||
if ( defined get_net_prop($fm, $network->key, 'Router') ) {
|
||||
$out .= " via " . get_net_prop ($fm, $network->key, 'Router');
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sub get_local_domain
|
||||
{
|
||||
return (get_value('','DomainName'));
|
||||
}
|
||||
|
||||
|
||||
=head2 print2_gateway_stanza
|
||||
|
||||
If this system is a server gateway, show the external ip and gateway ip (mojo ver)
|
||||
@@ -216,4 +266,51 @@ sub print2_dhcp_stanza {
|
||||
} ## end if (get_prop($c, 'dhcpd'...))
|
||||
return $out;
|
||||
} ## end sub print2_dhcp_stanza
|
||||
|
||||
sub get_value {
|
||||
my $fm = shift;
|
||||
my $item = shift;
|
||||
my $record = $db->get($item);
|
||||
if ($record) {
|
||||
return $record->value();
|
||||
}
|
||||
else {
|
||||
return '';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sub get_prop {
|
||||
my $fm = shift if (ref($_[0]) ); # If we're being called in a formmagick context
|
||||
# The first argument will always be a fm.
|
||||
#otherwise, we don't want to grab it
|
||||
my $item = shift;
|
||||
my $prop = shift;
|
||||
|
||||
my $record = $db->get($item);
|
||||
if ($record) {
|
||||
return $record->prop($prop);
|
||||
}
|
||||
else {
|
||||
return '';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sub get_public_ip_address
|
||||
{
|
||||
my $self = shift;
|
||||
my $sysconfig = $db->get('sysconfig');
|
||||
if ($sysconfig)
|
||||
{
|
||||
my $publicIP = $sysconfig->prop('PublicIP');
|
||||
if ($publicIP)
|
||||
{
|
||||
return $publicIP;
|
||||
}
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
@@ -2,7 +2,7 @@ package SrvMngr::Controller::Roundcubepanel;
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# heading : System
|
||||
# description : Roundcube webmail
|
||||
# description : Webmail
|
||||
# navigation : 99999 9999
|
||||
#----------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------
|
||||
@@ -21,10 +21,9 @@ use SrvMngr qw(theme_list init_session);
|
||||
sub main {
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
my $title = $c->l('Roundcube Webmail');
|
||||
my $title = $c->l('Webmail');
|
||||
my $roundcube_url = $c->param('url');
|
||||
my $roundcube_height = $c->param('height') | 600;
|
||||
$c->stash(title => $title, modul => $roundcube_url, height => $roundcube_height);
|
||||
$c->stash(title => $title, modul => $roundcube_url);
|
||||
$c->render(template => 'roundcube');
|
||||
} ## end sub main
|
||||
|
||||
|
@@ -14,7 +14,7 @@ use Mojo::Base 'Mojolicious::Controller';
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session
|
||||
is_normal_password email_simple);
|
||||
validate_password email_simple);
|
||||
|
||||
#use esmith::FormMagick qw( validate_password );
|
||||
#use CGI::FormMagick::Validator qw( call_fm_validation );
|
||||
@@ -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") {
|
||||
@@ -425,32 +434,6 @@ sub check_password {
|
||||
return validate_password($c, $check_type, $pass1);
|
||||
} ## end sub check_password
|
||||
|
||||
sub validate_password {
|
||||
my ($c, $strength, $pass) = @_;
|
||||
use Crypt::Cracklib;
|
||||
my $reason;
|
||||
|
||||
if ($strength eq "none") {
|
||||
return $c->l("Passwords must be at least 7 characters long") unless (length($pass) > 6);
|
||||
return "OK";
|
||||
}
|
||||
$reason = is_normal_password($c, $pass, undef);
|
||||
return $reason unless ($reason eq "OK");
|
||||
return "OK" unless ($strength eq "strong");
|
||||
|
||||
if (-f '/usr/lib64/cracklib_dict.pwd') {
|
||||
$reason = fascist_check($pass, '/usr/lib64/cracklib_dict');
|
||||
} else {
|
||||
$reason = fascist_check($pass, '/usr/lib/cracklib_dict');
|
||||
}
|
||||
$reason ||= "Software error: password check failed";
|
||||
return "OK" if ($reason eq "ok");
|
||||
return
|
||||
$c->l("Bad Password Choice") . ": "
|
||||
. $c->l("The password you have chosen is not a good choice, because") . " "
|
||||
. $c->($reason) . ".";
|
||||
} ## end sub validate_password
|
||||
|
||||
sub emailForward_list {
|
||||
my $c = shift;
|
||||
return [
|
||||
|
@@ -16,8 +16,8 @@ use esmith::ConfigDB;
|
||||
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";
|
||||
use SrvMngr qw( theme_list init_session validate_password );
|
||||
#our $cdb = esmith::ConfigDB->open_ro || die "Couldn't open configuration db";
|
||||
|
||||
sub main {
|
||||
my $c = shift;
|
||||
@@ -194,33 +194,10 @@ 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);
|
||||
} ## end sub check_password
|
||||
|
||||
sub validate_password {
|
||||
my ($c, $strength, $pass) = @_;
|
||||
use Crypt::Cracklib;
|
||||
|
||||
if ($strength eq "none") {
|
||||
return $c->l("Passwords must be at least 7 characters long") unless (length($pass) > 6);
|
||||
return "OK";
|
||||
}
|
||||
my $reason = is_normal_password($c, $pass, undef);
|
||||
return $reason unless ($reason eq "OK");
|
||||
return "OK" unless ($strength eq "strong");
|
||||
|
||||
if (-f '/usr/lib64/cracklib_dict.pwd') {
|
||||
$reason = fascist_check($pass, '/usr/lib64/cracklib_dict');
|
||||
} else {
|
||||
$reason = fascist_check($pass, '/usr/lib/cracklib_dict');
|
||||
}
|
||||
$reason ||= "Software error: password check failed";
|
||||
return "OK" if ($reason eq "ok");
|
||||
return
|
||||
$c->l("Bad Password Choice") . ": "
|
||||
. $c->l("The password you have chosen is not a good choice, because") . " "
|
||||
. $c->($reason) . ".";
|
||||
} ## end sub validate_password
|
||||
1;
|
||||
|
@@ -12,15 +12,13 @@ use strict;
|
||||
use warnings;
|
||||
use Mojo::Base 'Mojolicious::Controller';
|
||||
|
||||
#use esmith::FormMagick qw(gen_locale_date_string);
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
use esmith::ConfigDB;
|
||||
use Time::TAI64;
|
||||
use File::Basename;
|
||||
use HTML::Entities;
|
||||
use esmith::FormMagick qw(gen_locale_date_string);
|
||||
use SrvMngr qw(gen_locale_date_string);
|
||||
use File::Temp qw(tempfile);
|
||||
use constant TRUE => 1;
|
||||
use constant FALSE => 0;
|
||||
@@ -104,10 +102,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 +127,7 @@ sub findlogFiles {
|
||||
# or not log files
|
||||
foreach (
|
||||
qw(
|
||||
journal
|
||||
lastlog
|
||||
btmp$
|
||||
wtmp
|
||||
|
@@ -13,7 +13,6 @@ use Mojo::Base 'Mojolicious::Controller';
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
use SrvMngr qw(theme_list init_session);
|
||||
use esmith::FormMagick::Panel::workgroup;
|
||||
our $db = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
|
||||
sub main {
|
||||
|
@@ -1,72 +0,0 @@
|
||||
package SrvMngr::I18N::Modules::Letsencrypt::en;
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use Mojo::Base 'SrvMngr::I18N';
|
||||
|
||||
use SrvMngr::I18N::Modules::General::en;
|
||||
|
||||
my %lexicon = (
|
||||
#
|
||||
# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
#
|
||||
'lets_Manage_letsencrypt-config_settings:' => 'Manage letsencrypt-config settings',
|
||||
'lets_HOOKSCRIPT_STATUS' => 'Hookscript Status',
|
||||
'lets_SERVICE_STATUS' => 'Service Status',
|
||||
'lets_EMAIL' => 'Email',
|
||||
'lets_Back' => 'Back',
|
||||
'lets_Internal_IP' => 'Internal IP',
|
||||
'lets_Save' => 'Save',
|
||||
'lets_Issuer' => 'Issuer',
|
||||
'lets_IS_IN_CERT' => 'Is In cart',
|
||||
'lets_For_this_Server' => 'For this Server',
|
||||
'lets_Loop_through_checking_the_letsencrypt' => 'Loop through checking the letsencrypt status for each configured domain',
|
||||
'lets_Loop_through_checking_the_letsencrypt' => 'Loop through checking the letsencrypt status for each configured domain which is enabled',
|
||||
'lets_Check_just_one_domain' => 'Check just one domain',
|
||||
'lets_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful',
|
||||
'lets_Check_all_domains' => 'Check all domains',
|
||||
'lets_LIST_panel_action_was_successful' => 'LIST panel action was successful',
|
||||
'lets_Status_Report' => 'Status Report',
|
||||
'lets_LABEL_NAMESERVERS' => 'Label timeservers',
|
||||
'lets_Loop_through_and_check_the' => 'Loop through and check the letsencrypt status for a specific domain',
|
||||
'lets_Letsencrypt_certificate' => 'Letsencrypt certificate',
|
||||
'lets_Error_Status_Report' => 'Error Status Report',
|
||||
'lets_Not_Before' => 'Not Before',
|
||||
'lets_Content' => 'Content',
|
||||
'lets_CONFIG_LETSENCRYPT' => 'confirm Letsencrypt',
|
||||
'lets_API_STATUS' => 'ape Status',
|
||||
'lets_ACCEPT_TERMS_STATUS' => 'Accept Terms Status',
|
||||
'lets_Check_all_enabled_domains' => 'Check all enabled domains',
|
||||
'lets_All_domains_check_result' => 'All domains check result',
|
||||
'lets_CHECKALLDOMAINS_panel_action_was_successful' => 'CHECKALLDOMAINS panel action was successful',
|
||||
'lets_Domains_name' => 'Domains name',
|
||||
'lets_HOSTOVERRIDE_STATUS' => 'Hostoverride Status',
|
||||
'lets_List_of_Domains_and_Hosts' => 'List of Domains and Hosts',
|
||||
'lets_Brief_description' => 'Brief description',
|
||||
'lets_KEYSIZE_STATUS' => 'Keysize Status',
|
||||
'lets_Domain_name_/_HOSTNAME' => 'Domain name / HOSTNAME',
|
||||
'lets_Enabled_domains_check_result' => 'Enabled domains check result',
|
||||
'lets_CHECKALLENABLEDDOMAINS_panel_action_was_successful' => 'CHECKALLENABLEDDOMAINS panel action was successful',
|
||||
'lets_Internet_IP' => 'Internet IP',
|
||||
'lets_Expiry' => 'Expiry',
|
||||
'lets_CHECK_ALL_DOMAINS' => 'Check All Domains',
|
||||
'lets_LABEL_POINT' => 'Label Point',
|
||||
'lets_CHECK' => 'Check',
|
||||
'lets_CONFIG' => 'Config',
|
||||
'lets_Current_certificate_details' => 'Current certificate details',
|
||||
'lets_LABEL_LECERT' => 'Label secret',
|
||||
'lets_One_domain_check_result' => 'One domain check result',
|
||||
'lets_CHECKONEDOMAIN_panel_action_was_successful' => 'CHECKONEDOMAIN panel action was successful',
|
||||
'lets_CONFIGUREMODE_STATUS' => 'Configuremode Status',
|
||||
'lets_CHECK_ALL_ENABLED_DOMAINS' => 'Check All Enabled Domains',
|
||||
'lets_External_Interface_IP' => 'External Interface IP',
|
||||
'lets_APPLY' => 'Apply',
|
||||
);
|
||||
|
||||
our %Lexicon = (
|
||||
%{ SrvMngr::I18N::Modules::General::en::Lexicon },
|
||||
%lexicon
|
||||
);
|
||||
|
||||
|
||||
1;
|
@@ -1,55 +0,0 @@
|
||||
#
|
||||
# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
# edited by bjr 09Jan2025
|
||||
#
|
||||
'lets_Manage_letsencrypt-config_settings:' => 'Manage letsencrypt-config settings',
|
||||
'lets_HOOKSCRIPT_STATUS' => 'Hookscript Status',
|
||||
'lets_SERVICE_STATUS' => 'Service Status',
|
||||
'lets_EMAIL' => 'Email',
|
||||
'lets_Back' => 'Back',
|
||||
'lets_Internal_IP' => 'Internal IP',
|
||||
'lets_Save' => 'Save',
|
||||
'lets_Issuer' => 'Issuer',
|
||||
'lets_IS_IN_CERT' => 'Is in certificate',
|
||||
'lets_For_this_Server' => 'For this Server',
|
||||
'lets_Loop_through_checking_the_letsencrypt' => 'Loop through checking the letsencrypt status for each configured domain',
|
||||
'lets_Loop_through_checking_the_letsencrypt' => 'Loop through checking the letsencrypt status for each configured domain which is enabled',
|
||||
'lets_Check_just_one_domain' => 'Check just one domain',
|
||||
'lets_PARAMS_panel_action_was_successful' => 'Parameter panel action was successful',
|
||||
'lets_Check_all_domains' => 'Check all domains',
|
||||
'lets_LIST_panel_action_was_successful' => 'List panel action was successful',
|
||||
'lets_Status_Report' => 'Status Report',
|
||||
'lets_LABEL_NAMESERVERS' => 'Label timeservers',
|
||||
'lets_Loop_through_and_check_the' => 'Loop through and check the letsencrypt status for a specific domain',
|
||||
'lets_Letsencrypt_certificate' => 'Letsencrypt certificate',
|
||||
'lets_Error_Status_Report' => 'Error Status Report',
|
||||
'lets_Not_Before' => 'Not Before',
|
||||
'lets_Content' => 'Content',
|
||||
'lets_CONFIG_LETSENCRYPT' => 'Configure Letsencrypt',
|
||||
'lets_API_STATUS' => 'API Status',
|
||||
'lets_ACCEPT_TERMS_STATUS' => 'Accept Terms Status',
|
||||
'lets_Check_all_enabled_domains' => 'Check all enabled domains',
|
||||
'lets_All_domains_check_result' => 'All domains check result',
|
||||
'lets_CHECKALLDOMAINS_panel_action_was_successful' => 'Check all domains panel action was successful',
|
||||
'lets_Domains_name' => 'Domains name',
|
||||
'lets_HOSTOVERRIDE_STATUS' => 'Hostoverride Status',
|
||||
'lets_List_of_Domains_and_Hosts' => 'List of Domains and Hosts',
|
||||
'lets_Brief_description' => 'Brief description',
|
||||
'lets_KEYSIZE_STATUS' => 'Keysize Status',
|
||||
'lets_Domain_name_/_HOSTNAME' => 'Domain name / HOSTNAME',
|
||||
'lets_Enabled_domains_check_result' => 'Enabled domains check result',
|
||||
'lets_CHECKALLENABLEDDOMAINS_panel_action_was_successful' => 'Check all enabled domains panel action was successful',
|
||||
'lets_Internet_IP' => 'Internet IP',
|
||||
'lets_Expiry' => 'Expiry',
|
||||
'lets_CHECK_ALL_DOMAINS' => 'Check All Domains',
|
||||
'lets_LABEL_POINT' => 'Label Point',
|
||||
'lets_CHECK' => 'Check',
|
||||
'lets_CONFIG' => 'Config',
|
||||
'lets_Current_certificate_details' => 'Current certificate details',
|
||||
'lets_LABEL_LECERT' => 'Label secret',
|
||||
'lets_One_domain_check_result' => 'One domain check result',
|
||||
'lets_CHECKONEDOMAIN_panel_action_was_successful' => 'Check one domain panel action was successful',
|
||||
'lets_CONFIGUREMODE_STATUS' => 'Configure mode Status',
|
||||
'lets_CHECK_ALL_ENABLED_DOMAINS' => 'Check All Enabled Domains',
|
||||
'lets_External_Interface_IP' => 'External Interface IP',
|
||||
'lets_APPLY' => 'Apply',
|
@@ -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;
|
@@ -1,90 +0,0 @@
|
||||
/*
|
||||
Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
*/
|
||||
.Letsencrypt-panel {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.grou {}
|
||||
.link2 {}
|
||||
.link3 {}
|
||||
.link4 {}
|
||||
.endg {}
|
||||
.subh2 {}
|
||||
.read4 {}
|
||||
.read5 {}
|
||||
.read6 {}
|
||||
.subh3 {}
|
||||
.read1 {}
|
||||
.read2 {}
|
||||
.read3 {}
|
||||
.subh4 {}
|
||||
.tabl1 {}
|
||||
thead .tabl1 {}
|
||||
tbody .tabl1 {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.subh {}
|
||||
.para1 {}
|
||||
.sele1 {}
|
||||
.sele2 {}
|
||||
.sele3 {}
|
||||
.sele4 {}
|
||||
.sele5 {}
|
||||
.sele6 {}
|
||||
.sele7 {}
|
||||
.emai8 {}
|
||||
.subm9 {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.text1 {}
|
||||
.back2 {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.text1 {}
|
||||
.back2 {}
|
||||
.name {}
|
||||
.rout {}
|
||||
.head {}
|
||||
.subh {}
|
||||
.read1 {}
|
||||
.text2 {}
|
||||
.back3 {}
|
||||
.inline-buttons {
|
||||
display: flex; /* Use flexbox to arrange items horizontally */
|
||||
gap: 10px; /* Optional: Add space between buttons */
|
||||
}
|
||||
|
||||
.inline-buttons .link {
|
||||
/* Additional styling can be added here if needed */
|
||||
}
|
||||
|
||||
|
||||
.inline-buttons .link {
|
||||
display: inline-block; /* Keep links as inline-block for button shape */
|
||||
padding: 7px 14px; /* Adjusted padding to approximate 70% of the original */
|
||||
margin: 0; /* Remove margin */
|
||||
background-color: #efefef; /* Light gray background color */
|
||||
color: black; /* Text color */
|
||||
text-decoration: none; /* Remove underline */
|
||||
border: 2px solid #bbb; /* Thin, light gray border */
|
||||
border-radius: 3px; /* Slightly rounded corners */
|
||||
font-size: 11.2px; /* Adjusted font size to approximate 70% of the original */
|
||||
text-align: center; /* Center the text */
|
||||
cursor: pointer; /* Pointer cursor on hover */ }
|
||||
|
||||
/* Hover and active effects for better interaction */
|
||||
.inline-buttons .link:hover {
|
||||
background-color: #d9d9d9; /* Darker shade on hover */
|
||||
}
|
||||
|
||||
.inline-buttons .link:active {
|
||||
background-color: #c0c0c0; /* Even darker shade on click */
|
||||
}
|
||||
|
||||
span .label {
|
||||
padding-top:13em;
|
||||
}
|
@@ -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}
|
||||
|
@@ -11,42 +11,52 @@
|
||||
# The events handle cases where mysqld is not enabled, and/or is not running.
|
||||
my $status = system("/sbin/e-smith/signal-event", "pre-backup", "desktop");
|
||||
if ($status) {
|
||||
desktopBackupRecordStatus($backup_rec, 'pre-backup', $status);
|
||||
return ($c->l('bac_OPERATION_STATUS_REPORT').
|
||||
$c->l('bac_ERR_PRE_BACKUP'));
|
||||
$c->desktopBackupRecordStatus($backup_rec, 'pre-backup', $status);
|
||||
return ($c->l('bac_OPERATION_STATUS_REPORT').$c->l('bac_ERR_PRE_BACKUP'));
|
||||
}
|
||||
|
||||
my $clvl = $c->stash('compressionlevel');
|
||||
my $cmd = "/bin/tar --directory / --create @{$c->stash('directories')} --file=-"
|
||||
. "@{$c->stash('exclude')} | /usr/bin/gzip $clvl ";
|
||||
my $cmd = "/bin/tar --create --file=- --directory / @{$c->stash('exclude')} "
|
||||
. "@{$c->stash('directories')} | /usr/bin/gzip $clvl ";
|
||||
|
||||
my $success = open my $fh, '-|', $cmd;
|
||||
unless ($success) { return "Error dowload command."; };
|
||||
|
||||
# Write chunk
|
||||
$c->res->headers->content_type('application/x-tar');
|
||||
$c->res->headers->content_disposition(qq/attachment; filename="smeserver.tgz"/);
|
||||
|
||||
my $cb;
|
||||
$cb = sub {
|
||||
my $c = shift;
|
||||
my $size = 500 * 1024;
|
||||
my $length = sysread($fh, my $buffer, $size);
|
||||
unless ($length) {
|
||||
close $fh;
|
||||
undef $cb;
|
||||
$c->finish;
|
||||
return;
|
||||
}
|
||||
$c->write_chunk($buffer, $cb);
|
||||
};
|
||||
$c->$cb;
|
||||
#unless ($success) { return "Error download command."; };
|
||||
if ($success) {
|
||||
# Try with download plugin - seems to fail to complete download and also
|
||||
# name of file deposited is not as required.
|
||||
#my $output = do { local $/; <$fh> };
|
||||
#close $fh;
|
||||
#$c->render_file(
|
||||
#data => $output,
|
||||
#filename => 'output.txt',
|
||||
#content_type => 'text/plain'
|
||||
#);
|
||||
# So organise it ourselves.
|
||||
$c->res->headers->content_type('application/x-tar');
|
||||
$c->res->headers->content_disposition(qq/attachment; filename="smeserver.tgz"/);
|
||||
my $cb;
|
||||
$cb = sub {
|
||||
my $c = shift;
|
||||
my $size = 500 * 1024;
|
||||
my $length = sysread($fh, my $buffer, $size);
|
||||
unless ($length) {
|
||||
close $fh;
|
||||
undef $cb;
|
||||
$c->finish;
|
||||
return;
|
||||
}
|
||||
$c->write_chunk($buffer, $cb);
|
||||
};
|
||||
$c->$cb;
|
||||
} else {
|
||||
$c->render(text => "Failed to execute command: $!", status => 500);
|
||||
}
|
||||
|
||||
# Remove the dumped tables.
|
||||
$status = system("/sbin/e-smith/signal-event", "post-backup", "desktop");
|
||||
if ($status) {
|
||||
desktopBackupRecordStatus($backup_rec, 'post-backup', $status);
|
||||
die ($c->l('bac_ERR_POST_BACKUP'),"\n");
|
||||
$c->desktopBackupRecordStatus($backup_rec, 'post-backup', $status);
|
||||
die ($c->l('bac_ERR_POST_BACKUP'),"\n");
|
||||
}
|
||||
|
||||
$now = time();
|
||||
@@ -54,3 +64,4 @@
|
||||
$backup_rec->set_prop('Result', "0");
|
||||
|
||||
%>
|
||||
1;
|
@@ -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>
|
@@ -1,69 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
%#
|
||||
% layout 'default', title => "Sme server 2 - Letsencrypt certificate", share_dir => './';
|
||||
%# css specific to this panel:
|
||||
% content_for 'module' => begin
|
||||
%= stylesheet '/css/letsencrypt.css'
|
||||
<div id="module" class="module Letsencrypt-panel">
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $lets_data->{trt}
|
||||
</pre>
|
||||
% }
|
||||
|
||||
<h1><%=$title%></h1>
|
||||
|
||||
% if ( stash('modul')) {
|
||||
%= $c->render_to_string(inline => stash('modul') );
|
||||
% }
|
||||
|
||||
%if ($c->stash('first')) {
|
||||
<br><p>
|
||||
%=$c->render_to_string(inline =>$c->l($c->stash('first')))
|
||||
</p>
|
||||
|
||||
%} elsif ($c->stash('success')) {
|
||||
<div class='success '>
|
||||
<h2><%=$c->l('lets_Status_Report') %></h2><p>
|
||||
%= $c->l($c->stash('success'));
|
||||
</p>
|
||||
</div>
|
||||
|
||||
%} elsif ($c->stash('error')) {
|
||||
<div class='sme-error'>
|
||||
<h2><%=$c->l('lets_Error_Status_Report') %></h2><p>
|
||||
%= $c->l($c->stash('error'));
|
||||
</p>
|
||||
</div>
|
||||
%}
|
||||
|
||||
%#Routing to partials according to trt parameter.
|
||||
%#This ought to be cascading if/then/elsif, but is easier to just stack the if/then's rather like a case statement'
|
||||
|
||||
% if ($lets_data->{trt} eq "LIST") {
|
||||
%= include 'partials/_lets_LIST'
|
||||
%}
|
||||
|
||||
% if ($lets_data->{trt} eq "PARAMS") {
|
||||
%= include 'partials/_lets_PARAMS'
|
||||
%}
|
||||
|
||||
% if ($lets_data->{trt} eq "CHECKALLDOMAINS") {
|
||||
%= include 'partials/_lets_CHECKALLDOMAINS'
|
||||
%}
|
||||
|
||||
% if ($lets_data->{trt} eq "CHECKALLENABLEDDOMAINS") {
|
||||
%= include 'partials/_lets_CHECKALLENABLEDDOMAINS'
|
||||
%}
|
||||
|
||||
% if ($lets_data->{trt} eq "CHECKONEDOMAIN") {
|
||||
%= include 'partials/_lets_CHECKONEDOMAIN'
|
||||
%}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
%end
|
@@ -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'
|
||||
|
@@ -64,7 +64,7 @@
|
||||
% </a>
|
||||
%};
|
||||
%my $remove_text = l('REMOVE'); # Localized text
|
||||
%my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
%$csrf_token = "TOKEN"; # CSRF token for security
|
||||
%#my $hostentries_name = $_->{'HostName'}; # hostentries name extracted from the data structure
|
||||
%$actionRemove = qq{
|
||||
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=DEL&Hostname=$hostentries_name">
|
||||
|
@@ -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>
|
@@ -1,3 +1,4 @@
|
||||
<% use POSIX qw(strftime); %>
|
||||
<div id="info">
|
||||
<% if (! $c->session->{PwdSet} ) { %>
|
||||
<div class="sme-error"><h5>
|
||||
@@ -8,9 +9,17 @@
|
||||
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>
|
||||
<% my $curdate = strftime '%Y%m%d', localtime; %>
|
||||
<% if ( "$curdate" >= "20290531" ) { %>
|
||||
<div class="sme-error"><h5>
|
||||
URGENT NOTICE: As per May 31st 2029, SME Server 11 is obsolete, and potentially INSECURE. NO support will be offered for any issue found with this installed version.
|
||||
Please migrate IMMEDIATELY to Koozali SME Server 12 or higher version. Failure to upgrade may lead to the compromise of this server.
|
||||
</br>Please, consult <a href="https://wiki.koozali.org/SME_Server:Download" target="_blank">https://wiki.koozali.org/SME_Server:Download</a> to get the latest version
|
||||
</h5></div>
|
||||
<% } %>
|
||||
</div>
|
@@ -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
|
@@ -1,45 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
%#
|
||||
<div id="Letsencrypt-CHECKALLDOMAINS" class="partial Letsencrypt-CHECKALLDOMAINS">
|
||||
<script>
|
||||
window.onload = function() {
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('lets_APPLY');
|
||||
%= form_for "letsencryptu" => (method => 'POST') => begin
|
||||
% param 'trt' => $lets_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $lets_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1 class='head'><%=l('lets_Check_all_domains')%></h1>
|
||||
|
||||
<h2 class='subh'><%=l('lets_Loop_through_checking_the_letsencrypt')%></h2>
|
||||
|
||||
<span class=label>
|
||||
%=l('lets_All_domains_check_result')
|
||||
</span><span class=data>
|
||||
% param 'AllDomainsCheck' => $lets_data->{AllDomainsCheck} unless param 'AllDomainsCheck';
|
||||
%= text_area 'AllDomainsCheck', cols=>40, rows=>10, Readonly=>'true'
|
||||
</span><br>
|
||||
|
||||
<span class='data'>
|
||||
%my $back_text = l('lets_Back'); # Localized text
|
||||
%my $actionBack = qq{
|
||||
% <a href="letsencryptd">
|
||||
% <input class='action back' type='submit' value='$back_text'>
|
||||
% </a>
|
||||
%};
|
||||
<%= $c->render_to_string(inline => $actionBack) %>
|
||||
</span>
|
||||
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
@@ -1,45 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
%#
|
||||
<div id="Letsencrypt-CHECKALLENABLEDDOMAINS" class="partial Letsencrypt-CHECKALLENABLEDDOMAINS">
|
||||
<script>
|
||||
window.onload = function() {
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('lets_APPLY');
|
||||
%= form_for "letsencryptu" => (method => 'POST') => begin
|
||||
% param 'trt' => $lets_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $lets_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1 class='head'><%=l('lets_Check_all_enabled_domains')%></h1>
|
||||
|
||||
<h2 class='subh'><%=l('lets_Loop_through_checking_the_letsencrypt')%></h2>
|
||||
|
||||
<span class=label>
|
||||
%=l('lets_Enabled_domains_check_result')
|
||||
</span><span class=data>
|
||||
% param 'EnabledDomainsCheck' => $lets_data->{EnabledDomainsCheck} unless param 'EnabledDomainsCheck';
|
||||
%= text_area 'EnabledDomainsCheck', cols=>40, rows=>10, Readonly=>'true'
|
||||
</span><br>
|
||||
|
||||
<span class='data'>
|
||||
%my $back_text = l('lets_Back'); # Localized text
|
||||
%my $actionBack = qq{
|
||||
% <a href="letsencryptd">
|
||||
% <input class='action back' type='submit' value='$back_text'>
|
||||
% </a>
|
||||
%};
|
||||
<%= $c->render_to_string(inline => $actionBack) %>
|
||||
</span>
|
||||
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
@@ -1,52 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
%#
|
||||
<div id="Letsencrypt-CHECKONEDOMAIN" class="partial Letsencrypt-CHECKONEDOMAIN">
|
||||
<script>
|
||||
window.onload = function() {
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('lets_APPLY');
|
||||
%= form_for "letsencryptu" => (method => 'POST') => begin
|
||||
% param 'trt' => $lets_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $lets_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h1 class='head'><%=l('lets_Check_just_one_domain')%></h1>
|
||||
|
||||
<h2 class='subh'><%=l('lets_Loop_through_and_check_the')%></h2>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_Domains_name')
|
||||
</span><span class=data>
|
||||
% param 'OneDomainToCheck' => $lets_data->{OneDomainToCheck} unless param 'OneDomainToCheck';
|
||||
%= text_field 'OneDomainToCheck', size => '50', class => 'textinput OneDomainToCheck' , pattern=>'.*' , placeholder=>'OneDomainToCheck', Readonly=>'true'
|
||||
<br></span></p>
|
||||
|
||||
<span class=label>
|
||||
%=l('lets_One_domain_check_result')
|
||||
</span><span class=data>
|
||||
% param 'OneDomainsCheck' => $lets_data->{OneDomainsCheck} unless param 'OneDomainsCheck';
|
||||
%= text_area 'OneDomainsCheck', cols=>40, rows=>10, Readonly=>'true'
|
||||
</span><br>
|
||||
|
||||
<span class='data'>
|
||||
%my $back_text = l('lets_Back'); # Localized text
|
||||
%my $actionBack = qq{
|
||||
% <a href="letsencryptd">
|
||||
% <input class='action back' type='submit' value='$back_text'>
|
||||
% </a>
|
||||
%};
|
||||
<%= $c->render_to_string(inline => $actionBack) %>
|
||||
</span>
|
||||
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
@@ -1,126 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
%#
|
||||
<div id="Letsencrypt-LIST" class="partial Letsencrypt-LIST">
|
||||
<script>
|
||||
window.onload = function() {
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('lets_APPLY');
|
||||
%= form_for "letsencryptu" => (method => 'POST') => begin
|
||||
% param 'trt' => $lets_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $lets_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<div class=inline-buttons>
|
||||
|
||||
|
||||
<a href='letsencryptd?trt=PARAMS' class='link link2'>
|
||||
%= l('lets_CONFIG')
|
||||
</a>
|
||||
%#= link_to l('lets_CONFIG'), 'letsencryptd?trt=PARAMS' , class=>'link link2'
|
||||
|
||||
|
||||
<a href='letsencryptd?trt=CHECKALLDOMAINS' class='link link3'>
|
||||
%= l('lets_CHECK_ALL_DOMAINS')
|
||||
</a>
|
||||
%#= link_to l('lets_CHECK_ALL_DOMAINS'), 'letsencryptd?trt=CHECKALLDOMAINS' , class=>'link link3'
|
||||
|
||||
|
||||
<a href='letsencryptd?trt=CHECKALLENABLEDDOMAINS' class='link link4'>
|
||||
%= l('lets_CHECK_ALL_ENABLED_DOMAINS')
|
||||
</a>
|
||||
%#= link_to l('lets_CHECK_ALL_ENABLED_DOMAINS'), 'letsencryptd?trt=CHECKALLENABLEDDOMAINS' , class=>'link link4'
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h2 class='subh2'><%=l('lets_For_this_Server')%></h2>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_Internal_IP')
|
||||
</span><span class=data>
|
||||
% param 'InternalIP' => $lets_data->{InternalIP} unless param 'InternalIP';
|
||||
%= text_field 'InternalIP', size => '50', class => 'textinput InternalIP' , pattern=>'.*' , placeholder=>'InternalIP', Readonly=>'true'
|
||||
<br></span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_External_Interface_IP')
|
||||
</span><span class=data>
|
||||
% param 'ExternalIP' => $lets_data->{ExternalIP} unless param 'ExternalIP';
|
||||
%= text_field 'ExternalIP', size => '50', class => 'textinput ExternalIP' , pattern=>'.*' , placeholder=>'ExternalIP', Readonly=>'true'
|
||||
<br></span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_Internet_IP')
|
||||
</span><span class=data>
|
||||
% param 'InternetIP' => $lets_data->{InternetIP} unless param 'InternetIP';
|
||||
%= text_field 'InternetIP', size => '50', class => 'textinput InternetIP' , pattern=>'.*' , placeholder=>'InternetIP', Readonly=>'true'
|
||||
<br></span></p>
|
||||
|
||||
<h2 class='subh3'><%=l('lets_Current_certificate_details')%></h2>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_Issuer')
|
||||
</span><span class=data>
|
||||
% param 'Issuer' => $lets_data->{Issuer} unless param 'Issuer';
|
||||
%= text_field 'Issuer', size => '50', class => 'textinput Issuer' , pattern=>'.*' , placeholder=>'Issuer', Readonly=>'true'
|
||||
<br></span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_Expiry')
|
||||
</span><span class=data>
|
||||
% param 'Expiry' => $lets_data->{Expiry} unless param 'Expiry';
|
||||
%= text_field 'Expiry', size => '50', class => 'textinput Expiry' , pattern=>'.*' , placeholder=>'Expiry', Readonly=>'true'
|
||||
<br></span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_Not_Before')
|
||||
</span><span class=data>
|
||||
% param 'NotBefore' => $lets_data->{NotBefore} unless param 'NotBefore';
|
||||
%= text_field 'NotBefore', size => '50', class => 'textinput NotBefore' , pattern=>'.*' , placeholder=>'NotBefore', Readonly=>'true'
|
||||
<br></span></p>
|
||||
|
||||
<h2 class='subh4'><%=l('lets_List_of_Domains_and_Hosts')%></h2>
|
||||
|
||||
<br /><table class="sme-border TableSort sme-table tabl1 ">
|
||||
<thead class='tabl1'>
|
||||
<tr table-head-row>
|
||||
<th class='sme-border table-head-col table-head-col-Domain name / HOSTNAME '><%=l('lets_Domain_name_/_HOSTNAME')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Brief description '><%=l('lets_Brief_description')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-Content '><%=l('lets_Content')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-LABEL_NAMESERVERS '><%=l('lets_LABEL_NAMESERVERS')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-LABEL_POINT '><%=l('lets_LABEL_POINT')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-LABEL_LECERT '><%=l('lets_LABEL_LECERT')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-IS_IN_CERT '><%=l('lets_IS_IN_CERT')%></th>
|
||||
<th class='sme-border table-head-col table-head-col-CHECK '><%=l('lets_CHECK')%></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='tabl1'>
|
||||
% my $control_data = $c->stash('DomainList');
|
||||
% foreach my $row (@$control_data) {
|
||||
<tr class='table-row'>
|
||||
<td class='sme-border table-col table-col-Table1-Domain name / HOSTNAME'><%=$c->render_to_string(inline=>$row->{'Table1-Domain name / HOSTNAME'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-Brief description'><%=$c->render_to_string(inline=>$row->{'Table1-Brief description'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-Content'><%=$c->render_to_string(inline=>$row->{'Table1-Content'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-LABEL_NAMESERVERS'><%=$c->render_to_string(inline=>$row->{'Table1-LABEL_NAMESERVERS'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-LABEL_POINT'><%=$c->render_to_string(inline=>$row->{'Table1-LABEL_POINT'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-LABEL_LECERT'><%=$c->render_to_string(inline=>$row->{'Table1-LABEL_LECERT'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-IS_IN_CERT'><%=$c->render_to_string(inline=>$row->{'Table1-IS_IN_CERT'})%></td>
|
||||
<td class='sme-border table-col table-col-Table1-CHECK'><%=$c->render_to_string(inline=>$row->{'Table1-CHECK'})%></td>
|
||||
</tr>
|
||||
%}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
@@ -1,97 +0,0 @@
|
||||
%#
|
||||
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
|
||||
%#
|
||||
<div id="Letsencrypt-PARAMS" class="partial Letsencrypt-PARAMS">
|
||||
<script>
|
||||
window.onload = function() {
|
||||
SelectInput();
|
||||
};
|
||||
</script>
|
||||
% if ($config->{debug} == 1) {
|
||||
<pre>
|
||||
%= dumper $lets_data
|
||||
</pre>
|
||||
% }
|
||||
% my $btn = l('lets_APPLY');
|
||||
%= form_for "letsencryptu" => (method => 'POST') => begin
|
||||
% param 'trt' => $lets_data->{trt} unless param 'trt';
|
||||
%= hidden_field 'trt' => $lets_data->{trt}
|
||||
%# Inputs etc in here.
|
||||
|
||||
<h2 class='subh'><%=l('lets_Manage_letsencrypt-config_settings:')%></h2>
|
||||
|
||||
<p class='paragraph para1'>
|
||||
%=l('lets_CONFIG_LETSENCRYPT')
|
||||
</p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_SERVICE_STATUS')
|
||||
</span><span class=data>
|
||||
% my @status_options = [['Disabled' => 'disabled'], ['Enabled' => 'enabled'], ['TEST' => 'test']];
|
||||
% param 'status' => $lets_data->{status} unless param 'status';
|
||||
%= select_field 'status' => @status_options, class => 'input'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_HOOKSCRIPT_STATUS')
|
||||
</span><span class=data>
|
||||
% my @hookScript_options = [['Disabled' => 'disabled'], ['Enabled' => 'enabled']];
|
||||
% param 'hookScript' => $lets_data->{hookScript} unless param 'hookScript';
|
||||
%= select_field 'hookScript' => @hookScript_options, class => 'input'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_HOSTOVERRIDE_STATUS')
|
||||
</span><span class=data>
|
||||
% my @hostOverride_options = [['Disabled' => 'disabled'], ['Yes' => 'yes']];
|
||||
% param 'hostOverride' => $lets_data->{hostOverride} unless param 'hostOverride';
|
||||
%= select_field 'hostOverride' => @hostOverride_options, class => 'input'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_ACCEPT_TERMS_STATUS')
|
||||
</span><span class=data>
|
||||
% my @ACCEPT_TERMS_options = [['Disabled' => 'disabled'], ['Yes' => 'yes']];
|
||||
% param 'ACCEPT_TERMS' => $lets_data->{ACCEPT_TERMS} unless param 'ACCEPT_TERMS';
|
||||
%= select_field 'ACCEPT_TERMS' => @ACCEPT_TERMS_options, class => 'input'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_API_STATUS')
|
||||
</span><span class=data>
|
||||
% my @API_options = [['2' => '2']];
|
||||
% param 'API' => $lets_data->{API} unless param 'API';
|
||||
%= select_field 'API' => @API_options, class => 'input'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_KEYSIZE_STATUS')
|
||||
</span><span class=data>
|
||||
% my @keysize_options = [['2048' => '2048'], ['3072' => '3072'], ['4096' => '4096']];
|
||||
% param 'keysize' => $lets_data->{keysize} unless param 'keysize';
|
||||
%= select_field 'keysize' => @keysize_options, class => 'input'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_CONFIGUREMODE_STATUS')
|
||||
</span><span class=data>
|
||||
% my @configure_options = [['ALL' => 'all'], ['Domains' => 'domains'], ['HOSTS' => 'hosts'], ['NONE' => 'none']];
|
||||
% param 'configure' => $lets_data->{configure} unless param 'configure';
|
||||
%= select_field 'configure' => @configure_options, class => 'input'
|
||||
<br></span> </p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l('lets_EMAIL')
|
||||
</span><span class=data>
|
||||
% param 'email' => $lets_data->{email} unless param 'email';
|
||||
%=email_field 'email', class => 'emai8'
|
||||
</span></p>
|
||||
|
||||
|
||||
<span class='data'>
|
||||
%= submit_button l('lets_Save'), class => 'action subm9'
|
||||
</span>
|
||||
|
||||
%# Probably finally by a submit.
|
||||
%end
|
||||
</div>
|
@@ -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")
|
||||
|
@@ -59,11 +59,11 @@
|
||||
%= t td => (class => 'sme-border') => "$first $last"
|
||||
%= t td => (class => 'sme-border') => $vpnaccess
|
||||
%= t td => (class => 'sme-border') => $fwd
|
||||
%my ($actionModify, $actionLock, $actionResetPw, $actionRemove,$actionroundcube) = ' ';
|
||||
%my $modify_text = l('MODIFY'); # Localized text
|
||||
%my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
%my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
%my $password_text = l("PASSWORD_RESET");
|
||||
% my ($actionModify, $actionLock, $actionResetPw, $actionRemove,$actionroundcube) = ' ';
|
||||
% my $modify_text = l('MODIFY'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
% my $password_text = l("PASSWORD_RESET");
|
||||
%if ($useraccounts_user_name eq 'admin') {
|
||||
%$actionModify = qq{
|
||||
%<a href="useraccountsd?CsrfDef=$csrf_token&trt=UPS&user=$useraccounts_user_name">
|
||||
@@ -98,9 +98,9 @@
|
||||
%</a>
|
||||
%};
|
||||
%} elsif ($useraccounts_user_name ne 'admin') {
|
||||
%my $lock_text = l('ACCOUNT LOCKED'); # Localized text
|
||||
%my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
%my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
% my $lock_text = l('ACCOUNT LOCKED'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
%$actionLock = qq{
|
||||
%<a href="useraccountsd?CsrfDef=$csrf_token&trt=LCK&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-lock-button' title='$lock_text' >
|
||||
@@ -117,8 +117,8 @@
|
||||
%};
|
||||
%}
|
||||
%if ( $removable eq 'yes' ) {
|
||||
%my $remove_text = l('REMOVE'); # Localized text
|
||||
%my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% my $remove_text = l('REMOVE'); # Localized text
|
||||
% my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
%$actionRemove = qq{
|
||||
%<a href="useraccountsd?CsrfDef=$csrf_token&trt=DEL&user=$useraccounts_user_name">
|
||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
||||
@@ -128,13 +128,12 @@
|
||||
%};
|
||||
%}
|
||||
|
||||
%my $thisdomain = session 'SystemName';
|
||||
%$thisdomain .= ".".session 'DomainName';
|
||||
%my $roundcube_text = l('Webmail'); # Localized text
|
||||
%my $csrf_token = "TOKEN"; # CSRF token for security
|
||||
%my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
%$actionroundcube = qq{
|
||||
%<a href="roundcubepanel?CsrfDef=$csrf_token&url=https://$thisdomain/roundcube?_user=$useraccounts_user_name">
|
||||
% my $thisdomain = $c->req->url->to_abs->host;
|
||||
% my $roundcube_text = l('Webmail'); # Localized text
|
||||
% $csrf_token = "TOKEN"; # CSRF token for security
|
||||
% $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
|
||||
% $actionroundcube = qq{
|
||||
%<a href="roundcubepanel?CsrfDef=$csrf_token&url=https://$thisdomain/roundcube?_user=$useraccounts_user_name&height=600px">
|
||||
% <button type='button' class='sme-email-button' title='$roundcube_text' >
|
||||
% $roundcube_text
|
||||
% </button>
|
||||
@@ -156,4 +155,4 @@
|
||||
|
||||
%= hidden_field 'trt' => $usr_datas->{trt}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -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
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user