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,$trt) = @_;
+ $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");
+
+ my %lets_data = ();
+ my $title = $c->l('lets_Letsencrypt_certificate');
+ my $modul = "";
+
+ # 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
+ if (! $trt){
+ $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 Get selected row (if applicable) LIST
+ %selectedrow = $c->get_selected_LIST($lets_data{'Selected'},$is_new_record);
+ }
+
+ if ($trt eq 'PARAMS'){
+ #Validate Get selected row (if applicable) PARAMS
+ %selectedrow = $c->get_selected_PARAMS($lets_data{'Selected'},$is_new_record);
+ }
+
+ if ($trt eq 'CHECKALLDOMAINS'){
+ #Validate Get selected row (if applicable) CHECKALLDOMAINS
+ %selectedrow = $c->get_selected_CHECKALLDOMAINS($lets_data{'Selected'},$is_new_record);
+ }
+
+ if ($trt eq 'CHECKALLENABLEDDOMAINS'){
+ #Validate Get selected row (if applicable) CHECKALLENABLEDDOMAINS
+ %selectedrow = $c->get_selected_CHECKALLENABLEDDOMAINS($lets_data{'Selected'},$is_new_record);
+ }
+
+ if ($trt eq 'CHECKONEDOMAIN'){
+ #Validate Get selected row (if applicable) CHECKONEDOMAIN
+ %selectedrow = $c->get_selected_CHECKONEDOMAIN($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;
+
+ # Set up other shared data according to the panel to go to
+
+ if ($trt eq 'LIST'){
+ # pickup any other contents needed and load them into hash shared with panel
+ my %returned_hash;
+ # subroutine returns a hash directly
+ %returned_hash = $c->get_data_for_panel_LIST();
+ # Copy each key-value pair from the returned hash to the prefix data hash
+ while (my ($key, $value) = each %returned_hash) {
+ $lets_data{$key} = $value;
+ }
+ }
+
+ if ($trt eq 'PARAMS'){
+ # pickup any other contents needed and load them into hash shared with panel
+ my %returned_hash;
+ # subroutine returns a hash directly
+ %returned_hash = $c->get_data_for_panel_PARAMS();
+ # Copy each key-value pair from the returned hash to the prefix data hash
+ while (my ($key, $value) = each %returned_hash) {
+ $lets_data{$key} = $value;
+ }
+ }
+
+ if ($trt eq 'CHECKALLDOMAINS'){
+ # pickup any other contents needed and load them into hash shared with panel
+ my %returned_hash;
+ # subroutine returns a hash directly
+ %returned_hash = $c->get_data_for_panel_CHECKALLDOMAINS();
+ # Copy each key-value pair from the returned hash to the prefix data hash
+ while (my ($key, $value) = each %returned_hash) {
+ $lets_data{$key} = $value;
+ }
+ }
+
+ if ($trt eq 'CHECKALLENABLEDDOMAINS'){
+ # pickup any other contents needed and load them into hash shared with panel
+ my %returned_hash;
+ # subroutine returns a hash directly
+ %returned_hash = $c->get_data_for_panel_CHECKALLENABLEDDOMAINS();
+ # Copy each key-value pair from the returned hash to the prefix data hash
+ while (my ($key, $value) = each %returned_hash) {
+ $lets_data{$key} = $value;
+ }
+ }
+
+ if ($trt eq 'CHECKONEDOMAIN'){
+ # pickup any other contents needed and load them into hash shared with panel
+ my %returned_hash;
+ # subroutine returns a hash directly
+ %returned_hash = $c->get_data_for_panel_CHECKONEDOMAIN();
+ # Copy each key-value pair from the returned hash to the prefix data hash
+ while (my ($key, $value) = each %returned_hash) {
+ $lets_data{$key} = $value;
+ }
+ }
+
+
+ # and table control fields
+ $c->stash(DomainList=>$c->get_DomainList());
+
+
+ # Data for panel
+ $c->stash(
+ title => $title,
+ modul => $modul,
+ lets_data => \%lets_data
+ );
+ $c->render(template => "letsencrypt");
+}
+1;
\ No newline at end of file
diff --git a/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Letsencrypt/en.pm b/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Letsencrypt/en.pm
new file mode 100644
index 0000000..d4bacec
--- /dev/null
+++ b/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Letsencrypt/en.pm
@@ -0,0 +1,72 @@
+package SrvMngr::I18N::Modules::Letsencrypt::en;
+use strict;
+use warnings;
+use utf8;
+use Mojo::Base 'SrvMngr::I18N';
+
+use SrvMngr::I18N::Modules::General::en;
+
+my %lexicon = (
+#
+# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
+#
+'lets_Manage_letsencrypt-config_settings:' => 'Manage letsencrypt-config settings',
+'lets_HOOKSCRIPT_STATUS' => 'Hookscript Status',
+'lets_SERVICE_STATUS' => 'Service Status',
+'lets_EMAIL' => 'Email',
+'lets_Back' => 'Back',
+'lets_Internal_IP' => 'Internal IP',
+'lets_Save' => 'Save',
+'lets_Issuer' => 'Issuer',
+'lets_IS_IN_CERT' => 'Is In cart',
+'lets_For_this_Server' => 'For this Server',
+'lets_Loop_through_checking_the_letsencrypt' => 'Loop through checking the letsencrypt status for each configured domain',
+'lets_Loop_through_checking_the_letsencrypt' => 'Loop through checking the letsencrypt status for each configured domain which is enabled',
+'lets_Check_just_one_domain' => 'Check just one domain',
+'lets_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful',
+'lets_Check_all_domains' => 'Check all domains',
+'lets_LIST_panel_action_was_successful' => 'LIST panel action was successful',
+'lets_Status_Report' => 'Status Report',
+'lets_LABEL_NAMESERVERS' => 'Label timeservers',
+'lets_Loop_through_and_check_the' => 'Loop through and check the letsencrypt status for a specific domain',
+'lets_Letsencrypt_certificate' => 'Letsencrypt certificate',
+'lets_Error_Status_Report' => 'Error Status Report',
+'lets_Not_Before' => 'Not Before',
+'lets_Content' => 'Content',
+'lets_CONFIG_LETSENCRYPT' => 'confirm Letsencrypt',
+'lets_API_STATUS' => 'ape Status',
+'lets_ACCEPT_TERMS_STATUS' => 'Accept Terms Status',
+'lets_Check_all_enabled_domains' => 'Check all enabled domains',
+'lets_All_domains_check_result' => 'All domains check result',
+'lets_CHECKALLDOMAINS_panel_action_was_successful' => 'CHECKALLDOMAINS panel action was successful',
+'lets_Domains_name' => 'Domains name',
+'lets_HOSTOVERRIDE_STATUS' => 'Hostoverride Status',
+'lets_List_of_Domains_and_Hosts' => 'List of Domains and Hosts',
+'lets_Brief_description' => 'Brief description',
+'lets_KEYSIZE_STATUS' => 'Keysize Status',
+'lets_Domain_name_/_HOSTNAME' => 'Domain name / HOSTNAME',
+'lets_Enabled_domains_check_result' => 'Enabled domains check result',
+'lets_CHECKALLENABLEDDOMAINS_panel_action_was_successful' => 'CHECKALLENABLEDDOMAINS panel action was successful',
+'lets_Internet_IP' => 'Internet IP',
+'lets_Expiry' => 'Expiry',
+'lets_CHECK_ALL_DOMAINS' => 'Check All Domains',
+'lets_LABEL_POINT' => 'Label Point',
+'lets_CHECK' => 'Check',
+'lets_CONFIG' => 'Config',
+'lets_Current_certificate_details' => 'Current certificate details',
+'lets_LABEL_LECERT' => 'Label secret',
+'lets_One_domain_check_result' => 'One domain check result',
+'lets_CHECKONEDOMAIN_panel_action_was_successful' => 'CHECKONEDOMAIN panel action was successful',
+'lets_CONFIGUREMODE_STATUS' => 'Configuremode Status',
+'lets_CHECK_ALL_ENABLED_DOMAINS' => 'Check All Enabled Domains',
+'lets_External_Interface_IP' => 'External Interface IP',
+'lets_APPLY' => 'Apply',
+);
+
+our %Lexicon = (
+ %{ SrvMngr::I18N::Modules::General::en::Lexicon },
+ %lexicon
+);
+
+
+1;
diff --git a/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Letsencrypt/letsencrypt_en.lex b/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Letsencrypt/letsencrypt_en.lex
new file mode 100644
index 0000000..7da303e
--- /dev/null
+++ b/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Letsencrypt/letsencrypt_en.lex
@@ -0,0 +1,54 @@
+#
+# Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
+#
+'lets_Manage_letsencrypt-config_settings:' => 'Manage letsencrypt-config settings',
+'lets_HOOKSCRIPT_STATUS' => 'Hookscript Status',
+'lets_SERVICE_STATUS' => 'Service Status',
+'lets_EMAIL' => 'Email',
+'lets_Back' => 'Back',
+'lets_Internal_IP' => 'Internal IP',
+'lets_Save' => 'Save',
+'lets_Issuer' => 'Issuer',
+'lets_IS_IN_CERT' => 'Is In cart',
+'lets_For_this_Server' => 'For this Server',
+'lets_Loop_through_checking_the_letsencrypt' => 'Loop through checking the letsencrypt status for each configured domain',
+'lets_Loop_through_checking_the_letsencrypt' => 'Loop through checking the letsencrypt status for each configured domain which is enabled',
+'lets_Check_just_one_domain' => 'Check just one domain',
+'lets_PARAMS_panel_action_was_successful' => 'PARAMS panel action was successful',
+'lets_Check_all_domains' => 'Check all domains',
+'lets_LIST_panel_action_was_successful' => 'LIST panel action was successful',
+'lets_Status_Report' => 'Status Report',
+'lets_LABEL_NAMESERVERS' => 'Label timeservers',
+'lets_Loop_through_and_check_the' => 'Loop through and check the letsencrypt status for a specific domain',
+'lets_Letsencrypt_certificate' => 'Letsencrypt certificate',
+'lets_Error_Status_Report' => 'Error Status Report',
+'lets_Not_Before' => 'Not Before',
+'lets_Content' => 'Content',
+'lets_CONFIG_LETSENCRYPT' => 'confirm Letsencrypt',
+'lets_API_STATUS' => 'ape Status',
+'lets_ACCEPT_TERMS_STATUS' => 'Accept Terms Status',
+'lets_Check_all_enabled_domains' => 'Check all enabled domains',
+'lets_All_domains_check_result' => 'All domains check result',
+'lets_CHECKALLDOMAINS_panel_action_was_successful' => 'CHECKALLDOMAINS panel action was successful',
+'lets_Domains_name' => 'Domains name',
+'lets_HOSTOVERRIDE_STATUS' => 'Hostoverride Status',
+'lets_List_of_Domains_and_Hosts' => 'List of Domains and Hosts',
+'lets_Brief_description' => 'Brief description',
+'lets_KEYSIZE_STATUS' => 'Keysize Status',
+'lets_Domain_name_/_HOSTNAME' => 'Domain name / HOSTNAME',
+'lets_Enabled_domains_check_result' => 'Enabled domains check result',
+'lets_CHECKALLENABLEDDOMAINS_panel_action_was_successful' => 'CHECKALLENABLEDDOMAINS panel action was successful',
+'lets_Internet_IP' => 'Internet IP',
+'lets_Expiry' => 'Expiry',
+'lets_CHECK_ALL_DOMAINS' => 'Check All Domains',
+'lets_LABEL_POINT' => 'Label Point',
+'lets_CHECK' => 'Check',
+'lets_CONFIG' => 'Config',
+'lets_Current_certificate_details' => 'Current certificate details',
+'lets_LABEL_LECERT' => 'Label secret',
+'lets_One_domain_check_result' => 'One domain check result',
+'lets_CHECKONEDOMAIN_panel_action_was_successful' => 'CHECKONEDOMAIN panel action was successful',
+'lets_CONFIGUREMODE_STATUS' => 'Configuremode Status',
+'lets_CHECK_ALL_ENABLED_DOMAINS' => 'Check All Enabled Domains',
+'lets_External_Interface_IP' => 'External Interface IP',
+'lets_APPLY' => 'Apply',
diff --git a/root/usr/share/smanager/themes/default/public/css/letsencrypt.css b/root/usr/share/smanager/themes/default/public/css/letsencrypt.css
new file mode 100644
index 0000000..3d2f1ba
--- /dev/null
+++ b/root/usr/share/smanager/themes/default/public/css/letsencrypt.css
@@ -0,0 +1,90 @@
+/*
+Generated by SM2Gen version: SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
+*/
+.Letsencrypt-panel {}
+.name {}
+.rout {}
+.grou {}
+.link2 {}
+.link3 {}
+.link4 {}
+.endg {}
+.subh2 {}
+.read4 {}
+.read5 {}
+.read6 {}
+.subh3 {}
+.read1 {}
+.read2 {}
+.read3 {}
+.subh4 {}
+.tabl1 {}
+thead .tabl1 {}
+tbody .tabl1 {}
+.name {}
+.rout {}
+.subh {}
+.para1 {}
+.sele1 {}
+.sele2 {}
+.sele3 {}
+.sele4 {}
+.sele5 {}
+.sele6 {}
+.sele7 {}
+.emai8 {}
+.subm9 {}
+.name {}
+.rout {}
+.head {}
+.subh {}
+.text1 {}
+.back2 {}
+.name {}
+.rout {}
+.head {}
+.subh {}
+.text1 {}
+.back2 {}
+.name {}
+.rout {}
+.head {}
+.subh {}
+.read1 {}
+.text2 {}
+.back3 {}
+ .inline-buttons {
+ display: flex; /* Use flexbox to arrange items horizontally */
+ gap: 10px; /* Optional: Add space between buttons */
+ }
+
+ .inline-buttons .link {
+ /* Additional styling can be added here if needed */
+ }
+
+
+ .inline-buttons .link {
+ display: inline-block; /* Keep links as inline-block for button shape */
+ padding: 7px 14px; /* Adjusted padding to approximate 70% of the original */
+ margin: 0; /* Remove margin */
+ background-color: #efefef; /* Light gray background color */
+ color: black; /* Text color */
+ text-decoration: none; /* Remove underline */
+ border: 2px solid #bbb; /* Thin, light gray border */
+ border-radius: 3px; /* Slightly rounded corners */
+ font-size: 11.2px; /* Adjusted font size to approximate 70% of the original */
+ text-align: center; /* Center the text */
+ cursor: pointer; /* Pointer cursor on hover */ }
+
+ /* Hover and active effects for better interaction */
+ .inline-buttons .link:hover {
+ background-color: #d9d9d9; /* Darker shade on hover */
+ }
+
+ .inline-buttons .link:active {
+ background-color: #c0c0c0; /* Even darker shade on click */
+ }
+
+ span .label {
+ padding-top:13em;
+ }
diff --git a/root/usr/share/smanager/themes/default/templates/letsencrypt.html.ep b/root/usr/share/smanager/themes/default/templates/letsencrypt.html.ep
new file mode 100644
index 0000000..b6558b0
--- /dev/null
+++ b/root/usr/share/smanager/themes/default/templates/letsencrypt.html.ep
@@ -0,0 +1,69 @@
+%#
+%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
+%#
+% layout 'default', title => "Sme server 2 - Letsencrypt certificate", share_dir => './';
+%# css specific to this panel:
+% content_for 'module' => begin
+%= stylesheet '/css/letsencrypt.css'
+
+
+ % if ($config->{debug} == 1) {
+
+ %= dumper $c->current_route
+ %= dumper $lets_data->{trt}
+
+ % }
+
+
<%=$title%>
+
+ % if ( stash('modul')) {
+ %= $c->render_to_string(inline => stash('modul') );
+ % }
+
+ %if ($c->stash('first')) {
+
+ %=$c->render_to_string(inline =>$c->l($c->stash('first')))
+
+
+ %} elsif ($c->stash('success')) {
+
+
<%=$c->l('lets_Status_Report') %>
+ %= $c->l($c->stash('success'));
+
+
+
+ %} elsif ($c->stash('error')) {
+
+
<%=$c->l('lets_Error_Status_Report') %>
+ %= $c->l($c->stash('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'
+ %}
+
+ % if ($lets_data->{trt} eq "CHECKALLDOMAINS") {
+ %= include 'partials/_lets_CHECKALLDOMAINS'
+ %}
+
+ % if ($lets_data->{trt} eq "CHECKALLENABLEDDOMAINS") {
+ %= include 'partials/_lets_CHECKALLENABLEDDOMAINS'
+ %}
+
+ % if ($lets_data->{trt} eq "CHECKONEDOMAIN") {
+ %= include 'partials/_lets_CHECKONEDOMAIN'
+ %}
+
+
+
+
+%end
\ No newline at end of file
diff --git a/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKALLDOMAINS.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKALLDOMAINS.html.ep
new file mode 100644
index 0000000..84d9c1a
--- /dev/null
+++ b/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKALLDOMAINS.html.ep
@@ -0,0 +1,39 @@
+%#
+%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
+%#
+
+
+ % if ($config->{debug} == 1) {
+
+ %= dumper $lets_data
+
+ % }
+ % my $btn = l('lets_APPLY');
+ %= form_for "letsencryptu" => (method => 'POST') => begin
+ % param 'trt' => $lets_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $lets_data->{trt}
+ %# Inputs etc in here.
+
+
<%=l('lets_Check_all_domains')%>
+
+
<%=l('lets_Loop_through_checking_the_letsencrypt')%>
+
+
+ %=l('lets_All_domains_check_result')
+
+ % param 'AllDomainsCheck' => $lets_data->{AllDomainsCheck} unless param 'AllDomainsCheck';
+ %= text_area 'AllDomainsCheck', cols=>40, rows=>10, Readonly=>'true'
+
+
+
+ %= submit_button l('lets_Back'), class => 'action back', onclick =>'history.back()'
+
+
+
+ %# Probably finally by a submit.
+ %end
+
\ No newline at end of file
diff --git a/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKALLENABLEDDOMAINS.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKALLENABLEDDOMAINS.html.ep
new file mode 100644
index 0000000..df6f8e3
--- /dev/null
+++ b/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKALLENABLEDDOMAINS.html.ep
@@ -0,0 +1,39 @@
+%#
+%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
+%#
+
+
+ % if ($config->{debug} == 1) {
+
+ %= dumper $lets_data
+
+ % }
+ % my $btn = l('lets_APPLY');
+ %= form_for "letsencryptu" => (method => 'POST') => begin
+ % param 'trt' => $lets_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $lets_data->{trt}
+ %# Inputs etc in here.
+
+
<%=l('lets_Check_all_enabled_domains')%>
+
+
<%=l('lets_Loop_through_checking_the_letsencrypt')%>
+
+
+ %=l('lets_Enabled_domains_check_result')
+
+ % param 'EnabledDomainsCheck' => $lets_data->{EnabledDomainsCheck} unless param 'EnabledDomainsCheck';
+ %= text_area 'EnabledDomainsCheck', cols=>40, rows=>10, Readonly=>'true'
+
+
+
+ %= submit_button l('lets_Back'), class => 'action back', onclick =>'history.back()'
+
+
+
+ %# Probably finally by a submit.
+ %end
+
\ No newline at end of file
diff --git a/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKONEDOMAIN.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKONEDOMAIN.html.ep
new file mode 100644
index 0000000..1480119
--- /dev/null
+++ b/root/usr/share/smanager/themes/default/templates/partials/_lets_CHECKONEDOMAIN.html.ep
@@ -0,0 +1,46 @@
+%#
+%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
+%#
+
+
+ % if ($config->{debug} == 1) {
+
+ %= dumper $lets_data
+
+ % }
+ % my $btn = l('lets_APPLY');
+ %= form_for "letsencryptu" => (method => 'POST') => begin
+ % param 'trt' => $lets_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $lets_data->{trt}
+ %# Inputs etc in here.
+
+
<%=l('lets_Check_just_one_domain')%>
+
+
<%=l('lets_Loop_through_and_check_the')%>
+
+
+ %=l('lets_Domains_name')
+
+ % param 'OneDomainToCheck' => $lets_data->{OneDomainToCheck} unless param 'OneDomainToCheck';
+ %= text_field 'OneDomainToCheck', size => '50', class => 'textinput OneDomainToCheck' , pattern=>'.*' , placeholder=>'OneDomainToCheck', Readonly=>'true'
+
+
+
+ %=l('lets_One_domain_check_result')
+
+ % param 'OneDomainsCheck' => $lets_data->{OneDomainsCheck} unless param 'OneDomainsCheck';
+ %= text_area 'OneDomainsCheck', cols=>40, rows=>10, Readonly=>'true'
+
+
+
+ %= submit_button l('lets_Back'), class => 'action back', onclick =>'history.back()'
+
+
+
+ %# Probably finally by a submit.
+ %end
+
\ No newline at end of file
diff --git a/root/usr/share/smanager/themes/default/templates/partials/_lets_LIST.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_lets_LIST.html.ep
new file mode 100644
index 0000000..aacb2cd
--- /dev/null
+++ b/root/usr/share/smanager/themes/default/templates/partials/_lets_LIST.html.ep
@@ -0,0 +1,126 @@
+%#
+%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43
+%#
+
+
+ % if ($config->{debug} == 1) {
+
+ %= dumper $lets_data
+
+ % }
+ % my $btn = l('lets_APPLY');
+ %= form_for "letsencryptu" => (method => 'POST') => begin
+ % param 'trt' => $lets_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $lets_data->{trt}
+ %# Inputs etc in here.
+
+
+
+
+
<%=l('lets_For_this_Server')%>
+
+
+ %=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_External_Interface_IP')
+
+ % param 'ExternalIP' => $lets_data->{ExternalIP} unless param 'ExternalIP';
+ %= text_field 'ExternalIP', size => '50', class => 'textinput ExternalIP' , pattern=>'.*' , placeholder=>'ExternalIP', Readonly=>'true'
+
+
+
+ %=l('lets_Internet_IP')
+
+ % param 'InternetIP' => $lets_data->{InternetIP} unless param 'InternetIP';
+ %= text_field 'InternetIP', size => '50', class => 'textinput InternetIP' , pattern=>'.*' , placeholder=>'InternetIP', Readonly=>'true'
+
+
+
<%=l('lets_Current_certificate_details')%>
+
+
+ %=l('lets_Issuer')
+
+ % param 'Issuer' => $lets_data->{Issuer} unless param 'Issuer';
+ %= text_field 'Issuer', size => '50', class => 'textinput Issuer' , pattern=>'.*' , placeholder=>'Issuer', Readonly=>'true'
+
+
+
+ %=l('lets_Expiry')
+
+ % param 'Expiry' => $lets_data->{Expiry} unless param 'Expiry';
+ %= text_field 'Expiry', size => '50', class => 'textinput Expiry' , pattern=>'.*' , placeholder=>'Expiry', Readonly=>'true'
+
+
+
+ %=l('lets_Not_Before')
+
+ % param 'NotBefore' => $lets_data->{NotBefore} unless param 'NotBefore';
+ %= text_field 'NotBefore', size => '50', class => 'textinput NotBefore' , pattern=>'.*' , placeholder=>'NotBefore', Readonly=>'true'
+
+
+
<%=l('lets_List_of_Domains_and_Hosts')%>
+
+
+
+
+ <%=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')%> |
+
+
+
+ % my $control_data = $c->stash('DomainList');
+ % foreach my $row (@$control_data) {
+
+ <%=$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
+
\ No newline at end of file
diff --git a/root/usr/share/smanager/themes/default/templates/partials/_lets_PARAMS.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_lets_PARAMS.html.ep
new file mode 100644
index 0000000..2dfb0ba
--- /dev/null
+++ b/root/usr/share/smanager/themes/default/templates/partials/_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-12-01 15:22:43
+%#
+
+
+ % if ($config->{debug} == 1) {
+
+ %= dumper $lets_data
+
+ % }
+ % my $btn = l('lets_APPLY');
+ %= form_for "letsencryptu" => (method => 'POST') => begin
+ % param 'trt' => $lets_data->{trt} unless param 'trt';
+ %= hidden_field 'trt' => $lets_data->{trt}
+ %# Inputs etc in here.
+
+
<%=l('lets_Manage_letsencrypt-config_settings:')%>
+
+
+ %=l('lets_CONFIG_LETSENCRYPT')
+
+
+
+ %=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';
+ %=email_field 'email', class => 'emai8'
+
+
+
+
+ %= submit_button l('lets_Save'), class => 'action subm9'
+
+
+ %# Probably finally by a submit.
+ %end
+
\ No newline at end of file
diff --git a/smeserver-manager.spec b/smeserver-manager.spec
index 1a8aeda..88e7ba0 100644
--- a/smeserver-manager.spec
+++ b/smeserver-manager.spec
@@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2
%define name smeserver-manager
Name: %{name}
%define version 11.0.0
-%define release 29
+%define release 30
Version: %{version}
Release: %{release}%{?dist}
License: GPL
@@ -35,6 +35,8 @@ Requires: perl(DBM::Deep) >= 2.0011-1
Requires: perl(Mojo::JWT) >= 0.08-1
Requires: mutt >= 1.5.21
Requires: smeserver-manager-jsquery >= 1.0
+Requires: smeserver-lib >= 11.0
+Requires: smeserver-certificates >= 11.0
#Requires: js-jquery > 2.2.4-3 (optional)
Provides: server-manager
@@ -113,6 +115,9 @@ true
%defattr(-,root,root)
%changelog
+* Fri Dec 13 2024 Brian Read 11.0.0-30.sme
+- Add in letsencrypt panel, add requires for smeserver-lib and smeserver-certificates [SME: 12810]
+
* Tue Nov 26 2024 Brian Read 11.0.0-29.sme
- Fix remoteaccess panel, reformat pm file and bring success panel into line with other similar panels [SME: 12747]