diff --git a/Targets/Letsencrypt/_lets_PARAMS.html.ep b/Targets/Letsencrypt/_lets_PARAMS.html.ep
index 7a74d94..5ce400b 100644
--- a/Targets/Letsencrypt/_lets_PARAMS.html.ep
+++ b/Targets/Letsencrypt/_lets_PARAMS.html.ep
@@ -28,7 +28,7 @@
%=l('lets_SERVICE_STATUS')
- % my @status_options = Disabled;
+ % my @status_options = [{'Value': 'disabled', 'Text': 'Disabled'}, {'Value': 'enabled', 'Text': 'Enabled'}, {'Value': 'test', 'Text': 'TEST'}];
% param 'status' => $lets_data->{status} unless param 'status';
%= select_field 'status' => @status_options, class => 'input'
@@ -36,7 +36,7 @@
%=l('lets_HOOKSCRIPT_STATUS')
- % my @hookScript_options = ;
+ % my @hookScript_options = [{'Value': 'disabled', 'Text': 'Disabled'}, {'Value': 'enabled', 'Text': 'Enabled'}];
% param 'hookScript' => $lets_data->{hookScript} unless param 'hookScript';
%= select_field 'hookScript' => @hookScript_options, class => 'input'
@@ -44,7 +44,7 @@
%=l('lets_HOSTOVERRIDE_STATUS')
- % my @hostOverride_options = ;
+ % my @hostOverride_options = [{'Value': 'disabled', 'Text': 'Disabled'}, {'Value': 'yes', 'Text': 'Yes'}];
% param 'hostOverride' => $lets_data->{hostOverride} unless param 'hostOverride';
%= select_field 'hostOverride' => @hostOverride_options, class => 'input'
@@ -52,7 +52,7 @@
%=l('lets_ACCEPT_TERMS_STATUS')
- % my @ACCEPT_TERMS_options = ;
+ % my @ACCEPT_TERMS_options = [{'Value': 'disabled', 'Text': 'Disabled'}, {'Value': 'yes', 'Text': 'Yes'}];
% param 'ACCEPT_TERMS' => $lets_data->{ACCEPT_TERMS} unless param 'ACCEPT_TERMS';
%= select_field 'ACCEPT_TERMS' => @ACCEPT_TERMS_options, class => 'input'
@@ -60,7 +60,7 @@
%=l('lets_API_STATUS')
- % my @API_options = ;
+ % my @API_options = [{'Value': '2', 'Text': '2'}];
% param 'API' => $lets_data->{API} unless param 'API';
%= select_field 'API' => @API_options, class => 'input'
@@ -68,7 +68,7 @@
%=l('lets_KEYSIZE_STATUS')
- % my @keysize_options = ;
+ % my @keysize_options = [{'Value': '2048', 'Text': '2048'}, {'Value': '3072', 'Text': '3072'}, {'Value': '4096', 'Text': '4096'}];
% param 'keysize' => $lets_data->{keysize} unless param 'keysize';
%= select_field 'keysize' => @keysize_options, class => 'input'
@@ -76,7 +76,7 @@
%=l('lets_CONFIGUREMODE_STATUS')
- % my @configure_options = ;
+ % my @configure_options = [{'Value': 'all', 'Text': 'ALL'}, {'Value': 'domains', 'Text': 'Domains'}, {'Value': 'hosts', 'Text': 'HOSTS'}, {'Value': 'none', 'Text': 'NONE'}];
% param 'configure' => $lets_data->{configure} unless param 'configure';
%= select_field 'configure' => @configure_options, class => 'input'
@@ -94,4 +94,4 @@
%# Probably finally by a submit.
%end
-
+
\ No newline at end of file
diff --git a/Targets/letsencrypt-config/__PARAMS.html.ep b/Targets/letsencrypt-config/__PARAMS.html.ep
new file mode 100644
index 0000000..9afbf75
--- /dev/null
+++ b/Targets/letsencrypt-config/__PARAMS.html.ep
@@ -0,0 +1,129 @@
+%#
+%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-19 16:14:17
+%#
+
+
+
+ %= l('_Hello_PARAMS');
+
+ % my $btn = l('APPLY');
+ %= form_for "letsencrypt-configd" => (method => 'POST') => begin
+
+ % param 'trt' => $_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $_data->{trt}
+ %# Inputs etc in here.
+
+
<%=l('FORM_TITLE')%>
+
+
<%=l('Manage_letsencrypt-config_settings:')%>
+
+
+ %=l('CONFIG_LE')
+
+
+
+ %=l('SERVICE_STATUS')
+
+
+
+ %=l('_')
+
+ % my @status_options = [{'Value' => 'disabled', 'Text' => 'Disabled'}, {'Value' => 'enabled', 'Text' => 'Enabled'}, {'Value' => 'test', 'Text' => 'TEST'}];
+ % param 'status' => $_data->{status} unless param 'status';
+ %= select_field 'status' => @status_options, class => 'input'
+
+
+
+ %=l('HOOKSCRIPT_STATUS')
+
+
+
+ %=l('_')
+
+ % my @hookScript_options = [{'Value' => 'disabled', 'Text' => 'Disabled'}, {'Value' => 'enabled', 'Text' => 'Enabled'}];
+ % param 'hookScript' => $_data->{hookScript} unless param 'hookScript';
+ %= select_field 'hookScript' => @hookScript_options, class => 'input'
+
+
+
+ %=l('HOSTOVERRIDE_STATUS')
+
+
+
+ %=l('_')
+
+ % my @hostOverride_options = [{'Value' => 'disabled', 'Text' => 'Disabled'}, {'Value' => 'yes', 'Text' => 'Yes'}];
+ % param 'hostOverride' => $_data->{hostOverride} unless param 'hostOverride';
+ %= select_field 'hostOverride' => @hostOverride_options, class => 'input'
+
+
+
+ %=l('ACCEPT_TERMS_STATUS')
+
+
+
+ %=l('_')
+
+ % my @ACCEPT_TERMS_options = [{'Value' => 'disabled', 'Text' => 'Disabled'}, {'Value' => 'yes', 'Text' => 'Yes'}];
+ % param 'ACCEPT_TERMS' => $_data->{ACCEPT_TERMS} unless param 'ACCEPT_TERMS';
+ %= select_field 'ACCEPT_TERMS' => @ACCEPT_TERMS_options, class => 'input'
+
+
+
+ %=l('API_STATUS')
+
+
+
+ %=l('_')
+
+ % my @API_options = [{'Value' => '2', 'Text' => '2'}];
+ % param 'API' => $_data->{API} unless param 'API';
+ %= select_field 'API' => @API_options, class => 'input'
+
+
+
+ %=l('KEYSIZE_STATUS')
+
+
+
+ %=l('_')
+
+ % my @keysize_options = [{'Value' => '2048', 'Text' => '2048'}, {'Value' => '3072', 'Text' => '3072'}, {'Value' => '4096', 'Text' => '4096'}];
+ % param 'keysize' => $_data->{keysize} unless param 'keysize';
+ %= select_field 'keysize' => @keysize_options, class => 'input'
+
+
+
+ %=l('CONFIGUREMODE_STATUS')
+
+
+
+ %=l('_')
+
+ % my @configure_options = [{'Value' => 'all', 'Text' => 'ALL'}, {'Value' => 'domains', 'Text' => 'Domains'}, {'Value' => 'hosts', 'Text' => 'HOSTS'}, {'Value' => 'none', 'Text' => 'NONE'}];
+ % param 'configure' => $_data->{configure} unless param 'configure';
+ %= select_field 'configure' => @configure_options, class => 'input'
+
+
+
+ %=l('EMAIL')
+
+
+
+ %=l('_')
+
+ % param 'email' => $_data->{email} unless param 'email';
+ %= text_field 'email', size => '50', class => 'textinput email' , pattern=>'.*' , placeholder=>'email'
+
+
+
+ %= submit_button l('Save'), class => 'action subm9'
+
+
+ %# Probably finally by a submit.
+ %end
+
diff --git a/Targets/letsencrypt-config/_lets_PARAMS.html.ep b/Targets/letsencrypt-config/_lets_PARAMS.html.ep
new file mode 100644
index 0000000..050a14d
--- /dev/null
+++ b/Targets/letsencrypt-config/_lets_PARAMS.html.ep
@@ -0,0 +1,101 @@
+%#
+%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-19 18:55:51
+%#
+
+
+
+ %= l('lets_Hello_PARAMS');
+
+ % my $btn = l('lets_APPLY');
+ %= form_for "letsencrypt-configd" => (method => 'POST') => begin
+
+ % param 'trt' => $lets_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $lets_data->{trt}
+ %# Inputs etc in here.
+
+
<%=l('lets_FORM_TITLE')%>
+
+
<%=l('lets_Manage_letsencrypt-config_settings:')%>
+
+
+ %=l('lets_CONFIG_LE')
+
+
+
+ %=l('lets_SERVICE_STATUS')
+
+
+
+ %=l('lets_SERVICE_STATUS')
+
+ % my @status_options = [['Disabled' => 'disabled'], ['Enabled' => 'enabled'], ['TEST' => 'test']];
+ % param 'status' => $lets_data->{status} unless param 'status';
+ %= select_field 'status' => @status_options, class => 'input'
+
+
+
+ %=l('lets_HOOKSCRIPT_STATUS')
+
+ % my @hookScript_options = [['Disabled' => 'disabled'], ['Enabled' => 'enabled']];
+ % param 'hookScript' => $lets_data->{hookScript} unless param 'hookScript';
+ %= select_field 'hookScript' => @hookScript_options, class => 'input'
+
+
+
+ %=l('lets_HOSTOVERRIDE_STATUS')
+
+ % my @hostOverride_options = [['Disabled' => 'disabled'], ['Yes' => 'yes']];
+ % param 'hostOverride' => $lets_data->{hostOverride} unless param 'hostOverride';
+ %= select_field 'hostOverride' => @hostOverride_options, class => 'input'
+
+
+
+ %=l('lets_ACCEPT_TERMS_STATUS')
+
+ % my @ACCEPT_TERMS_options = [['Disabled' => 'disabled'], ['Yes' => 'yes']];
+ % param 'ACCEPT_TERMS' => $lets_data->{ACCEPT_TERMS} unless param 'ACCEPT_TERMS';
+ %= select_field 'ACCEPT_TERMS' => @ACCEPT_TERMS_options, class => 'input'
+
+
+
+ %=l('lets_API_STATUS')
+
+ % my @API_options = [['2' => '2']];
+ % param 'API' => $lets_data->{API} unless param 'API';
+ %= select_field 'API' => @API_options, class => 'input'
+
+
+
+ %=l('lets_KEYSIZE_STATUS')
+
+ % my @keysize_options = [['2048' => '2048'], ['3072' => '3072'], ['4096' => '4096']];
+ % param 'keysize' => $lets_data->{keysize} unless param 'keysize';
+ %= select_field 'keysize' => @keysize_options, class => 'input'
+
+
+
+ %=l('lets_CONFIGUREMODE_STATUS')
+
+ % my @configure_options = [['ALL' => 'all'], ['Domains' => 'domains'], ['HOSTS' => 'hosts'], ['NONE' => 'none']];
+ % param 'configure' => $lets_data->{configure} unless param 'configure';
+ %= select_field 'configure' => @configure_options, class => 'input'
+
+
+
+ %=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-config/letsencrypt-config-Custom.pm b/Targets/letsencrypt-config/letsencrypt-config-Custom.pm
new file mode 100644
index 0000000..cd84470
--- /dev/null
+++ b/Targets/letsencrypt-config/letsencrypt-config-Custom.pm
@@ -0,0 +1,63 @@
+#
+# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-19 18:55:51
+#
+#
+# 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;
\ No newline at end of file
diff --git a/Targets/letsencrypt-config/letsencrypt-config.css b/Targets/letsencrypt-config/letsencrypt-config.css
new file mode 100644
index 0000000..3ebf71c
--- /dev/null
+++ b/Targets/letsencrypt-config/letsencrypt-config.css
@@ -0,0 +1,19 @@
+/*
+ Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-19 18:55:51
+*/
+.letsencrypt-config-panel {}
+.name {}
+.rout {}
+.head {}
+.subh {}
+.para1 {}
+.para2 {}
+.sele1 {}
+.sele2 {}
+.sele3 {}
+.sele4 {}
+.sele5 {}
+.sele6 {}
+.sele7 {}
+.text8 {}
+.subm9 {}
diff --git a/Targets/letsencrypt-config/letsencrypt-config.html.ep b/Targets/letsencrypt-config/letsencrypt-config.html.ep
new file mode 100644
index 0000000..27ec496
--- /dev/null
+++ b/Targets/letsencrypt-config/letsencrypt-config.html.ep
@@ -0,0 +1,52 @@
+%#
+%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-19 18:55:51
+%#
+% layout 'default', title => "Sme server 2 - letsencrypt-config", share_dir => './';
+%# css specific to this panel:
+% content_for 'module' => begin
+%= stylesheet '/css/letsencrypt-config.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 "PARAMS") {
+ %= include 'partials/_lets_PARAMS'
+ %}
+
+
+
+
+%end
diff --git a/Targets/letsencrypt-config/letsencrypt-config.pm b/Targets/letsencrypt-config/letsencrypt-config.pm
new file mode 100644
index 0000000..34ad2ff
--- /dev/null
+++ b/Targets/letsencrypt-config/letsencrypt-config.pm
@@ -0,0 +1,243 @@
+package SrvMngr::Controller::letsencrypt-config;
+#
+# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-19 18:55:51
+#
+#----------------------------------------------------------------------
+# heading : Miscellaneous
+# description : letsencrypt-config
+# navigation : 2000 400
+#
+# name : letsencrypt-config, method : get, url : /letsencrypt-config, ctlact : letsencrypt-config#main
+# name : letsencrypt-configu, method : post, url : /letsencrypt-configu, ctlact : letsencrypt-config#do_update
+# name : letsencrypt-configd, method : get, url : /letsencrypt-configd, ctlact : letsencrypt-config#do_display
+#
+# routes : end
+#
+# Documentation: https://wiki.contribs.org/letsencrypt-config
+#----------------------------------------------------------------------
+
+#
+# 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-config-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-config');
+ my $modul = '';
+
+ $lets_data{'trt'} = 'PARAMS';
+
+ #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(
+ title => $title,
+ modul => $modul,
+ lets_data => \%lets_data
+ );
+ $c->render( template => "letsencrypt-config" );
+}
+
+# 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-config');
+
+ # 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') || '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(\%lets_data);
+ $thispanel = 'PARAMS';
+ }
+
+
+ if ($ret ne "ok") {
+ # return to the panel with error message
+ $c->stash(error => $c->l($ret));
+ $c->render("letsencrypt-config");
+ } else {
+ #Do whatever is needed, including writing values to the DB
+
+ 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-config");
+ } 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'} = 'PARAMS';
+ } else {
+ $lets_data{'trt'} = 'none';
+ }
+ $c->render("letsencrypt-config");
+ }
+}
+
+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-config');
+
+ # 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') || '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($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-config");
+}
+1;
diff --git a/Targets/letsencrypt-config/letsencrypt-config_en.lex b/Targets/letsencrypt-config/letsencrypt-config_en.lex
new file mode 100644
index 0000000..c7d70cd
--- /dev/null
+++ b/Targets/letsencrypt-config/letsencrypt-config_en.lex
@@ -0,0 +1,20 @@
+#
+# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-10-19 18:55:51
+#
+'lets_FORM_TITLE' => 'FORM TITLE',
+'lets_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful',
+'lets_Manage_letsencrypt-config_settings:' => 'Manage letsencrypt-config settings:',
+'lets_Hello_PARAMS' => 'Hello PARAMS',
+'lets_CONFIG_LE' => 'CONFIG LE',
+'lets_Save' => 'Save',
+'lets_SERVICE_STATUS' => 'SERVICE STATUS',
+'lets_SERVICE_STATUS' => 'SERVICE STATUS',
+'lets_API_STATUS' => 'API STATUS',
+'lets_APPLY' => 'Apply',
+'lets_CONFIGUREMODE_STATUS' => 'CONFIGUREMODE STATUS',
+'lets_EMAIL' => 'Email',
+'lets_KEYSIZE_STATUS' => 'KEYSIZE STATUS',
+'lets_HOOKSCRIPT_STATUS' => 'HOOKSCRIPT STATUS',
+'lets_letsencrypt-config' => 'Letsencrypt-config',
+'lets_HOSTOVERRIDE_STATUS' => 'HOSTOVERRIDE STATUS',
+'lets_ACCEPT_TERMS_STATUS' => 'ACCEPT TERMS STATUS',
diff --git a/Templates/html_controls.html.ep.xml b/Templates/html_controls.html.ep.xml
index 046295e..aa40f38 100644
--- a/Templates/html_controls.html.ep.xml
+++ b/Templates/html_controls.html.ep.xml
@@ -3,7 +3,7 @@
%=l('${prefix}_${Label}')
- % my @${Name}_options = ${Value};
+ % my @${Name}_options = ${structure:OptionsInPerl};
% param '${Name}' => $$${prefix}_data->{${Name}} unless param '${Name}';
%= select_field '${Name}' => @${Name}_options, class => 'input'
diff --git a/activate-python-env b/activate-python-env
new file mode 100644
index 0000000..1852f6b
--- /dev/null
+++ b/activate-python-env
@@ -0,0 +1 @@
+source bin/activate
diff --git a/json5/letsencrypt-config.json5 b/json5/Letsencrypt-config.json5
similarity index 87%
rename from json5/letsencrypt-config.json5
rename to json5/Letsencrypt-config.json5
index b327817..f0e2bb7 100644
--- a/json5/letsencrypt-config.json5
+++ b/json5/Letsencrypt-config.json5
@@ -3,7 +3,7 @@
//
{
'PackageName': 'letsencrypt-config',
- 'prefix': '',
+ 'prefix': 'lets',
'MenuHeading': 'Miscellaneous',
'MenuDescription': 'letsencrypt-config',
'MenuNavigation': '2000 400',
@@ -17,11 +17,11 @@
'SubHeader': 'Manage letsencrypt-config settings:',
'Paragraph1': 'CONFIG_LE',
'Paragraph2': 'SERVICE_STATUS',
- 'Input1': {
+ 'Input1': {
'Type': 'Select',
- 'Value': '',
+ 'Value': 'Disabled',
'Name': 'status',
- 'Label': null,
+ 'Label': 'SERVICE_STATUS',
'Options': [
{
'Value': 'disabled',
@@ -37,12 +37,11 @@
}
]
},
- 'Paragraph3': 'HOOKSCRIPT_STATUS',
'Input2': {
'Type': 'Select',
'Value': '',
'Name': 'hookScript',
- 'Label': null,
+ 'Label': 'HOOKSCRIPT_STATUS',
'Options': [
{
'Value': 'disabled',
@@ -54,12 +53,11 @@
}
]
},
- 'Paragraph4': 'HOSTOVERRIDE_STATUS',
'Input3': {
'Type': 'Select',
'Value': '',
'Name': 'hostOverride',
- 'Label': null,
+ 'Label': 'HOSTOVERRIDE_STATUS',
'Options': [
{
'Value': 'disabled',
@@ -71,12 +69,11 @@
}
]
},
- 'Paragraph5': 'ACCEPT_TERMS_STATUS',
'Input4': {
'Type': 'Select',
'Value': '',
'Name': 'ACCEPT_TERMS',
- 'Label': null,
+ 'Label': 'ACCEPT_TERMS_STATUS',
'Options': [
{
'Value': 'disabled',
@@ -88,12 +85,11 @@
}
]
},
- 'Paragraph6': 'API_STATUS',
'Input5': {
'Type': 'Select',
'Value': '',
'Name': 'API',
- 'Label': null,
+ 'Label': 'API_STATUS',
'Options': [
{
'Value': '2',
@@ -101,12 +97,11 @@
}
]
},
- 'Paragraph7': 'KEYSIZE_STATUS',
'Input6': {
'Type': 'Select',
'Value': '',
'Name': 'keysize',
- 'Label': null,
+ 'Label': 'KEYSIZE_STATUS',
'Options': [
{
'Value': '2048',
@@ -122,12 +117,11 @@
}
]
},
- 'Paragraph8': 'CONFIGUREMODE_STATUS',
'Input7': {
'Type': 'Select',
'Value': '',
'Name': 'configure',
- 'Label': null,
+ 'Label': 'CONFIGUREMODE_STATUS',
'Options': [
{
'Value': 'all',
@@ -147,12 +141,11 @@
}
]
},
- 'Paragraph9': 'EMAIL',
'Input8': {
'Type': 'Text',
'Value': '',
'Name': 'email',
- 'Label': null
+ 'Label': 'EMAIL'
},
'Input9': {
'Type': 'Submit',
diff --git a/json5/letsencrypt-list.json5 b/json5/Letsencrypt-list.json5
similarity index 100%
rename from json5/letsencrypt-list.json5
rename to json5/Letsencrypt-list.json5
diff --git a/json5/Nfsshare.json5 b/json5/Nfsshare.json5
index 2814c8e..6a5f3bf 100644
--- a/json5/Nfsshare.json5
+++ b/json5/Nfsshare.json5
@@ -22,7 +22,7 @@
Name: 'ShareOwnerGrp',
Type: 'Select',
Label: 'Share owner Group',
- Value: [
+ Options: [
'Write = admin, Read = group',
'Write = group, Read = everyone',
'Write = group, Read = group',
@@ -33,7 +33,7 @@
Name: 'EnableNFSshare',
Type: 'Select',
Label: 'Enable the NFS Share',
- Value: [
+ Options: [
'Disabled',
'Enabled',
],
@@ -43,7 +43,7 @@
Name: 'ShareOnLocalNetwork',
Type: 'Select',
Label: 'EnableShare on local network',
- Value: [
+ Options: [
'Disabled',
'Enabled',
],
@@ -60,7 +60,7 @@
Name: 'FileSystemPermissions',
Type: 'Select',
Label: 'File system permissions',
- Value: [
+ Options: [
'Read only',
'Read and Write',
],
@@ -70,7 +70,7 @@
Name: 'WriteAsync',
Type: 'Select',
Label: 'Write (a)synchronously',
- Value: [
+ Options: [
'Synchronous',
'Asynchronous',
],
@@ -79,7 +79,7 @@
Name: 'DelayWrite',
Type: 'Select',
Label: 'Delays the disk writing',
- Value: [
+ Options: [
'Write delay',
'No write delay',
],
@@ -89,7 +89,7 @@
Name: 'Squash',
Type: 'Select',
Label: 'Squash the power of users',
- Value: [
+ Options: [
'All users squash',
'No root squash',
'root squash',
@@ -100,7 +100,7 @@
Name: 'BrowseParents',
Type: 'Select',
Label: 'Browse the parent folders',
- Value: [
+ Options: [
'Hide folder',
'Show folder',
],
@@ -110,7 +110,7 @@
Name: 'SecurePorts',
Type: 'Select',
Label: 'Requests on secure ports',
- Value: [
+ Options: [
'Secure',
'Insecure',
],
diff --git a/sm2gen.py b/sm2gen.py
index 1518d05..73e43e9 100644
--- a/sm2gen.py
+++ b/sm2gen.py
@@ -28,6 +28,24 @@ json5_html_list: list = []
ini_file_path = os.path.expanduser("~/.smegit/conf")
OPENAI_API_KEY = ""
+def example_function(**kwargs):
+ print(kwargs)
+
+def python_to_perl_structure(data):
+ #print(data)
+ if data:
+ if isinstance(data, list):
+ # Convert each dictionary in the list to Perl format: ['text' => 'value']
+ elements = [
+ f"['{item['Text']}' => '{item['Value']}']"
+ for item in data
+ ]
+ return '[' + ', '.join(elements) + ']'
+ else:
+ raise TypeError("Expected a list of dictionaries")
+ return ""
+
+
def assemble_version_string():
try:
chameleon_version = pkg_resources.get_distribution("Chameleon").version
@@ -600,6 +618,10 @@ if __name__ == "__main__":
type_serial = "".join(char for char in html_control if char.isdigit())
class_name = html_Type.lower()[:4]+type_serial
acc_css_entries += f".{class_name} {{}}\n"
+ OptionsInPerl = python_to_perl_structure(inner_html.get("Options", ""))
+ #if html_Type == "Select":
+ # example_function(**inner_html)
+ # quit(1)
if html_Type == "Table":
acc_css_entries += f"thead .{class_name} {{}}\n"
acc_css_entries += f"tbody .{class_name} {{}}\n"
@@ -609,7 +631,8 @@ if __name__ == "__main__":
control_html = control_template.render(
version=strVersion, **inner_html, prefix=prefix_is,
classname=class_name,
- type_serial=type_serial
+ type_serial=type_serial,
+ OptionsInPerl=OptionsInPerl
)
all_controls_html = all_controls_html + control_html
except Exception as e: