From 964771d87681705c3cb2c3a94ada25cd4ee63912 Mon Sep 17 00:00:00 2001 From: Brian Read Date: Fri, 18 Oct 2024 19:01:59 +0100 Subject: [PATCH] Update letsencrypt, plus typos in template files --- Targets/Letsencrypt/Letsencrypt-Custom.pm | 97 ++++++++ Targets/Letsencrypt/Letsencrypt.pm | 267 ++++++++++++++++++++++ Targets/Letsencrypt/_lets_LIST.html.ep | 71 ++++++ Targets/Letsencrypt/_lets_PARAMS.html.ep | 97 ++++++++ Targets/Letsencrypt/letsencrypt.css | 18 ++ Targets/Letsencrypt/letsencrypt.html.ep | 56 +++++ Targets/Letsencrypt/letsencrypt_en.lex | 33 +++ Templates/custom.pm.tem | 10 +- Templates/html_controls.html.ep.xml | 43 ++-- html/letsencrypt-list.html | 3 +- json5/Letsencrypt.json5 | 200 ++++++++++++++++ json5/Nfsshare.json5 | 20 +- sm2gen.py | 13 +- 13 files changed, 889 insertions(+), 39 deletions(-) create mode 100644 Targets/Letsencrypt/Letsencrypt-Custom.pm create mode 100644 Targets/Letsencrypt/Letsencrypt.pm create mode 100644 Targets/Letsencrypt/_lets_LIST.html.ep create mode 100644 Targets/Letsencrypt/_lets_PARAMS.html.ep create mode 100644 Targets/Letsencrypt/letsencrypt.css create mode 100644 Targets/Letsencrypt/letsencrypt.html.ep create mode 100644 Targets/Letsencrypt/letsencrypt_en.lex create mode 100644 json5/Letsencrypt.json5 diff --git a/Targets/Letsencrypt/Letsencrypt-Custom.pm b/Targets/Letsencrypt/Letsencrypt-Custom.pm new file mode 100644 index 0000000..271a526 --- /dev/null +++ b/Targets/Letsencrypt/Letsencrypt-Custom.pm @@ -0,0 +1,97 @@ +# +# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-18 19:00:38 +# +# +# 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_LIST { + my $c = shift; + my $prefix_data = shift; #Data hash as parameter + my $ret = 'ok'; + return $ret; + } + + 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_DomainList { + # Return an array of hashes of the contents for each row and column for DomainList + # default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc" + my $c = shift; + my $control_data = $c->stash('DomainList'); + 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_LIST { + my $c = shift; + my $selected = shift; #Parameter is name of selected row. + my $is_new_record = shift; #Indicates new record required (defaults) + my %ret = {}; + return $ret; + } + + 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_LIST { + my $c = shift; + my $prefix_data = shift; #Data hash as parameter + my $ret = 'ok'; + return $ret; + } + + 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; \ No newline at end of file diff --git a/Targets/Letsencrypt/Letsencrypt.pm b/Targets/Letsencrypt/Letsencrypt.pm new file mode 100644 index 0000000..7b75d3e --- /dev/null +++ b/Targets/Letsencrypt/Letsencrypt.pm @@ -0,0 +1,267 @@ +package SrvMngr::Controller::Letsencrypt; +# +# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-18 19:00:38 +# +#---------------------------------------------------------------------- +# heading : Miscellaneous +# description : letsencrypt +# navigation : 2000 400 +# +# name : letsencrypt, method : get, url : /letsencrypt, ctlact : Letsencrypt#main +# name : letsencryptu, method : post, url : /letsencryptu, ctlact : Letsencrypt#do_update +# name : letsencryptd, method : get, url : /letsencryptd, ctlact : Letsencrypt#do_display +# +# routes : end +# +# Documentation: https://wiki.contribs.org/Letsencrypt +#---------------------------------------------------------------------- + +# +# Scheme of things: +# +# TBA!! + +use strict; +use warnings; +use Mojo::Base 'Mojolicious::Controller'; + +use constant FALSE => 0; +use constant TRUE => 1; + +use Locale::gettext; +use SrvMngr::I18N; +use SrvMngr qw(theme_list init_session); + +use Data::Dumper; + +use esmith::util; +use esmith::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/Letsencrypt-Custom.pm'; #The code that is to be added by the developer + +sub main { +# +# Initial entry - route is "/" +# +#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 %lets_data = (); + my $title = $c->l('lets_letsencrypt'); + my $modul = ''; + + $lets_data{'trt'} = 'LIST'; + + #Load any DB entries into the _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(DomainList=>$c->get_DomainList()); + + + $c->stash( + title => $title, + modul => $modul, + lets_data => \%lets_data + ); + $c->render( template => "letsencrypt" ); +} + +# Post request with params - submit from the form +sub do_update { +# +# Return after submit pushed on panel (this is a post) - route is "/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--update exists + #signal_event smeserver--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 %lets_data = (); + my $title = $c->l('lets_letsencrypt'); + + # Accessing all POST parameters + my %params = $c->req->params->to_hash; + + # Get number of POST parameters + my $num_params = keys %params; + + #Params are available in the hash "params" - copy to the prefix_data hash + while (my ($key, $value) = each %{$c->req->params->to_hash}) { + $lets_data{$key} = $value; + } + + # the value of trt will tell you which panel has returned + my $trt = $c->param('trt') || 'LIST'; #hidden control on every form. + my $ret = 'ok'; + #Validate the parameters in a custom sub one for each panel (although only one of these will be executed) + + my $thispanel; + + if ($trt eq 'LIST'){ + #Validate form parameters for panel LIST + $ret = $c->validate_LIST(\%lets_data); + $thispanel = 'LIST'; + } + + if ($trt eq 'PARAMS'){ + #Validate form parameters for panel PARAMS + $ret = $c->validate_PARAMS(\%lets_data); + $thispanel = 'PARAMS'; + } + + + if ($ret ne "ok") { + # return to the panel with error message + $c->stash(error => $c->l($ret)); + $c->render("letsencrypt"); + } else { + #Do whatever is needed, including writing values to the DB + + if ($trt eq 'LIST'){ + #do whatever is required ... + $ret = $c->perform_LIST(\%lets_data); + if ($ret ne "ok") { + # return to the panel with error message + $c->stash(error => $c->l($ret)); + $c->render("letsencrypt"); + } else { + $c->stash( success => $c->l('lets_LIST_panel_action_was_successful')); #A bit bland - edit it in the lex file + } + } + + if ($trt eq 'PARAMS'){ + #do whatever is required ... + $ret = $c->perform_PARAMS(\%lets_data); + if ($ret ne "ok") { + # return to the panel with error message + $c->stash(error => $c->l($ret)); + $c->render("letsencrypt"); + } else { + $c->stash( success => $c->l('lets_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, + lets_data => \%lets_data + ); + if ('none' eq 'none') { + $lets_data{'trt'} = 'LIST'; + } else { + $lets_data{'trt'} = 'none'; + } + $c->render("letsencrypt"); + } +} + +sub do_display { +# +# Return after link clicked in table (this is a get) - route is "/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 %lets_data = (); + my $title = $c->l('lets_letsencrypt'); + + # Accessing all parameters + my %params = $c->req->params->to_hash; + + # Get number of parameters + my $num_params = keys %params; + + #Tag as Post or Get (ie. create new entry or edit existing one + my $is_new_record = ($c->req->method() eq 'POST'); + + #Params are available in the hash "params" - copy to the prefix_data hash + while (my ($key, $value) = each %{$c->req->params->to_hash}) { + $lets_data{$key} = $value; + } + + # the value of trt will tell you which panel has returned + my $trt = $c->param('trt') || 'LIST'; #Indicates where to go now + + # Now add in the params from the selected row from the table + + my %selectedrow; + + if ($trt eq 'LIST'){ + #Validate form parameters for panel LIST + %selectedrow = $c->get_selected_LIST($lets_data{'Selected'},$is_new_record); + } + + if ($trt eq 'PARAMS'){ + #Validate form parameters for panel PARAMS + %selectedrow = $c->get_selected_PARAMS($lets_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){ + $lets_data{$key} = $value; + } + # Where to go now + $lets_data{'trt'} = $trt; + + # Data for panel + $c->stash( + title => $title, + lets_data => \%lets_data + ); + $c->render("letsencrypt"); +} +1; diff --git a/Targets/Letsencrypt/_lets_LIST.html.ep b/Targets/Letsencrypt/_lets_LIST.html.ep new file mode 100644 index 0000000..51ac398 --- /dev/null +++ b/Targets/Letsencrypt/_lets_LIST.html.ep @@ -0,0 +1,71 @@ +%# +%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-18 19:00:38 +%# +
+ +

+ %= l('lets_Hello_LIST'); +

+ % my $btn = l('lets_APPLY'); + %= form_for "Letsencryptd" => (method => 'POST') => begin + + % param 'trt' => $lets_data->{trt} unless param 'trt'; + %= hidden_field 'trt' => $lets_data->{trt} + %# Inputs etc in here. + +

<%=l('lets_List_of_Domains')%>

+ +

<%=l('lets_FORM_DESCRIPTION')%>

+ +

+ %=l('lets_Internal_IP') + + % param 'InternalIP' => $lets_data->{InternalIP} unless param 'InternalIP'; + %= text_field 'InternalIP', size => '50', class => 'textinput InternalIP' , pattern=>'.*' , placeholder=>'InternalIP', Readonly=>'true' +

+ +

+ %=l('lets_Internet_IP') + + % param 'ObserverIP' => $lets_data->{ObserverIP} unless param 'ObserverIP'; + %= text_field 'ObserverIP', size => '50', class => 'textinput ObserverIP' , pattern=>'.*' , placeholder=>'ObserverIP', Readonly=>'true' +

+ +
+ + + + + + + + + + + + + + % my $control_data = $self->stash('DomainList'); + % foreach my $row (@$control_data) { + + + + + + + + + + + %} + +
<%=l('lets_Domain_name_/_HOSTNAME')%><%=l('lets_Brief_description')%><%=l('lets_Content')%><%=l('lets_LABEL_NAMESERVERS')%><%=l('lets_LABEL_POINT')%><%=l('lets_LABEL_LECERT')%><%=l('lets_IS_IN_CERT')%><%=l('lets_CHECK')%>
<%=$c->render_to_string(inline=>$row->{'Table1-Domain name / HOSTNAME'})%><%=$c->render_to_string(inline=>$row->{'Table1-Brief description'})%><%=$c->render_to_string(inline=>$row->{'Table1-Content'})%><%=$c->render_to_string(inline=>$row->{'Table1-LABEL_NAMESERVERS'})%><%=$c->render_to_string(inline=>$row->{'Table1-LABEL_POINT'})%><%=$c->render_to_string(inline=>$row->{'Table1-LABEL_LECERT'})%><%=$c->render_to_string(inline=>$row->{'Table1-IS_IN_CERT'})%><%=$c->render_to_string(inline=>$row->{'Table1-CHECK'})%>
+ + + %# Probably finally by a submit. + %end +
diff --git a/Targets/Letsencrypt/_lets_PARAMS.html.ep b/Targets/Letsencrypt/_lets_PARAMS.html.ep new file mode 100644 index 0000000..7a74d94 --- /dev/null +++ b/Targets/Letsencrypt/_lets_PARAMS.html.ep @@ -0,0 +1,97 @@ +%# +%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-18 19:00:38 +%# +
+ +

+ %= l('lets_Hello_PARAMS'); +

+ % my $btn = l('lets_APPLY'); + %= form_for "Letsencryptd" => (method => 'POST') => begin + + % param 'trt' => $lets_data->{trt} unless param 'trt'; + %= hidden_field 'trt' => $lets_data->{trt} + %# Inputs etc in here. + +

<%=l('lets_Configuration_for_Letsencrypt')%>

+ +

<%=l('lets_Manage_letsencrypt-config_settings:')%>

+ +

+ %=l('lets_CONFIG_LETSENCRYPT') +

+ +

+ %=l('lets_SERVICE_STATUS') + + % my @status_options = Disabled; + % param 'status' => $lets_data->{status} unless param 'status'; + %= select_field 'status' => @status_options, class => 'input' +

+ +

+ %=l('lets_HOOKSCRIPT_STATUS') + + % my @hookScript_options = ; + % param 'hookScript' => $lets_data->{hookScript} unless param 'hookScript'; + %= select_field 'hookScript' => @hookScript_options, class => 'input' +

+ +

+ %=l('lets_HOSTOVERRIDE_STATUS') + + % my @hostOverride_options = ; + % param 'hostOverride' => $lets_data->{hostOverride} unless param 'hostOverride'; + %= select_field 'hostOverride' => @hostOverride_options, class => 'input' +

