Remove headfings in Error and status and sort out non global opening of DBs

This commit is contained in:
Brian Read 2025-03-31 19:03:54 +01:00
commit 9fe0a050cf
105 changed files with 146 additions and 1239 deletions

0
.gitignore vendored Normal file → Executable file
View File

View File

@ -1,63 +0,0 @@
#
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
#
#
# Routines to be edited by the developer to provide validation for parameters
# and provison of the control data for table(s)
#
use esmith::util;
use esmith::HostsDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
#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_PARAMS {
my $c = shift;
my $prefix_data = shift; #Data hash as parameter
my $ret = 'ok';
return $ret;
}
# Get control data for tables(s)
# Return hash with values from row in which link clicked on table
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;
}
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
sub perform_PARAMS {
my $c = shift;
my $prefix_data = shift; #Data hash as parameter
my $ret = 'ok';
return $ret;
}
sub create_link{
# WIP
my ($c,$route, $panel, $index) = shift;
my $link = "$route?trt=$panel&Selected=$index";
return $link;
}
1;

View File

@ -1,63 +0,0 @@
#
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-18 09:02:36
#
#
# Routines to be edited by the developer to provide validation for parameters
# and provison of the control data for table(s)
# lcPackageName=json5_dict["PackageName"].lower(),
use esmith::HostsDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
#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_PARAMS {
my $c = shift;
my $prefix_data = shift; #Data hash as parameter
my $ret = 'ok';
return $ret;
}
# Get control data for tables(s)
# Return hash with values from row in which link clicked on table
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;
}
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
sub perform_PARAMS {
my $c = shift;
my $prefix_data = shift; #Data hash as parameter
my $ret = 'ok';
return $ret;
}
sub create_link{
# WIP
my ($c,$route, $panel, $index) = shift;
my $link = "$route?trt=$panel&Selected=$index";
return $link;
}
1;

View File

@ -1,243 +0,0 @@
package SrvMngr::Controller::CreateStarterWebsite;
#
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
#
#----------------------------------------------------------------------
# heading : Miscellaneous
# description : Create Starter Website
# navigation : 2000 400
#
# name : createstarterwebsite, method : get, url : /createstarterwebsite, ctlact : CreateStarterWebsite#main
# name : createstarterwebsiteu, method : post, url : /createstarterwebsiteu, ctlact : CreateStarterWebsite#do_update
# name : createstarterwebsited, method : get, url : /createstarterwebsited, ctlact : CreateStarterWebsite#do_display
#
# routes : end
#
# Documentation: https://wiki.contribs.org/CreateStarterWebsite
#----------------------------------------------------------------------
#
# 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::HostsDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
#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");
require '/usr/share/smanager/lib/SrvMngr/Controller/CreateStarterWebsite-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 );
my %csw_data = ();
my $title = $c->l('csw_Create_Starter_Website');
my $modul = '';
$csw_data{'trt'} = 'PARAMS';
#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
# and table control fields
$c->stash(
title => $title,
modul => $modul,
csw_data => \%csw_data
);
$c->render( template => "createstarterwebsite" );
}
# 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 %csw_data = ();
my $title = $c->l('csw_Create_Starter_Website');
# 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}) {
$csw_data{$key} = $value;
}
# the value of trt will tell you which panel has returned
my $trt = $c->param('trt') || 'PARAMS'; #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 'PARAMS'){
#Validate form parameters for panel PARAMS
$ret = $c->validate_PARAMS(\%csw_data);
$thispanel = 'PARAMS';
}
if ($ret ne "ok") {
# return to the panel with error message
$c->stash(error => $c->l($ret));
$c->render("createstarterwebsite");
} else {
#Do whatever is needed, including writing values to the DB
if ($trt eq 'PARAMS'){
#do whatever is required ...
$ret = $c->perform_PARAMS(\%csw_data);
if ($ret ne "ok") {
# return to the panel with error message
$c->stash(error => $c->l($ret));
$c->render("createstarterwebsite");
} else {
$c->stash( success => $c->l('csw_PARAMS_panel_action_was_successful')); #A bit bland - edit it in the lex file
}
}
# and call any signal-events needed
# Setup shared data and call panel
$c->stash(
title => $title,
csw_data => \%csw_data
);
if ('none' eq 'none') {
$csw_data{'trt'} = 'PARAMS';
} else {
$csw_data{'trt'} = 'none';
}
$c->render("createstarterwebsite");
}
}
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 = shift;
$c->app->log->info($c->log_req);
my %csw_data = ();
my $title = $c->l('csw_Create_Starter_Website');
# 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}) {
$csw_data{$key} = $value;
}
# the value of trt will tell you which panel has returned
my $trt = $c->param('trt') || 'PARAMS'; #Indicates where to go now
# Now add in the params from the selected row from the table
my %selectedrow;
if ($trt eq 'PARAMS'){
#Validate form parameters for panel PARAMS
%selectedrow = $c->get_selected_PARAMS($csw_data{'Selected'},$is_new_record);
}
#Copy in the selected row params to the prefix_data hash to pass to the panel
while (my ($key, $value) = each %selectedrow){
$csw_data{$key} = $value;
}
# Where to go now
$csw_data{'trt'} = $trt;
# Data for panel
$c->stash(
title => $title,
csw_data => \%csw_data
);
$c->render("createstarterwebsite");
}
1;

