From 0f5c4f948c55be3bac6dfefeb47cb368be1a369e Mon Sep 17 00:00:00 2001 From: Brian Read Date: Sat, 19 Oct 2024 18:58:55 +0100 Subject: [PATCH] Sort out selection options --- Targets/Letsencrypt/_lets_PARAMS.html.ep | 16 +- Targets/letsencrypt-config/__PARAMS.html.ep | 129 ++++++++++ .../letsencrypt-config/_lets_PARAMS.html.ep | 101 ++++++++ .../letsencrypt-config-Custom.pm | 63 +++++ .../letsencrypt-config/letsencrypt-config.css | 19 ++ .../letsencrypt-config.html.ep | 52 ++++ .../letsencrypt-config/letsencrypt-config.pm | 243 ++++++++++++++++++ .../letsencrypt-config_en.lex | 20 ++ Templates/html_controls.html.ep.xml | 2 +- activate-python-env | 1 + ...-config.json5 => Letsencrypt-config.json5} | 29 +-- ...rypt-list.json5 => Letsencrypt-list.json5} | 0 json5/Nfsshare.json5 | 18 +- sm2gen.py | 25 +- 14 files changed, 681 insertions(+), 37 deletions(-) create mode 100644 Targets/letsencrypt-config/__PARAMS.html.ep create mode 100644 Targets/letsencrypt-config/_lets_PARAMS.html.ep create mode 100644 Targets/letsencrypt-config/letsencrypt-config-Custom.pm create mode 100644 Targets/letsencrypt-config/letsencrypt-config.css create mode 100644 Targets/letsencrypt-config/letsencrypt-config.html.ep create mode 100644 Targets/letsencrypt-config/letsencrypt-config.pm create mode 100644 Targets/letsencrypt-config/letsencrypt-config_en.lex create mode 100644 activate-python-env rename json5/{letsencrypt-config.json5 => Letsencrypt-config.json5} (87%) rename json5/{letsencrypt-list.json5 => Letsencrypt-list.json5} (100%) 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: