Finally crack the routing problem - html entities not allowed in mojo routing

This commit is contained in:
Brian Read 2024-11-13 16:45:14 +00:00
parent ece4f2f6f5
commit 1a78388e95
8 changed files with 68 additions and 61 deletions

View File

@ -6,10 +6,10 @@
# and provison of the control data for table(s)
#
use esmith::util;
use esmith::ConfigDB;
use esmith::HostsDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;
#use Net::SSLeay;
@ -81,14 +81,14 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
my %ret = (
'Data1'=>'Data for PARAMS', #Example
# fields from Inputs in PARAMS $fields['PARAMS']
'status'=>get_prop('letsencrypt', 'status', 'disabled',
'hookScript'=>get_prop('letsencrypt', 'hookScript', 'disabled'),
'hostOverride'=>get_prop('letsencrypt', 'hostOverride', 'disabled'),
'ACCEPT_TERMS'=>get_prop('letsencrypt', 'ACCEPT_TERMS', ''),
'API'=>get_prop('letsencrypt', 'API', '2'),
'keysize'=>get_prop('letsencrypt', 'keysize', '4096'),
'configure'=>get_prop('letsencrypt', 'configure', 'none' ),
'Email'=>get_prop('letsencrypt', 'email')
'status'=>$cdb->get_prop('letsencrypt', 'status', 'disabled'),
'hookScript'=>$cdb->get_prop('letsencrypt', 'hookScript', 'disabled'),
'hostOverride'=>$cdb->get_prop('letsencrypt', 'hostOverride', 'disabled'),
'ACCEPT_TERMS'=>$cdb->get_prop('letsencrypt', 'ACCEPT_TERMS', ''),
'API'=>$cdb->get_prop('letsencrypt', 'API', '2'),
'keysize'=>$cdb->get_prop('letsencrypt', 'keysize', '4096'),
'configure'=>$cdb->get_prop('letsencrypt', 'configure', 'none' ),
'Email'=>$cdb->get_prop('letsencrypt', 'email')
);
return %ret;
}
@ -159,7 +159,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
# }
my @data = ();
my $check = $c->l('CHECK');
my $check = $c->l('Check Domain');
for ($ddb->domains)
{
@ -167,7 +167,9 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
my $le = $_->prop('letsencryptSSLcert') || 'disabled';#letsencrypt configure all
my $dname= $_->key;
my $isincert = "N";
my $check = $c->l('lets_CHECK');
my $link = $c->create_link("letsencryptd","CHECKONEDOMAIN","");
my $checklink = "<a href='".$link."&dom=".$_->key."'>".$check."</a>";
#my $checklink = "<a href=''>check</a>";
$isincert = "Y" if ( $dname ~~ @list);
# domain
push @data,
@ -175,7 +177,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
$_->props,
letsencryptSSLcert => $le,
isincert => $isincert,
Check => $check,
Check => $checklink,
Nameservers => $ns,
};
#and hosts
@ -192,7 +194,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
Description=>$h->prop('ExternalIP')|| $h->prop('InternalIP')||"",
Content => $h->prop('HostType'),
isincert => $isincert,
Check => $check,
Check => "", #$checklink
Nameservers => $c->l($ns),
}
}
@ -284,7 +286,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
sub create_link{
# WIP
my ($c,$route, $panel, $index) = shift;
my ($c,$route, $panel, $index) = @_;
my $link = "$route?trt=$panel&Selected=$index";
return $link;
}

View File

@ -1,6 +1,6 @@
package SrvMngr::Controller::Letsencrypt;
#
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-06 11:09:38
# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-13 16:29:07
#
#----------------------------------------------------------------------
# heading : Network
@ -35,7 +35,7 @@ use SrvMngr qw(theme_list init_session);
use Data::Dumper;
use esmith::util;
use esmith::HostsDB;
use esmith::ConfigDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
@ -70,7 +70,7 @@ sub main {
my $title = $c->l('lets_Letsencrypt_certificate');
my $modul = '';
$lets_data{'trt'} = 'CHECKALLDOMAINS';
$lets_data{'trt'} = 'LIST';
#Load any DB entries into the <prefix>_data area so as they are preset in the form
# which DB - this only really works if the initial panel is a PARAMS type panel and not a TABLE
@ -80,7 +80,7 @@ sub main {
#pickup any other contents needed and load them into hash shared with panel
my %returned_hash;
# subroutine returns a hash directly
%returned_hash = get_data_for_panel_CHECKALLDOMAINS();
%returned_hash = 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;
@ -138,12 +138,12 @@ sub do_update {
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;
}
#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') || 'CHECKALLDOMAINS'; #hidden control on every form.
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)
@ -173,10 +173,10 @@ sub do_update {
$thispanel = 'CHECKALLENABLEDDOMAINS';
}
if ($trt eq 'CHECKONEDDOMAINS'){
#Validate form parameters for panel CHECKONEDDOMAINS
$ret = $c->validate_CHECKONEDDOMAINS(\%lets_data);
$thispanel = 'CHECKONEDDOMAINS';
if ($trt eq 'CHECKONEDDOMAIN'){
#Validate form parameters for panel CHECKONEDDOMAIN
$ret = $c->validate_CHECKONEDDOMAIN(\%lets_data);
$thispanel = 'CHECKONEDDOMAIN';
}
@ -235,15 +235,15 @@ sub do_update {
}
}
if ($trt eq 'CHECKONEDDOMAINS'){
if ($trt eq 'CHECKONEDDOMAIN'){
#do whatever is required ...
$ret = $c->perform_CHECKONEDDOMAINS(\%lets_data);
$ret = $c->perform_CHECKONEDDOMAIN(\%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_CHECKONEDDOMAINS_panel_action_was_successful')); #A bit bland - edit it in the lex file
$c->stash( success => $c->l('lets_CHECKONEDDOMAIN_panel_action_was_successful')); #A bit bland - edit it in the lex file
}
}
@ -256,7 +256,7 @@ sub do_update {
lets_data => \%lets_data
);
if ('none' eq 'none') {
$lets_data{'trt'} = 'CHECKALLDOMAINS';
$lets_data{'trt'} = 'LIST';
} else {
$lets_data{'trt'} = 'none';
}
@ -292,12 +292,12 @@ sub do_display {
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;
}
#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') || 'CHECKALLDOMAINS'; #Indicates where to go now
my $trt = $c->param('trt') || 'LIST'; #Indicates where to go now
# Now add in the params from the selected row from the table
@ -323,9 +323,9 @@ sub do_display {
%selectedrow = $c->get_selected_CHECKALLENABLEDDOMAINS($lets_data{'Selected'},$is_new_record);
}
if ($trt eq 'CHECKONEDDOMAINS'){
#Validate form parameters for panel CHECKONEDDOMAINS
%selectedrow = $c->get_selected_CHECKONEDDOMAINS($lets_data{'Selected'},$is_new_record);
if ($trt eq 'CHECKONEDDOMAIN'){
#Validate form parameters for panel CHECKONEDDOMAIN
%selectedrow = $c->get_selected_CHECKONEDDOMAIN($lets_data{'Selected'},$is_new_record);
}
@ -382,11 +382,11 @@ sub do_display {
}
}
if ($trt eq 'CHECKONEDDOMAINS'){
if ($trt eq 'CHECKONEDDOMAIN'){
# pickup any other contents needed and load them into hash shared with panel
my %returned_hash;
# subroutine returns a hash directly
%returned_hash = get_data_for_panel_CHECKONEDDOMAINS();
%returned_hash = get_data_for_panel_CHECKONEDDOMAIN();
# 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;

View File

@ -1,7 +1,7 @@
%#
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-06 10:28:31
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-13 16:37:25
%#
<div id="Letsencrypt-CHECKONEDDOMAINS" class="partial Letsencrypt-CHECKONEDDOMAINS">
<div id="Letsencrypt-CHECKONEDOMAIN" class="partial Letsencrypt-CHECKONEDOMAIN">
<script>
window.onload = function() {
SelectInput();
@ -25,15 +25,15 @@
<p><span class=label>
%=l('lets_Domains_name')
</span><span class=data>
% param 'OneDomainsToCheck' => $lets_data->{OneDomainsToCheck} unless param 'OneDomainsToCheck';
%= text_field 'OneDomainsToCheck', size => '50', class => 'textinput OneDomainsToCheck' , pattern=>'.*' , placeholder=>'OneDomainsToCheck', Readonly=>'true'
% param 'OneDomainToCheck' => $lets_data->{OneDomainToCheck} unless param 'OneDomainToCheck';
%= text_field 'OneDomainToCheck', size => '50', class => 'textinput OneDomainToCheck' , pattern=>'.*' , placeholder=>'OneDomainToCheck', Readonly=>'true'
<br></span></p>
<span class=label>
%=l('lets_Enabled_domains_check_result')
%=l('lets_One_domain_check_result')
</span><span class=data>
% param 'EnabledDomainsCheck' => $lets_data->{EnabledDomainsCheck} unless param 'EnabledDomainsCheck';
%= text_area 'EnabledDomainsCheck', cols=>40, rows=>10, Readonly=>'true'
% param 'OneDomainsCheck' => $lets_data->{OneDomainsCheck} unless param 'OneDomainsCheck';
%= text_area 'OneDomainsCheck', cols=>40, rows=>10, Readonly=>'true'
</span><br>
<span class='data'>

View File

@ -21,6 +21,7 @@
<div class="inline-buttons">
%= link_to l('lets_CONFIG'), 'letsencryptd?trt=PARAMS' , class=>'link link2'
<a href="letsencryptd?trt=PARAMS" class=link link2><%= l('lets_CONFIG') %></a>
%= link_to l('lets_CHECK_ALL_DOMAINS'), 'letsencryptd?trt=CHECKALLDOMAINS' , class=>'link link3'
%= link_to l('lets_CHECK_ENABLED_DOMAINS'), 'letsencryptd?trt=CHECKALLENABLEDDOMAINS' , class=>'link link4'
</div>

View File

@ -1,5 +1,5 @@
%#
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-05 13:20:33
%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-13 16:40:01
%#
% layout 'default', title => "Sme server 2 - Letsencrypt certificate", share_dir => './';
%# css specific to this panel:
@ -58,6 +58,10 @@
%= include 'partials/_lets_CHECKALLENABLEDDOMAINS'
%}
% if ($lets_data->{trt} eq "CHECKONEDOMAIN") {
%= include 'partials/_lets_CHECKONEDOMAIN'
%}
</div>

View File

@ -35,7 +35,7 @@ use SrvMngr qw(theme_list init_session);
use Data::Dumper;
use esmith::util;
use esmith::HostsDB;
use esmith::ConfigDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
@ -140,9 +140,9 @@ sub do_update {
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}) {
$$${prefix}_data{$key} = $value;
}
#while (my ($key, $value) = each %{$c->req->params->to_hash}) {
# $$${prefix}_data{$key} = $value;
#}
# the value of trt will tell you which panel has returned
my $trt = $c->param('trt') || '${firstPanel}'; #hidden control on every form.
@ -222,9 +222,9 @@ sub do_display {
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}) {
$$${prefix}_data{$key} = $value;
}
#while (my ($key, $value) = each %{$c->req->params->to_hash}) {
# $$${prefix}_data{$key} = $value;
#}
# the value of trt will tell you which panel has returned
my $trt = $c->param('trt') || '${firstPanel}'; #Indicates where to go now

View File

@ -6,10 +6,10 @@
# and provison of the control data for table(s)
#
use esmith::util;
use esmith::ConfigDB;
use esmith::HostsDB;
use esmith::AccountsDB;
use esmith::NetworksDB;
use esmith::HostsDB;
use esmith::DomainsDB;

View File

@ -7,7 +7,7 @@
'MenuHeading': 'Network',
'MenuDescription': 'Letsencrypt certificate',
'MenuNavigation': '6000 6600',
'firstPanel': 'CHECKALLDOMAINS',
'firstPanel': 'LIST',
'signalEvent': 'smeserver-letsencrypt-update',
'html': [
{
@ -15,17 +15,17 @@
'route': 'LIST',
'Link2': {
'Type': 'Link',
'href': 'letsencrypt?page=0&page_stack=&Next=Next&wherenext=CONFIG_PAGE',
'href': 'letsencryptd?trt=PARAMS',
'title': 'CONFIG'
},
'Link3': {
'Type': 'Link',
'href': 'letsencrypt?page=0&page_stack=&Next=Next&wherenext=CHECK_DOMAINS_PAGE',
'href': 'letsencryptd?trt=CHECKALLDOMAINS',
'title': 'CHECK_ALL_DOMAINS'
},
'Link4': {
'Type': 'Link',
'href': 'letsencrypt?page=0&page_stack=&Next=Next&wherenext=CHECK_ENABLED_DOMAINS_PAGE',
'href': 'letsencryptd?trt=CHECKENABLEDDOMAINS',
'title': 'CHECK_ENABLED_DOMAINS'
},
SubHeader2: 'IPs for this Server',
@ -271,8 +271,8 @@
'Value': 'Back',
}
},
{ 'Name':'CheckOneDomains',
'route':'CHECKONEDDOMAINS',
{ 'Name':'CheckOneDomain',
'route':'CHECKONEDOMAIN',
'Header': 'Check just one domain',
'SubHeader': 'Loop through checking the letsencrypt status for a specific domain',
'Input1': {