Compare commits

...

16 Commits

Author SHA1 Message Date
a62968d2d9 * Tue Jan 28 2025 Brian Read <brianr@koozali.org> 11.0.0-47.sme
- Temp (we hope) remove CSRF protection plugin  [SME: ]
- Fix comparison in footer with config->mode
2025-01-28 15:23:39 +00:00
0e777fd51a * Tue Jan 28 2025 Brian Read <brianr@koozali.org> 11.0.0-46.sme
- Adjust conditions for showing "Reconfigure required" to only check UnSavedChanges DB entry [SME: 12891]
- Add indication of developement mode in footer
2025-01-28 14:02:31 +00:00
eee68afa2b Various - space in reboot panel, max 15 chars for workgroup name, add action for recofigure, remove call to TAI64 in viewlogfiles, add requires for multi-language locales 2025-01-27 15:16:21 +00:00
c2d677594b Add check for 15 characters netbios name in workgroup panel 2025-01-25 14:41:21 +00:00
f6fe2216a0 Add some space in the reboot/reconf/shutdown panel 2025-01-25 10:40:08 +00:00
6d3f8f48c2 * Fri Jan 24 2025 Brian Read <brianr@koozali.org> 11.0.0-44.sme
- Change to network-online for systemd startup to make sure network is up [SME: 12758]
2025-01-24 19:04:28 +00:00
f8d9ec34e3 Fix red error message when goes over one line 2025-01-23 15:53:51 +00:00
835d439e42 mojo update, version in footer, password setting in useraccounts 2025-01-23 15:03:28 +00:00
4797a1b189 Add mojo version to footer 2025-01-23 09:59:29 +00:00
1e4ec809b5 Update spec file to -43 2025-01-23 07:34:50 +00:00
d1197f55cf Update letsencrypt dealing with pointer to hash of params 2025-01-23 07:12:01 +00:00
b5d6de3bcf Update to work for Mojo 9.39 - config accessed through plugin not global hash 2025-01-22 11:53:21 +00:00
ec4f515012 * Fri Jan 17 2025 Brian Read <brianr@koozali.org> 11.0.0-42.sme
- Implement password visibility icon - [SME: 12803]
2025-01-17 12:04:36 +00:00
9b03d377e2 * Wed Jan 15 2025 Brian Read <brianr@koozali.org> 11.0.0-41.sme
- Add journal files to those not viewable [SME: 12870]
2025-01-15 18:44:48 +00:00
957d2ada21 Add journal files to list of files in /var/log NOT viewable 2025-01-15 18:39:22 +00:00
be49419eba * Wed Jan 15 2025 Brian Read <brianr@koozali.org> 11.0.0-40.sme
- Comment out missing prefix message in navigation2-conf action and re-format it with perltidy [SME: 127672]
2025-01-15 11:41:22 +00:00
88 changed files with 420 additions and 304 deletions

View File

@@ -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");

View File

@@ -0,0 +1 @@
-pbp -nst -nse -l=120 -ce -csc -pt=2 -kbl=0 -mbl=1 -lbl=1

View File

@@ -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

View File

@@ -0,0 +1,3 @@
#!/bin/bash
/usr/sbin/e-smith/signal-event post-upgrade
/usr/sbin/e-smith/signal-event reboot

View File