View File

@ -1,101 +0,0 @@
%#
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
%#
<div id="CreateStarterWebsite-PARAMS" class="partial CreateStarterWebsite-PARAMS">
<script>
window.onload = function() {
SelectInput();
};
</script>
<h2>
%= l('csw_Hello_PARAMS');
</h2>
% my $btn = l('csw_APPLY');
%= form_for "CreateStarterWebsited" => (method => 'POST') => begin
% param 'trt' => $csw_data->{trt} unless param 'trt';
%= hidden_field 'trt' => $csw_data->{trt}
%# Inputs etc in here.
<h1 class='head'><%=l('csw_Create_a_starter_website')%></h1>
<h2 class='subh'><%=l('csw_Manage_CreateStarterWebsite_settings:')%></h2>
<p class='paragraph para1'>
%=l('csw_To_create_a_simple_web')
</p>
<p class='paragraph para2'>
%=l('csw_You_can_leave_any_field')
</p>
<p class='paragraph para3'>
%=l('csw_The_text_that_you_enter')
</p>
<p class='paragraph para4'>
%=l('csw_Do_not_use_this_optionif')
</p>
<p><span class=label>
%=l('csw_')
</span><span class=data>
% param 'companyName' => $csw_data->{companyName} unless param 'companyName';
%= text_field 'companyName', size => '50', class => 'textinput companyName' , pattern=>'.*' , placeholder=>'companyName'
<br></span></p>
<p class='paragraph para5'>
%=l('csw_First_header,_typically_used_for')
</p>
<p><span class=label>
%=l('csw_')
</span><span class=data>
% param 'header1' => $csw_data->{header1} unless param 'header1';
%= text_field 'header1', size => '50', class => 'textinput header1' , pattern=>'.*' , placeholder=>'header1'
<br></span></p>
<p class='paragraph para6'>
%=l('csw_Text_following_first_header,_typically')
</p>
<span class=label>
%=l('csw_')
</span><span class=data>
% param 'text1' => $csw_data->{text1} unless param 'text1';
%= text_area 'text1', cols=>40, rows=>10
</span><br>
<p class='paragraph para7'>
%=l('csw_Second_header,_typically_used_for')
</p>
<p><span class=label>
%=l('csw_')
</span><span class=data>
% param 'header2' => $csw_data->{header2} unless param 'header2';
%= text_field 'header2', size => '50', class => 'textinput header2' , pattern=>'.*' , placeholder=>'header2'
<br></span></p>
<p class='paragraph para8'>
%=l('csw_Text_following_second_header,_typically')
</p>
<span class=label>
%=l('csw_')
</span><span class=data>
% param 'text2' => $csw_data->{text2} unless param 'text2';
%= text_area 'text2', cols=>40, rows=>10
</span><br>
<p class='paragraph para9'>
%=l('csw_When_you_create_this_web')
</p>
<p class='paragraph para10'>
%=l('csw_Do_you_wish_to_proceed?')
</p>
%# Probably finally by a submit.
%end
</div>

View File

@ -1,24 +0,0 @@
/*
Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
*/
.CreateStarterWebsite-panel {}
.name {}
.rout {}
.head {}
.subh {}
.para1 {}
.para2 {}
.para3 {}
.para4 {}
.text1 {}
.para5 {}
.text2 {}
.para6 {}
.text3 {}
.para7 {}
.text4 {}
.para8 {}
.text5 {}
.para9 {}
.para10 {}
.subm6 {}

View File

@ -1,52 +0,0 @@
%#
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
%#
% layout 'default', title => "Sme server 2 - Create Starter Website", share_dir => './';
%# css specific to this panel:
% content_for 'module' => begin
%= stylesheet '/css/createstarterwebsite.css'
<div id="module" class="module CreateStarterWebsite-panel">
% if ($config->{debug} == 1) {
<p>
%= dumper $c->current_route
</p>
% }
<h1><%=$title%></h1>
% if ( stash('modul') ) {
%= $c->render_to_string(inline => stash('modul') );
% }
%if ($csw_data->{first}) {
<br><p>
%=$c->render_to_string(inline =>$c->l($csw_data->{first}))
</p>
%} elsif ($csw_data->{success}) {
<div class='sme-border'>
<h2> Operation Status Report</h2><p>
%= $c->l($csw_data->{success});
</p>
</div>
%} elsif ($csw_data->{error}) {
<div class='sme-error'>
<h2> Operation Status Report - error</h2><p>
%= $c->l($csw_data->{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 ($csw_data->{trt} eq "PARAMS") {
%= include 'partials/_csw_PARAMS'
%}
</div>
%end

View File

@ -1,20 +0,0 @@
#
# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:42:48
#
'csw_You_can_leave_any_field' => 'You can leave any field blank if you do not need it. ',
'csw_Do_you_wish_to_proceed?' => 'Do you wish to proceed?',
'csw_Text_following_second_header,_typically' => 'Text following second header, Typically used for contact or ordering information:',
'csw_Create_Starter_Website' => 'Create Starter Website',
'csw_Hello_PARAMS' => 'Hello PARAMS',
'csw_The_text_that_you_enter' => 'The text that you enter below will be line wrapped for a nicer appearance in your web page. Leave a blank line whenever you want to start a new paragraph. If you need to force a line break without starting a new paragraph (for example after each line of a mailing address), Then type the four-character sequence',
'csw_Text_following_first_header,_typically' => 'Text following first header, Typically used for a paragraph of marketing information. ',
'csw_Second_header,_typically_used_for' => 'Second header, Typically used for short phrases such as For more information or To order our products:',
'csw_When_you_create_this_web' => 'When you create this web page, The file index. Htm will be overwritten in your web site directory. ',
'csw_Manage_CreateStarterWebsite_settings:' => 'Manage CreateStarterWebsite settings:',
'csw_Do_not_use_this_optionif' => 'Do not use this optionif you have already customized your web site, Since it will overwrite the index. Htm file in your web site directory. ',
'csw_Create_a_starter_website' => 'Create a starter website',
'csw_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful',
'csw_To_create_a_simple_web' => 'To create a simple web page for your company, Fill in the fields below and click onCreate. ',
'csw_First_header,_typically_used_for' => 'First header, Typically used for short phrases such as Leader in the field of textile manufacturing',
'csw_APPLY' => 'Apply',
'csw_' => '',

View File

@ -1,87 +0,0 @@
#
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
#
#
# Routines to be edited by the developer to provide validation for parameters
# and provison of the control data for table(s)
#
use esmith::util;
use esmith::HostsDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
#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_PARAMS {
my $c = shift;
my $prefix_data = shift; #Data hash as parameter
my $ret = 'ok';
return $ret;
}
# Get control data for tables(s)
sub get_Table1 {
# Return an array of hashes of the contents for each row and column for Table1
# default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc"
my $c = shift;
my $control_data = $self->stash('Table1');
my @ret = {}
# foreach my $colHead (@$control_data) {
# my ret{$colHead} = "$colhead-1"
# };
return \@ret
}
sub get_Table2 {
# Return an array of hashes of the contents for each row and column for Table2
# default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc"
my $c = shift;
my $control_data = $self->stash('Table2');
my @ret = {}
# foreach my $colHead (@$control_data) {
# my ret{$colHead} = "$colhead-1"
# };
return \@ret
}
# Return hash with values from row in which link clicked on table
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;
}
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
sub perform_PARAMS {
my $c = shift;
my $prefix_data = shift; #Data hash as parameter
my $ret = 'ok';
return $ret;
}
sub create_link{
# WIP
my ($c,$route, $panel, $index) = shift;
my $link = "$route?trt=$panel&Selected=$index";
return $link;
}
1;

View File

@ -1,87 +0,0 @@
#
# Routines to be edited by the developer to provide validation for parameters
# and provison of the control data for table(s)
#
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-16 11:18
#
use esmith::util;
use esmith::HostsDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
#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_PARAMS {
my $c = shift;
my $prefix_data = shift; #Data hash as parameter
my $ret = 'ok';
return $ret;
}
# Get control data for tables(s)
sub get_Table1 {
# Return an array of hashes of the contents for each row and column for Table1
# default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc"
my $c = shift;
my $control_data = $self->stash('Table1');
my @ret = {}
# foreach my $colHead (@$control_data) {
# my ret{$colHead} = "$colhead-1"
# };
return \@ret
}
sub get_Table2 {
# Return an array of hashes of the contents for each row and column for Table2
# default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc"
my $c = shift;
my $control_data = $self->stash('Table2');
my @ret = {}
# foreach my $colHead (@$control_data) {
# my ret{$colHead} = "$colhead-1"
# };
return \@ret
}
# Return hash with values from row in which link clicked on table
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;
}
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
sub perform_PARAMS {
my $c = shift;
my $prefix_data = shift; #Data hash as parameter
my $ret = 'ok';
return $ret;
}
sub create_link{
# WIP
my ($c,$route, $panel, $index) = shift;
my $link = "$route?trt=$panel&Selected=$index";
return $link;
}
1;