+ +

+ %=l('lets_ACCEPT_TERMS_STATUS') + + % my @ACCEPT_TERMS_options = ; + % param 'ACCEPT_TERMS' => $lets_data->{ACCEPT_TERMS} unless param 'ACCEPT_TERMS'; + %= select_field 'ACCEPT_TERMS' => @ACCEPT_TERMS_options, class => 'input' +

+ +

+ %=l('lets_API_STATUS') + + % my @API_options = ; + % param 'API' => $lets_data->{API} unless param 'API'; + %= select_field 'API' => @API_options, class => 'input' +

+ +

+ %=l('lets_KEYSIZE_STATUS') + + % my @keysize_options = ; + % param 'keysize' => $lets_data->{keysize} unless param 'keysize'; + %= select_field 'keysize' => @keysize_options, class => 'input' +

+ +

+ %=l('lets_CONFIGUREMODE_STATUS') + + % my @configure_options = ; + % param 'configure' => $lets_data->{configure} unless param 'configure'; + %= select_field 'configure' => @configure_options, class => 'input' +

+ +

+ %=l('lets_EMAIL') + + % param 'email' => $lets_data->{email} unless param 'email'; + %= text_field 'email', size => '50', class => 'textinput email' , pattern=>'.*' , placeholder=>'email' +

+ + + %= submit_button l('lets_Save'), class => 'action subm9' + + + %# Probably finally by a submit. + %end +
diff --git a/Targets/Letsencrypt/letsencrypt.css b/Targets/Letsencrypt/letsencrypt.css new file mode 100644 index 0000000..0b98201 --- /dev/null +++ b/Targets/Letsencrypt/letsencrypt.css @@ -0,0 +1,18 @@ +/* + Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-18 19:00:38 +*/ +.Letsencrypt-panel {} +.name {} +.rout {} +.head {} +.subh {} +.para1 {} +.sele1 {} +.sele2 {} +.sele3 {} +.sele4 {} +.sele5 {} +.sele6 {} +.sele7 {} +.text8 {} +.subm9 {} diff --git a/Targets/Letsencrypt/letsencrypt.html.ep b/Targets/Letsencrypt/letsencrypt.html.ep new file mode 100644 index 0000000..1d18d2c --- /dev/null +++ b/Targets/Letsencrypt/letsencrypt.html.ep @@ -0,0 +1,56 @@ +%# +%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-18 19:00:38 +%# +% layout 'default', title => "Sme server 2 - letsencrypt", share_dir => './'; +%# css specific to this panel: +% content_for 'module' => begin +%= stylesheet '/css/letsencrypt.css' +
+ + % if ($config->{debug} == 1) { +

+ %= dumper $c->current_route +

+ % } + +

<%=$title%>

+ + % if ( stash('modul') ) { + %= $c->render_to_string(inline => stash('modul') ); + % } + + %if ($lets_data->{first}) { +

+ %=$c->render_to_string(inline =>$c->l($lets_data->{first})) +

+ + %} elsif ($lets_data->{success}) { +
+

Operation Status Report

+ %= $c->l($lets_data->{success}); +

+
+ + %} elsif ($lets_data->{error}) { +
+

Operation Status Report - error

+ %= $c->l($lets_data->{error}); +

+
+ %} + + %#Routing to partials according to trt parameter. + %#This ought to be cascading if/then/elsif, but is easier to just stack the if/then's rather like a case statement' + + % if ($lets_data->{trt} eq "LIST") { + %= include 'partials/_lets_LIST' + %} + + % if ($lets_data->{trt} eq "PARAMS") { + %= include 'partials/_lets_PARAMS' + %} + + + +
+%end diff --git a/Targets/Letsencrypt/letsencrypt_en.lex b/Targets/Letsencrypt/letsencrypt_en.lex new file mode 100644 index 0000000..28239d2 --- /dev/null +++ b/Targets/Letsencrypt/letsencrypt_en.lex @@ -0,0 +1,33 @@ +# +# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-18 19:00:38 +# +'lets_LABEL_LECERT' => 'LABEL LECERT', +'lets_Hello_LIST' => 'Hello LIST', +'lets_Domain_name_/_HOSTNAME' => 'Domain name / HOSTNAME', +'lets_IS_IN_CERT' => 'IS IN CERT', +'lets_Internet_IP' => 'Internet IP', +'lets_HOOKSCRIPT_STATUS' => 'HOOKSCRIPT STATUS', +'lets_Save' => 'Save', +'lets_FORM_DESCRIPTION' => 'FORM DESCRIPTION', +'lets_EMAIL' => 'Email', +'lets_Hello_PARAMS' => 'Hello PARAMS', +'lets_HOSTOVERRIDE_STATUS' => 'HOSTOVERRIDE STATUS', +'lets_Brief_description' => 'Brief description', +'lets_Internal_IP' => 'Internal IP', +'lets_CONFIG_LETSENCRYPT' => 'CONFIG LETSENCRYPT', +'lets_KEYSIZE_STATUS' => 'KEYSIZE STATUS', +'lets_CONFIGUREMODE_STATUS' => 'CONFIGUREMODE STATUS', +'lets_List_of_Domains' => 'List of Domains', +'lets_SERVICE_STATUS' => 'SERVICE STATUS', +'lets_Configuration_for_Letsencrypt' => 'Configuration for Letsencrypt', +'lets_LABEL_POINT' => 'LABEL POINT', +'lets_API_STATUS' => 'API STATUS', +'lets_letsencrypt' => 'Letsencrypt', +'lets_LIST_panel_action_was_successful' => 'LIST panel action was successful', +'lets_CHECK' => 'Check', +'lets_LABEL_NAMESERVERS' => 'LABEL NAMESERVERS', +'lets_Content' => 'Content', +'lets_ACCEPT_TERMS_STATUS' => 'ACCEPT TERMS STATUS', +'lets_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful', +'lets_Manage_letsencrypt-config_settings:' => 'Manage letsencrypt-config settings:', +'lets_APPLY' => 'Apply', diff --git a/Templates/custom.pm.tem b/Templates/custom.pm.tem index ca8d616..9532ac0 100644 --- a/Templates/custom.pm.tem +++ b/Templates/custom.pm.tem @@ -36,12 +36,12 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Return an array of hashes of the contents for each row and column for ${tablecontrol} # default is a single row of strings "col1header-1, col2header-1, col3Header-1 etc" my $c = shift; - my $control_data = $self->stash('${tablecontrol}'); - my @ret = {} + my $control_data = $c->stash('${tablecontrol}'); + my @ret = {}; # foreach my $colHead (@$control_data) { -# my ret{$colHead} = "$colhead-1" +# my ret{$colHead} = "$colhead-1"; # }; - return \@ret + return \@ret; } @@ -72,4 +72,4 @@ sub create_link{ my $link = "$route?trt=$panel&Selected=$index"; return $link; } -1; +1; \ No newline at end of file diff --git a/Templates/html_controls.html.ep.xml b/Templates/html_controls.html.ep.xml index 0172a32..046295e 100644 --- a/Templates/html_controls.html.ep.xml +++ b/Templates/html_controls.html.ep.xml @@ -1,5 +1,5 @@ - %=l('${prefix}_${Label}') @@ -7,7 +7,7 @@ % param '${Name}' => $$${prefix}_data->{${Name}} unless param '${Name}'; %= select_field '${Name}' => @${Name}_options, class => 'input'

- ]]>
+ ]]> @@ -46,6 +46,15 @@

]]> + + %=l('${prefix}_${Label}') + + % param '${Name}' => $$${prefix}_data->{${Name}} unless param '${Name}'; + %= text_field '${Name}', size => '${size | 50}', class => 'textinput ${Name}' , pattern=>'${regexp | ".*"}' , placeholder=>'${placeholder | Name}', Readonly=>'true' +

+ ]]>
+ <%=l('${Value}')%>]]> @@ -71,7 +80,7 @@ %=l('${prefix}_${Label}') %=Search field - %=search field , class => 'searc${type_serial}' + %=search_field , class => 'searc${type_serial}' span>

]]> @@ -80,7 +89,7 @@

%=l('${Label}') - %=URL field , class => 'url${type_serial}' + %=URL_field , class => 'url${type_serial}' span>

]]> @@ -89,7 +98,7 @@

%=l('${Label}') - %=tel field, class => 'tel${type_serial}' + %=tel_field, class => 'tel${type_serial}' span>

]]> @@ -98,7 +107,7 @@

%=l('${Label}') - %=email field, class => 'emai${type_serial}' + %=email_field, class => 'emai${type_serial}' span>

]]> @@ -107,7 +116,7 @@

%=l('${Label}') - %=password field, class => 'pass${type_serial}' + %=password_field, class => 'pass${type_serial}' span>

]]> @@ -116,7 +125,7 @@

%=l('${Label}') - %=timedate field, class => 'time${type_serial}' + %=timedate_field, class => 'time${type_serial}' span>

]]> @@ -125,7 +134,7 @@

%=l('${Label}') - %=week field, class => 'week${type_serial}' + %=week_field, class => 'week${type_serial}' span>

]]> @@ -134,7 +143,7 @@

%=l('${Label}') - %=month field, class => 'mont${type_serial}' + %=month_field, class => 'mont${type_serial}' span>

]]> @@ -143,7 +152,7 @@

%=l('${Label}') - %=range field, class => 'rang${type_serial}' + %=range_field, class => 'rang${type_serial}' span>

]]> @@ -152,7 +161,7 @@

%=l('${Label}') - %=radio field, class => 'radi${type_serial}' + %=radio_field, class => 'radi${type_serial}' span>

]]> @@ -161,7 +170,7 @@

%=l('${Label}') - %=number field, class => 'numb${type_serial}' + %=number_field, class => 'numb${type_serial}' span>

]]> @@ -170,7 +179,7 @@

%=l('${Label}') - %=file field, class => 'file${type_serial}' + %=file_field, class => 'file${type_serial}' span>

]]> @@ -179,7 +188,7 @@

%=l('${Label}') - %=color field, class => 'colo${type_serial}' + %=color_field, class => 'colo${type_serial}' span>

]]> @@ -188,7 +197,7 @@

%=l('${Label}') - %=checkbox field, class => 'chec${type_serial}' + %=checkbox_field, class => 'chec${type_serial}' span>

]]> @@ -220,4 +229,4 @@ -
+ \ No newline at end of file diff --git a/html/letsencrypt-list.html b/html/letsencrypt-list.html index 4188918..f91d794 100644 --- a/html/letsencrypt-list.html +++ b/html/letsencrypt-list.html @@ -33,7 +33,8 @@ href="letsencrypt?page=0&page_stack=&Next=Next&wherenext=CHECK_DOMAINS_PAGE">CHECK_ALL_DOMAINS CHECK_ENABLED_DOMAINS -
Issuer: /C=--/ST=----/L=Ottawa/O=XYZ Corporation/OU=Main/CN=sme11.thereadclan.me.uk/emailAddress=admin@thereadclan.me.uk

Expiry: 2025-10-03T02:09:03Z

Not Before: 2024-10-03T02:09:03Z
+

> Issuer: /C=--/ST=----/L=Ottawa/O=XYZ Corporation/OU=Main/CN=sme11.thereadclan.me.uk/emailAddress=admin@thereadclan.me.uk

Expiry: 2025-10-03T02:09:03Z

Not Before: 2024-10-03T02:09:03Z

> +

CURRENT_LIST_OF_DOMAINS

diff --git a/json5/Letsencrypt.json5 b/json5/Letsencrypt.json5 new file mode 100644 index 0000000..0bb033b --- /dev/null +++ b/json5/Letsencrypt.json5 @@ -0,0 +1,200 @@ +// +// Generated by sm1-html-2-json5 version:0.5 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-18 14:47:03 +// +{ + 'PackageName': 'Letsencrypt', + 'prefix': 'lets', + 'MenuHeading': 'Miscellaneous', + 'MenuDescription': 'letsencrypt', + 'MenuNavigation': '2000 400', + 'firstPanel': 'LIST', + 'signalEvent': 'smeserver-letsencrypt-update', + 'html': [ + { + 'Name': 'List', + 'route': 'LIST', + 'Header': 'lets_List of Domains', + 'SubHeader': 'lets_FORM_DESCRIPTION', + 'Subheader': 'SERVER_IPS', + Input1: { + Name: 'InternalIP', + Type: 'ReadonlyText', + Label: 'Internal IP', + Value: 'stash("InternalIP")', + }, + Input2: { + Name: 'ObserverIP', + Type: 'ReadonlyText', + Label: 'Internet IP', + Value: 'stash("InternetIP")', + }, + 'Table1': { + 'Type': 'Table', + 'TableControl': 'DomainList', + 'TopHeadings': [ + 'Domain name / HOSTNAME', + 'Brief description', + 'Content', + 'LABEL_NAMESERVERS', + 'LABEL_POINT', + 'LABEL_LECERT', + 'IS_IN_CERT', + 'CHECK' + ], + 'Columns': [ + 'Table1-Domain name / HOSTNAME', + 'Table1-Brief description', + 'Table1-Content', + 'Table1-LABEL_NAMESERVERS', + 'Table1-LABEL_POINT', + 'Table1-LABEL_LECERT', + 'Table1-IS_IN_CERT', + 'Table1-CHECK' + ] + } + }, + { + 'Name': 'params', + 'route': 'PARAMS', + 'Header': 'Configuration for Letsencrypt', + 'SubHeader': 'Manage letsencrypt-config settings:', + 'Paragraph1': 'CONFIG_LETSENCRYPT', + 'Input1': { + 'Type': 'Select', + 'Value': 'Disabled', + 'Name': 'status', + 'Label': 'SERVICE_STATUS', + 'Options': [ + { + 'Value': 'disabled', + 'Text': 'Disabled' + }, + { + 'Value': 'enabled', + 'Text': 'Enabled' + }, + { + 'Value': 'test', + 'Text': 'TEST' + } + ] + }, + 'Input2': { + 'Type': 'Select', + 'Value': '', + 'Name': 'hookScript', + 'Label': 'HOOKSCRIPT_STATUS', + 'Options': [ + { + 'Value': 'disabled', + 'Text': 'Disabled' + }, + { + 'Value': 'enabled', + 'Text': 'Enabled' + } + ] + }, + 'Input3': { + 'Type': 'Select', + 'Value': '', + 'Name': 'hostOverride', + 'Label': 'HOSTOVERRIDE_STATUS', + 'Options': [ + { + 'Value': 'disabled', + 'Text': 'Disabled' + }, + { + 'Value': 'yes', + 'Text': 'Yes' + } + ] + }, + 'Input4': { + 'Type': 'Select', + 'Value': '', + 'Name': 'ACCEPT_TERMS', + 'Label': 'ACCEPT_TERMS_STATUS', + 'Options': [ + { + 'Value': 'disabled', + 'Text': 'Disabled' + }, + { + 'Value': 'yes', + 'Text': 'Yes' + } + ] + }, + 'Input5': { + 'Type': 'Select', + 'Value': '', + 'Name': 'API', + 'Label': 'API_STATUS', + 'Options': [ + { + 'Value': '2', + 'Text': '2' + } + ] + }, + 'Input6': { + 'Type': 'Select', + 'Value': '', + 'Name': 'keysize', + 'Label': 'KEYSIZE_STATUS', + 'Options': [ + { + 'Value': '2048', + 'Text': '2048' + }, + { + 'Value': '3072', + 'Text': '3072' + }, + { + 'Value': '4096', + 'Text': '4096' + } + ] + }, + 'Input7': { + 'Type': 'Select', + 'Value': '', + 'Name': 'configure', + 'Label': 'CONFIGUREMODE_STATUS', + 'Options': [ + { + 'Value': 'all', + 'Text': 'ALL' + }, + { + 'Value': 'domains', + 'Text': 'Domains' + }, + { + 'Value': 'hosts', + 'Text': 'HOSTS' + }, + { + 'Value': 'none', + 'Text': 'NONE' + } + ] + }, + 'Input8': { + 'Type': 'Text', + 'Value': '', + 'Name': 'email', + 'Label': 'EMAIL' + }, + 'Input9': { + 'Type': 'Submit', + 'Value': 'Save', + 'Name': 'Next', + 'Label': null + } + } + ] +} \ No newline at end of file diff --git a/json5/Nfsshare.json5 b/json5/Nfsshare.json5 index 949b8d0..2814c8e 100644 --- a/json5/Nfsshare.json5 +++ b/json5/Nfsshare.json5 @@ -20,7 +20,7 @@ }, Input2: { Name: 'ShareOwnerGrp', - Type: 'Selection', + Type: 'Select', Label: 'Share owner Group', Value: [ 'Write = admin, Read = group', @@ -31,7 +31,7 @@ }, Input3: { Name: 'EnableNFSshare', - Type: 'Selection', + Type: 'Select', Label: 'Enable the NFS Share', Value: [ 'Disabled', @@ -41,7 +41,7 @@ }, Input4: { Name: 'ShareOnLocalNetwork', - Type: 'Selection', + Type: 'Select', Label: 'EnableShare on local network', Value: [ 'Disabled', @@ -58,7 +58,7 @@ }, Input6: { Name: 'FileSystemPermissions', - Type: 'Selection', + Type: 'Select', Label: 'File system permissions', Value: [ 'Read only', @@ -68,7 +68,7 @@ }, Input7: { Name: 'WriteAsync', - Type: 'Selection', + Type: 'Select', Label: 'Write (a)synchronously', Value: [ 'Synchronous', @@ -77,7 +77,7 @@ }, Input8: { Name: 'DelayWrite', - Type: 'Selection', + Type: 'Select', Label: 'Delays the disk writing', Value: [ 'Write delay', @@ -87,7 +87,7 @@ }, Input9: { Name: 'Squash', - Type: 'Selection', + Type: 'Select', Label: 'Squash the power of users', Value: [ 'All users squash', @@ -98,7 +98,7 @@ }, Input10: { Name: 'BrowseParents', - Type: 'Selection', + Type: 'Select', Label: 'Browse the parent folders', Value: [ 'Hide folder', @@ -108,7 +108,7 @@ }, Input11: { Name: 'SecurePorts', - Type: 'Selection', + Type: 'Select', Label: 'Requests on secure ports', Value: [ 'Secure', @@ -143,4 +143,4 @@ } } ] -} +} \ No newline at end of file diff --git a/sm2gen.py b/sm2gen.py index bb87317..1518d05 100644 --- a/sm2gen.py +++ b/sm2gen.py @@ -526,9 +526,9 @@ if __name__ == "__main__": file.write(controller_perl) print(f"{controller_file} controller generated ok") except Exception as e: - print(f"A Chameleon controller render error occurred: {e}") + print(f"A Chameleon controller render error occurred: {e} {traceback.format_exc()}") except Exception as e: - print(f"A Chameleon controller template error occurred: {e}") + print(f"A Chameleon controller template error occurred: {e} {traceback.format_exc()}") # Generate Custom controller file try: @@ -542,9 +542,9 @@ if __name__ == "__main__": file.write(custom_controller_perl) print(f"{custom_controller_file} custom controller generated ok") except Exception as e: - print(f"A Chameleon custom controller render error occurred: {e}") + print(f"A Chameleon custom controller render error occurred: {e} {traceback.format_exc()}") except Exception as e: - print(f"A Chameleon custom controller template error occurred: {e}") + print(f"A Chameleon custom controller template error occurred: {e} {traceback.format_exc()}") # generate Layout file layout_template = PageTemplateFile("Templates/layout.html.ep.tem") @@ -608,7 +608,8 @@ if __name__ == "__main__": try: control_html = control_template.render( version=strVersion, **inner_html, prefix=prefix_is, - classname=class_name + classname=class_name, + type_serial=type_serial ) all_controls_html = all_controls_html + control_html except Exception as e: @@ -783,4 +784,4 @@ if __name__ == "__main__": # print( # f"Skipping the creation of {translated_lex_file} as it exists already" # ) - quit() # end of the program + quit() # end of the program \ No newline at end of file