@@ -80,6 +80,7 @@ a:active { color: #606060; text-decoration: none; }
.sme-error {
color: red;
display:block;
background-color: #ffffff;
border-width: 1px;
border-style: solid;
@@ -93,6 +94,7 @@ a:active { color: #606060; text-decoration: none; }
.sme-warning {
color: orange;
display:block;
background-color: #ffffff;
border-width: 1px;
border-style: solid;
@@ -276,4 +278,4 @@ a.menu-title {
/*end*/
EOF
}
}

View File

@@ -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

View File

@@ -224,12 +224,12 @@ sub setup_plugins {
# CSRF protection if production mode
# $self->plugin('Mojolicious::Plugin::CSRFDefender' => {
# Adapted plugin for use with GET method
$self->plugin('SrvMngr::Plugin::CSRFDefender' => {
onetime => 1,
error_status => 400,
error_content => 'Error: CSRF token is invalid or outdated'
#$self->plugin('SrvMngr::Plugin::CSRFDefender' => {
#onetime => 1,
#error_status => 400,
#error_content => 'Error: CSRF token is invalid or outdated'
#error_template => 'csrf_400'
}) if ( $self->mode eq 'production' );
#}) if ( $self->mode eq 'production' );
$self->plugin('SrvMngr::Plugin::I18N' => {namespace => 'SrvMngr::I18N', default => 'en'});
@@ -866,4 +866,4 @@ sub get_reg_mask {
}
1;
1;

View File

@@ -354,7 +354,7 @@ sub get_selected_LIST {
my $selected = shift; #Parameter is name of selected row.
my $is_new_record = shift; #Indicates new record required (defaults)
my %ret = {};
return $ret;
return %ret;
} ## end sub get_selected_LIST
sub get_selected_PARAMS {
@@ -362,7 +362,7 @@ sub get_selected_PARAMS {
my $selected = shift; #Parameter is name of selected row.
my $is_new_record = shift; #Indicates new record required (defaults)
my %ret = {};
return $ret;
return %ret;
} ## end sub get_selected_PARAMS
sub get_selected_CHECKALLDOMAINS {
@@ -370,7 +370,7 @@ sub get_selected_CHECKALLDOMAINS {
my $selected = shift; #Parameter is name of selected row.
my $is_new_record = shift; #Indicates new record required (defaults)
my %ret = {};
return $ret;
return %ret;
} ## end sub get_selected_CHECKALLDOMAINS
sub get_selected_CHECKALLENABLEDDOMAINS {
@@ -378,7 +378,7 @@ sub get_selected_CHECKALLENABLEDDOMAINS {
my $selected = shift; #Parameter is name of selected row.
my $is_new_record = shift; #Indicates new record required (defaults)
my %ret = {};
return $ret;
return %ret;
} ## end sub get_selected_CHECKALLENABLEDDOMAINS
sub get_selected_CHECKONEDOMAIN {
@@ -386,7 +386,7 @@ sub get_selected_CHECKONEDOMAIN {
my $selected = shift; #Parameter is name of selected row.
my $is_new_record = shift; #Indicates new record required (defaults)
my %ret = {};
return $ret;
return %ret;
} ## end sub get_selected_CHECKONEDOMAIN
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
@@ -563,4 +563,4 @@ sub update_enabled_domains {
my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" enabled `;
return $output || "-empty-";
} ## end sub update_enabled_domains
1;
1;

View File

@@ -305,10 +305,10 @@ sub do_display {
my $modul = "";
# Accessing all parameters
my %params = $c->req->params->to_hash;
my $params = $c->req->params->to_hash;
# Get number of parameters
my $num_params = keys %params;
my $num_params = scalar keys %$params;
#Tag as Post or Get (ie. create new entry or edit existing one
my $is_new_record = ($c->req->method() eq 'POST');
@@ -445,4 +445,4 @@ sub do_display {
);
$c->render(template => "letsencrypt");
} ## end sub do_display
1;
1;

View File

@@ -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);

View File

@@ -34,6 +34,7 @@ our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
sub main {
my $c = shift;
$c->app->log->info($c->log_req);
my $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
my $notif = '';
my %usr_datas = ();
my $title = $c->l('usr_FORM_TITLE');
@@ -394,10 +395,12 @@ sub remove_account {
sub reset_password {
my ($c, $user, $passw1) = @_;
unless (($user) = ($user =~ /^(\w[\-\w_\.]*)$/)) {
return $c->l('usr_TAINTED_USER');
}
$user = $1;
my $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
my $acct = $adb->get($user);
if ($acct->prop('type') eq "user") {
@@ -445,10 +448,9 @@ sub validate_password {
}
$reason ||= "Software error: password check failed";
return "OK" if ($reason eq "ok");
return
$c->l("Bad Password Choice") . ": "
return $c->l("Bad Password Choice") . ": "
. $c->l("The password you have chosen is not a good choice, because") . " "
. $c->($reason) . ".";
. $c->l($reason) . ".";
} ## end sub validate_password
sub emailForward_list {
@@ -817,4 +819,4 @@ sub system_change_password {
return $c->l("Error occurred while modifying password for admin.", 'First');
}
} ## end sub system_change_password
1
1

View File

@@ -17,7 +17,7 @@ use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);
use esmith::ConfigDB;
use Time::TAI64;
#use Time::TAI64;
use File::Basename;
use HTML::Entities;
use esmith::FormMagick qw(gen_locale_date_string);
@@ -104,10 +104,11 @@ sub do_action {
sub timestamp2local {
$_ = shift;
if (/^(\@[0-9a-f]{24})(.*)/s) {
return Time::TAI64::tai64nlocal($1) . $2;
} elsif (/^([0-9]{10}\.[0-9]{3})(.*)/s) {
return localtime($1) . $2;
#if (/^(\@[0-9a-f]{24})(.*)/s) {
# return Time::TAI64::tai64nlocal($1) . $2;
#} els
if (/^([0-9]{10}\.[0-9]{3})(.*)/s) {
return localtime($1) . $2;
}
return $_;
} ## end sub timestamp2local
@@ -128,6 +129,7 @@ sub findlogFiles {
# or not log files
foreach (
qw(
journal
lastlog
btmp$
wtmp
@@ -293,4 +295,4 @@ sub download_logFile {
);
return undef;
} ## end sub download_logFile
1;
1;

View File

@@ -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;

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -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);
});
});

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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}

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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} %>

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -7,7 +7,7 @@
%= stylesheet '/css/letsencrypt.css'
<div id="module" class="module Letsencrypt-panel">
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<pre>
%= dumper $c->current_route
%= dumper $lets_data->{trt}

View File

@@ -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")

View File

@@ -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

View File

@@ -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>

View File

@@ -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'

View File

@@ -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>

View File

@@ -8,9 +8,9 @@
Warning: a reconfigure and reboot is required before proceeding! Failure to do so now
may leave your system in an unknown state!</h5></div>
<% } %>
<% if ( $c->session->{Access} eq 'public' && (($config->{debug} ne '0') || ($config->{mode} ne 'production')) ) { %>
<% if ( $c->session->{Access} eq 'public' && ((config->{debug} ne '0') || (config->{mode} ne 'production')) ) { %>
<div class="sme-error"><h5>
Warning: Development or debug mode enabled AND public access is offered !
</h5></div>
<% } %>
</div>
</div>

View File

@@ -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

View File

@@ -7,7 +7,7 @@
SelectInput();
};
</script>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<pre>
%= dumper $lets_data
</pre>

View File

@@ -7,7 +7,7 @@
SelectInput();
};
</script>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<pre>
%= dumper $lets_data
</pre>

View File

@@ -7,7 +7,7 @@
SelectInput();
};
</script>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<pre>
%= dumper $lets_data
</pre>

View File

@@ -7,7 +7,7 @@
SelectInput();
};
</script>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<pre>
%= dumper $lets_data
</pre>

View File

@@ -7,7 +7,7 @@
SelectInput();
};
</script>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<pre>
%= dumper $lets_data
</pre>

View File

@@ -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")

View File

@@ -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")

View File

@@ -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>

View File

@@ -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")

View File

@@ -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")

View File

@@ -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>

View File

@@ -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>

View File

@@ -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")

View File

@@ -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

View File

@@ -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} %>

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -4,7 +4,7 @@
<div id='module' class='module reboot-panel'>
%if ($config->{debug} == 1) {
%if (config->{debug} == 1) {
<p>
(DBG)route: <%= $c->current_route %><br>
</p>
@@ -20,16 +20,15 @@
<p>
%= $c->render_to_string(inline => $c->l('rbo_DESCRIPTION'))
<br>
<br><br>
<span class=label>
%=l 'rbo_LABEL_REBOOT'
</span>
<span class=data>
%= select_field 'function' => $c->rebootFunction_list()
</span>
</p>
</p><br>
%= submit_button "$btn", class => 'action'
@@ -38,4 +37,4 @@
%= hidden_field 'debug' => '1'
</div>
%end
%end

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module remoteaccess-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $rma_datas

View File

@@ -4,7 +4,7 @@
<div id='roundcube' class='roundcube roundcube-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
</p>

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module useraccounts-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $usr_datas

View File

@@ -4,7 +4,7 @@
<div id='module' class='module userpassword-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $pwd_datas
@@ -47,7 +47,7 @@
<p><span class=label>
%= l 'pwd_PASSWORD_OLD'
</span><span class=data>
%= password_field 'Oldpass', class => 'input'
%= password_field 'Oldpass', class => 'input', class=>'sme-password'
</span>
<br><br></p>
% }
@@ -55,14 +55,14 @@
<p><span class=label>
%=l 'pwd_PASSWORD_NEW'
</span><span class=data>
%= password_field 'Pass', class => 'input'
%= password_field 'Pass', class => 'input', class=>'sme-password'
</span>
<br><br></p>
<p><span class=label>
%=l 'pwd_PASSWORD_VERIFY_NEW'
</span><span class=data>
%= password_field 'Passverify', class => 'input'
%= password_field 'Passverify', class => 'input', class=>'sme-password'
</span>
<br><br></p>
@@ -75,4 +75,4 @@
</div>
% end
% end

View File

@@ -2,7 +2,7 @@
% content_for 'module' => begin
<div id='module' class='module viewlogfiles-panel'>
%if ($config->{debug} == 1) {
%if (config->{debug} == 1) {
<p>
(DBG)route: <%= $c->current_route %><br>
</p>

View File

@@ -4,7 +4,7 @@
<div id='module' class='module viewlogfiles2-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
(DBG)route: <%= $c->current_route %><br>
(DBG)trt: <%= $log_datas->{trt} %><br>

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module workgroup-panel'>
%if ($config->{debug} == 1) {
%if (config->{debug} == 1) {
<p>
(DBG)route: <%= $c->current_route %><br>
(DBG)pdc: <%= $wkg_datas->{ServerRole}%><br>
@@ -24,7 +24,7 @@
<span class=label>
%=l 'wkg_LABEL_WORKGROUP', class => 'label'
</span><span class=data>
%= text_field 'Workgroup' => $wkg_datas->{Workgroup}, class => 'input'
%= text_field 'Workgroup' => $wkg_datas->{Workgroup}, class => 'input' , pattern=>".{1,15}", title=>"Limited to 15 characters by the NETBIOS"
</span>
</p>
<p>
@@ -63,4 +63,4 @@
% end
</div>
%end
%end

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module yum-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $yum_datas

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module yumconfig-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $yum_datas

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module yuminstall-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $yum_datas

View File

@@ -7,7 +7,7 @@
% content_for 'module' => begin
<div id='module' class='module yumlogfile-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $yum_datas

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module yumpostupg-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $yum_datas

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module yumremove-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $yum_datas

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='module' class='module yumupdate-panel'>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
%= dumper $yum_datas

View File

@@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2
%define name smeserver-manager
Name: %{name}
%define version 11.0.0
%define release 39
%define release 47
Version: %{version}
Release: %{release}%{?dist}
License: GPL
@@ -26,19 +26,47 @@ Requires: smeserver-lib >= 1.18.0-26
Requires: smeserver-manager >= 2.4.0-22
Requires: smeserver-apache >= 2.6.0-19
Requires: smeserver-php >= 3.0.0-43
Requires: perl(Mojolicious) >= 7.56
#Requires: smeserver-manager-locale >= 11.0.0
Requires: perl(Mojolicious) >= 8.42
Requires: perl(Mojolicious::Plugin::I18N) >= 1.6
Requires: perl(Mojolicious::Plugin::RenderFile) >= 0.12
Requires: perl(Mojolicious::Plugin::CSRFDefender) >= 0.0.8
Requires: perl(Net::Netmask) >= 1.9
Requires: perl(DBM::Deep) >= 2.0011-1
Requires: perl(Mojo::JWT) >= 0.08-1
#Requires: perl(Time::TAI64) >= 2.11
Requires: mutt >= 1.5.21
Requires: smeserver-manager-jsquery >= 1.0
Requires: smeserver-lib >= 11.0
Requires: smeserver-certificates >= 11.0
#Requires: js-jquery > 2.2.4-3 (optional)
Requires: smeserver-manager-locale-bg
Requires: smeserver-manager-locale-da
Requires: smeserver-manager-locale-de
Requires: smeserver-manager-locale-el
Requires: smeserver-manager-locale-es
Requires: smeserver-manager-locale-et
Requires: smeserver-manager-locale-fr
Requires: smeserver-manager-locale-he
Requires: smeserver-manager-locale-hu
Requires: smeserver-manager-locale-id
Requires: smeserver-manager-locale-it
Requires: smeserver-manager-locale-ja
Requires: smeserver-manager-locale-nb
Requires: smeserver-manager-locale-nl
Requires: smeserver-manager-locale-pl
Requires: smeserver-manager-locale-pt
Requires: smeserver-manager-locale-pt_BR
Requires: smeserver-manager-locale-ro
Requires: smeserver-manager-locale-ru
Requires: smeserver-manager-locale-sl
Requires: smeserver-manager-locale-sv
Requires: smeserver-manager-locale-th
Requires: smeserver-manager-locale-tr
Requires: smeserver-manager-locale-zh_CN
Requires: smeserver-manager-locale-zh_TW
Provides: server-manager
AutoReqProv: no
@@ -115,6 +143,39 @@ true
%defattr(-,root,root)
%changelog
* Tue Jan 28 2025 Brian Read <brianr@koozali.org> 11.0.0-47.sme
- Temp (we hope) remove CSRF protection plugin [SME: ]
- Fix comparison in footer with config->mode
* Tue Jan 28 2025 Brian Read <brianr@koozali.org> 11.0.0-46.sme
- Adjust conditions for showing "Reconfigure required" to only check UnSavedChanges DB entry [SME: 12891]
- Add indication of development mode in footer
* Sat Jan 25 2025 Brian Read <brianr@koozali.org> 11.0.0-45.sme
- Add some space in the reboot/reconf/shutdown panel [SME: ]
- Add check for 15 characters netbios name in workgroup panel [SME: ]
- Add action for post-upgrade-and-reboot for reconfigure panel [SME: 12865]
- Remove call to TAI64 in viewlogfiles as qmail specific format [SME: 12889]
- Add requires to pull in all the locale translation [SME: 12757]
* Fri Jan 24 2025 Brian Read <brianr@koozali.org> 11.0.0-44.sme
- Change to network-online for systemd startup to make sure network is up [SME: 12758]
* Thu Jan 23 2025 Brian Read <brianr@koozali.org> 11.0.0-43.sme
- fix access to config file though config plugin for mojo 9.39 [SME: 12885]
- Fix password setting for useraccounts and also adjust DB opens
- Add mojo version to footer for logged in [SME: 12886]
- Fix up css for red error message when multiline [SME: 12802]
* Fri Jan 17 2025 Brian Read <brianr@koozali.org> 11.0.0-42.sme
- Implement password visibility icon - [SME: 12803]
* Wed Jan 15 2025 Brian Read <brianr@koozali.org> 11.0.0-41.sme
- Add journal files to those not viewable [SME: 12870]
* Wed Jan 15 2025 Brian Read <brianr@koozali.org> 11.0.0-40.sme
- Comment out missing prefix message in navigation2-conf action and re-format it with perltidy [SME: 127672]
* Tue Jan 14 2025 Brian Read <brianr@koozali.org> 11.0.0-39.sme
- Apply perltidy to all Controller files, add .perltidy to directory and .gitignore for .tdy files (just incase) [SME: 12485]