View File

@ -1,245 +0,0 @@
package SrvMngr::Controller::DiskUsage;
#
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
#
#----------------------------------------------------------------------
# heading : Miscellaneous
# description : Disk Usage
# navigation : 2000 400
#
# name : diskusage, method : get, url : /diskusage, ctlact : DiskUsage#main
# name : diskusageu, method : post, url : /diskusageu, ctlact : DiskUsage#do_update
# name : diskusaged, method : get, url : /diskusaged, ctlact : DiskUsage#do_display
#
# routes : end
#
# Documentation: https://wiki.contribs.org/DiskUsage
#----------------------------------------------------------------------
#
# 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::HostsDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
#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");
require '/usr/share/smanager/lib/SrvMngr/Controller/DiskUsage-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 );
my %du_data = ();
my $title = $c->l('du_Disk_Usage');
my $modul = '';
$du_data{'trt'} = 'PARAMS';
#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
# and table control fields
$c->stash(Table1=>$c->get_Table1());
$c->stash(Table2=>$c->get_Table2());
$c->stash(
title => $title,
modul => $modul,
du_data => \%du_data
);
$c->render( template => "diskusage" );
}
# 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 %du_data = ();
my $title = $c->l('du_Disk_Usage');
# 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}) {
$du_data{$key} = $value;
}
# the value of trt will tell you which panel has returned
my $trt = $c->param('trt') || 'PARAMS'; #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 'PARAMS'){
#Validate form parameters for panel PARAMS
$ret = $c->validate_PARAMS(\%du_data);
$thispanel = 'PARAMS';
}
if ($ret ne "ok") {
# return to the panel with error message
$c->stash(error => $c->l($ret));
$c->render("diskusage");
} else {
#Do whatever is needed, including writing values to the DB
if ($trt eq 'PARAMS'){
#do whatever is required ...
$ret = $c->perform_PARAMS(\%du_data);
if ($ret ne "ok") {
# return to the panel with error message
$c->stash(error => $c->l($ret));
$c->render("diskusage");
} else {
$c->stash( success => $c->l('du_PARAMS_panel_action_was_successful')); #A bit bland - edit it in the lex file
}
}
# and call any signal-events needed
# Setup shared data and call panel
$c->stash(
title => $title,
du_data => \%du_data
);
if ('none' eq 'none') {
$du_data{'trt'} = 'PARAMS';
} else {
$du_data{'trt'} = 'none';
}
$c->render("diskusage");
}
}
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 = shift;
$c->app->log->info($c->log_req);
my %du_data = ();
my $title = $c->l('du_Disk_Usage');
# 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}) {
$du_data{$key} = $value;
}
# the value of trt will tell you which panel has returned
my $trt = $c->param('trt') || 'PARAMS'; #Indicates where to go now
# Now add in the params from the selected row from the table
my %selectedrow;
if ($trt eq 'PARAMS'){
#Validate form parameters for panel PARAMS
%selectedrow = $c->get_selected_PARAMS($du_data{'Selected'},$is_new_record);
}
#Copy in the selected row params to the prefix_data hash to pass to the panel
while (my ($key, $value) = each %selectedrow){
$du_data{$key} = $value;
}
# Where to go now
$du_data{'trt'} = $trt;
# Data for panel
$c->stash(
title => $title,
du_data => \%du_data
);
$c->render("diskusage");
}
1;

View File

@ -1,83 +0,0 @@
%#
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
%#
<div id="DiskUsage-PARAMS" class="partial DiskUsage-PARAMS">
<script>
window.onload = function() {
SelectInput();
};
</script>
<h2>
%= l('du_Hello_PARAMS');
</h2>
% my $btn = l('du_APPLY');
%= form_for "DiskUsaged" => (method => 'POST') => begin
% param 'trt' => $du_data->{trt} unless param 'trt';
%= hidden_field 'trt' => $du_data->{trt}
%# Inputs etc in here.
<h1><%=l('du_Disk_usage')%></h1>
<h2><%=l('du_Manage_DiskUsage_settings:')%></h2>
<p class='paragraph para1'>
%=l('du_Wed_Sep_11_19:01:00_BST')
</p>
<pre class='preformatted pref1'>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/main-root 29G 4.8G 24G 17% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 12K 2.0G 1% /dev/shm
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 2.0G 648K 2.0G 1% /run
/dev/sda1 497M 111M 386M 23% /boot'
</pre>
<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-I-bays '><%=l('du_I-bays')%></th>
<th class='sme-border table-head-col table-head-col-Usage '><%=l('du_Usage')%></th>
<th class='sme-border table-head-col table-head-col-Path '><%=l('du_Path')%></th>
</tr>
</thead>
<tbody class='tabl1'>
% my $control_data = $self->stash('Table1');
% foreach my $row (@$control_data) {
<tr class='table-row'>
<td class='sme-border table-col table-col-Table1-I-bays'><%=$c->render_to_string(inline=>$row->{'Table1-I-bays'})%></td>
<td class='sme-border table-col table-col-Table1-Usage'><%=$c->render_to_string(inline=>$row->{'Table1-Usage'})%></td>
<td class='sme-border table-col table-col-Table1-Path'><%=$c->render_to_string(inline=>$row->{'Table1-Path'})%></td>
</tr>
%}
</tbody>
</table>
<br /><table class="sme-border TableSort sme-table tabl2 ">
<thead class='tabl2'>
<tr table-head-row>
<th class='sme-border table-head-col table-head-col-Users '><%=l('du_Users')%></th>
<th class='sme-border table-head-col table-head-col-Usage '><%=l('du_Usage')%></th>
<th class='sme-border table-head-col table-head-col-Path '><%=l('du_Path')%></th>
</tr>
</thead>
<tbody class='tabl2'>
% my $control_data = $self->stash('Table2');
% foreach my $row (@$control_data) {
<tr class='table-row'>
<td class='sme-border table-col table-col-Table2-Users'><%=$c->render_to_string(inline=>$row->{'Table2-Users'})%></td>
<td class='sme-border table-col table-col-Table2-Usage'><%=$c->render_to_string(inline=>$row->{'Table2-Usage'})%></td>
<td class='sme-border table-col table-col-Table2-Path'><%=$c->render_to_string(inline=>$row->{'Table2-Path'})%></td>
</tr>
%}
</tbody>
</table>
%# Probably finally by a submit.
%end
</div>

View File

@ -1,16 +0,0 @@
/*
Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
*/
.DiskUsage-panel {}
.name {}
.rout {}
.head {}
.subh {}
.para1 {}
.pref1 {}
.tabl1 {}
thead .tabl1 {}
tbody .tabl1 {}
.tabl2 {}
thead .tabl2 {}
tbody .tabl2 {}

View File

@ -1,52 +0,0 @@
%#
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
%#
% layout 'default', title => "Sme server 2 - Disk Usage", share_dir => './';
%# css specific to this panel:
% content_for 'module' => begin
%= stylesheet '/css/diskusage.css'
<div id="module" class="module DiskUsage-panel">
% if ($config->{debug} == 1) {
<p>
%= dumper $c->current_route
</p>
% }
<h1><%=$title%></h1>
% if ( stash('modul') ) {
%= $c->render_to_string(inline => stash('modul') );
% }
%if ($du_data->{first}) {
<br><p>
%=$c->render_to_string(inline =>$c->l($du_data->{first}))
</p>
%} elsif ($du_data->{success}) {
<div class='sme-border'>
<h2> Operation Status Report</h2><p>
%= $c->l($du_data->{success});
</p>
</div>
%} elsif ($du_data->{error}) {
<div class='sme-error'>
<h2> Operation Status Report - error</h2><p>
%= $c->l($du_data->{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 ($du_data->{trt} eq "PARAMS") {
%= include 'partials/_du_PARAMS'
%}
</div>
%end

View File

@ -1,14 +0,0 @@
#
# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-09-22 11:30:26
#
'du_I-bays' => 'I-bays',
'du_APPLY' => 'Apply',
'du_Disk_Usage' => 'Disk Usage',
'du_Hello_PARAMS' => 'Hello PARAMS',
'du_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful',
'du_Wed_Sep_11_19:01:00_BST' => 'Wed Sep 11 19:01:00 BST 2024',
'du_Path' => 'Path',
'du_Usage' => 'Usage',
'du_Users' => 'Users',
'du_Disk_usage' => 'Disk usage',
'du_Manage_DiskUsage_settings:' => 'Manage DiskUsage settings:',

0
Targets/Diskusage/Diskusage-Custom.pm Normal file → Executable file
View File

0
Targets/Diskusage/Diskusage.pm Normal file → Executable file
View File

0
Targets/Diskusage/_d_PARAMS.html.ep Normal file → Executable file
View File

0
Targets/Diskusage/diskusage.css Normal file → Executable file
View File

0
Targets/Diskusage/diskusage.html.ep Normal file → Executable file
View File

0
Targets/Diskusage/diskusage_en.lex Normal file → Executable file
View File

0
Targets/Letsencrypt/Letsencrypt-Custom.pm Normal file → Executable file
View File

0
Targets/Letsencrypt/Letsencrypt.pm Normal file → Executable file
View File

0
Targets/Letsencrypt/_lets_CHECKALLDOMAINS.html.ep Normal file → Executable file
View File

View File

0
Targets/Letsencrypt/_lets_CHECKONEDOMAIN.html.ep Normal file → Executable file
View File

0
Targets/Letsencrypt/_lets_LIST.html.ep Normal file → Executable file
View File

0
Targets/Letsencrypt/_lets_PARAMS.html.ep Normal file → Executable file
View File

0
Targets/Letsencrypt/letsencrypt.css Normal file → Executable file
View File

0
Targets/Letsencrypt/letsencrypt.html.ep Normal file → Executable file
View File

0
Targets/Letsencrypt/letsencrypt_en.lex Normal file → Executable file
View File

0
Targets/Nfsshare/Nfsshare-Custom.pm Normal file → Executable file
View File

0
Targets/Nfsshare/Nfsshare-Custom.pm.new Normal file → Executable file
View File

0
Targets/Nfsshare/Nfsshare.pm Normal file → Executable file
View File

0
Targets/Nfsshare/_nfs_PARAMS.html.ep Normal file → Executable file
View File

0
Targets/Nfsshare/_nfs_TABLE.html.ep Normal file → Executable file
View File

0
Targets/Nfsshare/nfs_PARAMS.html.ep Normal file → Executable file
View File

0
Targets/Nfsshare/nfs_TABLE.html.ep Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare-lexfiles.zip Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare.html.ep Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_bg.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_de.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_dk.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_el.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_en.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_en.po Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_es.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_es.po Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_et.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_fr.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_hu.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_id.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_il.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_it.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_jp.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_nl.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_no.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_pl.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_pt-br.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_pt.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_ro.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_ru.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_sl.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_sv.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_th.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_tr.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_zh-cn.lex Normal file → Executable file
View File

0
Targets/Nfsshare/nfsshare_zh-tw.lex Normal file → Executable file
View File

9
Targets/Nutups/Nutups-Custom.pm Normal file → Executable file
View File

@ -191,12 +191,17 @@ sub get_model_options {
return ['Error occurred'];
}
<<<<<<< HEAD
# Remove "/usr/sbin" from the front of each line
=======
# Remove "/usr/sbin/" from the front of each line
>>>>>>> 75aaf422042b2af06071fd64175eb15f6c4ae92b
s{^/usr/sbin/}{} for @output;
# Trim whitespace from each element and return the array
chomp(@output); # Remove newline characters from each line
return @output; # Return the array of modified output lines
<<<<<<< HEAD
}
sub get_ups_details {
@ -230,5 +235,7 @@ sub get_ups_details {
}
return $formatted_output;
=======
>>>>>>> 75aaf422042b2af06071fd64175eb15f6c4ae92b
}
1;
1;

0
Targets/Nutups/Nutups.pm Normal file → Executable file
View File

2
Targets/Nutups/_nut_CONFIG.html.ep Normal file → Executable file
View File

@ -137,4 +137,4 @@
%# Probably finally by a submit.
%end
</div>
</div>

4
Targets/Nutups/_nut_STATUS.html.ep Normal file → Executable file
View File

@ -7,7 +7,7 @@
SelectInput();
};
</script>
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<pre>
%= dumper $nut_data
</pre>
@ -45,4 +45,4 @@
%# Probably finally by a submit.
%end
</div>
</div>

0
Targets/Nutups/nutups.css Normal file → Executable file
View File

4
Targets/Nutups/nutups.html.ep Normal file → Executable file
View File

@ -8,7 +8,7 @@
%= javascript '/js/nutups.js'
<div id="module" class="module Nutups-panel">
% if ($config->{debug} == 1) {
% if (config->{debug} == 1) {
<pre>
%= dumper $c->current_route
%= dumper $nut_data->{trt}
@ -55,4 +55,4 @@
</div>
%end
%end

0
Targets/Nutups/nutups.js Normal file → Executable file
View File

0
Targets/Nutups/nutups_en.lex Normal file → Executable file
View File

27
Targets/Nutups/spec.nutUPS Executable file
View File

@ -0,0 +1,27 @@
main page = status
config page:
-nut status : enable/disabled
nut mode : standalone|netserver|netclient
if netclient mode
ask for SlaveUPS "UPSNAME@IP" and SlavePass ""
set Master as no when saving
if standalone or netserver
either use default value for NUT device, or allow to set them
${nut-driver@UPS }{Model} usbhid-ups you can use a drop-down listing all the device rpm -ql nut|grep /usr/sbin
${nut-driver@UPS }{Device} auto
only if Model genericups:
${nut-driver@UPS }{Type}
${nut-driver@UPS }{mfr}
${nut-driver@UPS }{mdl}
on saving set nut{Master} to yes if mode standalone or netserver
if mode=netserver set nut{access} to private otherwise set as localhost
run signal-event nut-conf
if enabled the status page could return upsc UPS@localhost, or if slave upsc UPSNAME@IP
if netclient set nut-monitor status to enabled and set status disabled to nut-server and all existing nut-driver@* ( we can set multiple via cli, so a loop would be great there)
if standalone|netserver then enable all nut related service if nut enabled
if nut disabled then set all related services to disabled

View File

@ -42,7 +42,11 @@ use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
my $cdb
my $adb
my $ndb
my $hdb
my $ddb
require '/usr/share/smanager/lib/SrvMngr/Controller/${PackageName}-Custom.pm'; #The code that is to be added by the developer
@ -62,11 +66,11 @@ sub main {
$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");
$cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
$adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
$ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
$hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
$ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
my %${prefix}_data = ();
my $title = $c->l('${prefix}_${MenuDescription}');
@ -116,11 +120,11 @@ sub do_update {
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");
$cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
$adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
$ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
$hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
$ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
my %${prefix}_data = ();
my $title = $c->l('${prefix}_${MenuDescription}');
@ -200,11 +204,11 @@ sub do_display {
$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");
$cdb = esmith::ConfigDB->open() || die("Couldn't open config db");
$adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
$ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
$hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
$ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
my %${prefix}_data = ();
my $title = $c->l('${prefix}_${MenuDescription}');

View File

@ -18,11 +18,11 @@ 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");
#my $cdb
#my $adb
#my $ndb
#my $hdb
#my $ddb
# Validation routines - parameters for each panel
<tal:block tal:repeat="panel panels">

0
Templates/html_controls.html.ep.xml Normal file → Executable file
View File

0
Templates/languages.json Normal file → Executable file
View File

View File

@ -28,16 +28,16 @@
%} elsif ($c->stash('success')) {
<div class='success '>
<h2><%=$c->l('Status Report') %></h2><p>
%= $c->l($c->stash('success'));
<p>
%= $c->l($c->stash('success'));
</p>
</div>
<br />
%} elsif ($c->stash('error')) {
<div class='sme-error'>
<h2><%=$c->l('Error Status Report') %></h2><p>
%= $c->l($c->stash('error'));
<p>
%= $c->l($c->stash('error'));
</p>
</div>
<br />

0
Templates/partial.html.ep.tem Normal file → Executable file
View File

0
activate-python-env Normal file → Executable file
View File

View File

@ -5,7 +5,10 @@ if [ $# -ne 3 ]; then
exit 1
fi
export REMOTE=/home/brianr/$1/usr/share/smanager
cd ~/clients/SM2/SM2Gen/venv/Targets/$3
mkdir -p $REMOTE
export LOCAL=~/clients/SM2/SM2Gen/venv
export SME11IP=$1.thereadclan.me.uk
cd $LOCAL/Targets/$3
echo `pwd`
# controller file name is just capitalised
cont_file=$(echo "$3" | awk '{
@ -21,16 +24,17 @@ echo $cont_file
#fi
mkdir -p $REMOTE/lib/SrvMngr/Controller
mkdir -p $REMOTE/themes/default/templates/partials/
mkdir -p $REMOTE/lib/SrvMngr/I18N/Modules/Nfsshare
mkdir -p $REMOTE/themes/default/templates/
mkdir -p $REMOTE/themes/default/public/css
mkdir -p $REMOTE/themes/default/public/js
cp -fv *.pm $REMOTE/lib/SrvMngr/Controller
cp -fv *.css $REMOTE/themes/default/public/css
cp -fv *.js $REMOTE/themes/default/public/js
cp -fv _$2*.html.ep $REMOTE/themes/default/templates/partials/
find . -maxdepth 1 -type f -name "[!_]*\.ep" | xargs -I% bash -c 'cp -fv % $REMOTE/themes/default/templates/'
mkdir -p $REMOTE/lib/SrvMngr/I18N/Modules/$3
cp -fv *.lex $REMOTE/lib/SrvMngr/I18N/Modules/$3
rm -f $REMOTE/lib/SrvMngr/I18N/Modules/$3/*.pm
ssh -p 1234 root@$1.thereadclan.me.uk 'signal-event smanager-refresh'
ssh -p 1234 root@$SME11IP 'signal-event smanager-refresh'
exit 0

54
getmyip
View File

@ -1,54 +0,0 @@
#!/bin/bash
# List of services to query for the public IP
services=(
"ifconfig.me"
"ipinfo.io/ip"
"icanhazip.com"
"api.ipify.org"
"ident.me"
"ip.tyk.nu"
"checkip.amazonaws.com"
"ipecho.net/plain"
"myip.dnsomatic.com"
"ip.seeip.org"
"ipapi.co/ip"
"wtfismyip.com/text"
"openident.net/ip"
"ifconfig.co/ip"
)
# Function to shuffle the array of services
shuffle_services() {
local i
for ((i=${#services[@]} - 1; i > 0; i--)); do
local j=$((RANDOM % (i + 1)))
local temp="${services[i]}"
services[i]="${services[j]}"
services[j]="$temp"
done
}
# Function to fetch the public IP address
get_public_ip() {
shuffle_services
for service in "${services[@]}"; do
public_ip=$(curl -s --max-time 5 "$service")
# Check if the curl request was successful and there's a valid IP address
if [[ $? -eq 0 && $public_ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
logger -t public_ip_script "Service used: $service, IP found: $public_ip"
echo "$public_ip"
return
fi
done
# If none of the services returned a valid IP, output an error message
echo "Failed to retrieve public IP using all services." >&2
logger -t public_ip_script "Error: Failed to retrieve public IP using all services."
exit 1
}
# Execute the function
get_public_ip

0
html/CreateStarterWebsite.html Normal file → Executable file
View File

0
html/DiskUsage.html Normal file → Executable file
View File

0
html/Diskusage.html Normal file → Executable file
View File

0
html/letsencrypt-config.html Normal file → Executable file
View File

0
html/letsencrypt-list-1.html Normal file → Executable file
View File

0
html/letsencrypt-list.html Normal file → Executable file
View File

View File

@ -0,0 +1,69 @@
/* -*- mode: C -*- */
/* vim:set ts=2 sw=2 sts=2 et: */
/*
IGraph library.
Copyright (C) 2006-2023 Tamas Nepusz <ntamas@gmail.com>
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., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA
*/
#ifndef Py_IGRAPHMODULE_H
#define Py_IGRAPHMODULE_H
#ifdef __cplusplus
extern "C" {
#endif
/* C API functions */
#define PyIGraph_FromCGraph_NUM 0
#define PyIGraph_FromCGraph_RETURN PyObject*
#define PyIGraph_FromCGraph_PROTO (igraph_t *graph)
#define PyIGraph_ToCGraph_NUM 1
#define PyIGraph_ToCGraph_RETURN igraph_t*
#define PyIGraph_ToCGraph_PROTO (PyObject *graph)
/* Total number of C API pointers */
#define PyIGraph_API_pointers 2
#ifdef IGRAPH_MODULE
/* This section is used when compiling igraphmodule.c */
static PyIGraph_FromCGraph_RETURN PyIGraph_FromCGraph PyIGraph_FromCGraph_PROTO;
static PyIGraph_ToCGraph_RETURN PyIGraph_ToCGraph PyIGraph_ToCGraph_PROTO;
#else
/* This section is used in modules that use igraph's API */
static void** PyIGraph_API;
# define PyIGraph_FromCGraph \
(*(PyIGraph_FromCGraph_RETURN (*)PyIGraph_FromCGraph_PROTO) \
PyIGraph_API[PyIGraph_FromCGraph_NUM])
# define PyIGraph_ToCGraph \
(*(PyIGraph_ToCGraph_RETURN (*)PyIGraph_ToCGraph_PROTO) \
PyIGraph_API[PyIGraph_ToCGraph_NUM])
/* Return -1 and set exception on error, 0 on success */
static int import_igraph(void) {
PyIGraph_API = (void **)PyCapsule_Import("igraph._igraph._C_API", 0);
return (PyIGraph_API != NULL) ? 0 : -1;
}
#endif
#ifdef __cplusplus
}
#endif
#endif /* !defined(Py_IGRAPHMODULE_H) */

0
json5/CreateStarterWebsite.json5 Normal file → Executable file
View File

0
json5/DiskUsage.json5 Normal file → Executable file
View File

0
json5/Diskusage.json5 Normal file → Executable file
View File

0
json5/Letsencrypt-config.json5 Normal file → Executable file
View File

0
json5/Letsencrypt-list.json5 Normal file → Executable file
View File

0
json5/Letsencrypt.json5 Normal file → Executable file
View File

0
json5/Nfsshare.json5 Normal file → Executable file
View File

Some files were not shown because too many files have changed in this diff Show More