diff --git a/Targets/Letsencrypt/Letsencrypt-Custom.pm b/Targets/Letsencrypt/Letsencrypt-Custom.pm index 45b27ae..a3720f3 100644 --- a/Targets/Letsencrypt/Letsencrypt-Custom.pm +++ b/Targets/Letsencrypt/Letsencrypt-Custom.pm @@ -1,5 +1,5 @@ # -# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 10:58:16 +# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-11-16 10:30:16 # # # Routines to be edited by the developer to provide content and validation for parameters @@ -53,7 +53,6 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $prefix_data = shift; #Data hash as parameter # Validation for each field my $ret = ""; - if (! TRUE) #validate $c->param('status') {$ret .= 'Validation for status failed';} if (! TRUE) #validate $c->param('hookScript') @@ -118,16 +117,20 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); sub get_data_for_panel_LIST { # Return a hash with the fields required which will be loaded into the shared data my $c = shift; +# my ($reply, $err, $server_cert) = Net::SSLeay::sslcat('localhost', 443, '/'); +# my $issuer = Net::SSLeay::X509_NAME_oneline(Net::SSLeay::X509_get_issuer_name($server_cert)); +# my $before = Net::SSLeay::P_ASN1_TIME_get_isotime(Net::SSLeay::X509_get_notBefore($server_cert)); +# my $expiry = Net::SSLeay::P_ASN1_TIME_get_isotime(Net::SSLeay::X509_get_notAfter($server_cert)); + my %ret = ( 'Data1'=>'Data for LIST', #Example # fields from Inputs in LIST $fields['LIST'] - 'InternalIP'=>'InternalIP contents', - 'ExternalIP'=>'ExternalIP contents', - 'InternetIP'=>'InternetIP contents', - 'Issuer'=>'Issuer contents', - 'Expiry'=>'Expiry contents', - 'NotBefore'=>'NotBefore contents', - + 'InternalIP'=>$cdb->get_prop('InternalInterface','IPAddress'), + 'ExternalIP'=>$cdb->get_prop('ExternalInterface','IPAddress'), + 'InternetIP'=>$c->get_my_ip(), + 'Issuer'=>'$issuer', + 'Expiry'=>'$expiry', + 'NotBefore'=>'$before', ); return %ret; } @@ -138,15 +141,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'=>'status contents', - 'hookScript'=>'hookScript contents', - 'hostOverride'=>'hostOverride contents', - 'ACCEPT_TERMS'=>'ACCEPT_TERMS contents', - 'API'=>'API contents', - 'keysize'=>'keysize contents', - 'configure'=>'configure contents', - 'Email'=>'Email contents', - + '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; } @@ -181,7 +183,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my %ret = ( 'Data1'=>'Data for CHECKONEDOMAIN', #Example # fields from Inputs in CHECKONEDOMAIN $fields['CHECKONEDOMAIN'] - 'OneDomainToCheck'=>'OneDomainToCheck contents', + 'OneDomainToCheck'=>$c->param("CHECKONEDOMAIN"), 'OneDomainsCheck'=>'OneDomainsCheck contents', ); @@ -194,32 +196,87 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Define a constant hash for field name mapping use constant DomainList_FIELD_MAPPING => ( - 'Table1-Domain name / HOSTNAME' => 'Source-for-Table1-Domain name / HOSTNAME', - 'Table1-Brief description' => 'Source-for-Table1-Brief description', - 'Table1-Content' => 'Source-for-Table1-Content', - 'Table1-LABEL_NAMESERVERS' => 'Source-for-Table1-LABEL_NAMESERVERS', + 'Table1-Domain name / HOSTNAME' => 'Domain', + 'Table1-Brief description' => 'Description', + 'Table1-Content' => 'Content', + 'Table1-LABEL_NAMESERVERS' => 'Nameservers', 'Table1-LABEL_POINT' => 'Source-for-Table1-LABEL_POINT', - 'Table1-LABEL_LECERT' => 'Source-for-Table1-LABEL_LECERT', - 'Table1-IS_IN_CERT' => 'Source-for-Table1-IS_IN_CERT', - 'Table1-CHECK' => 'Source-for-Table1-CHECK' + 'Table1-LABEL_LECERT' => 'letsencryptSSLcert', + 'Table1-IS_IN_CERT' => 'isincert', + 'Table1-CHECK' => 'Check' #'target_field2' => 'source_field2', # Add more mappings as needed ); + +use constant TEST_DOMAIN_LIST => ( + { "domain" => "Domain1","fred" => "fred1" , "description"=>"Description1"}, + { "domain" => "Domain2", "fred" => "fred2", "description"=>"Description2" }, + { "domain" => "Domain3", "fred" => "fred3", "description"=>"Description3" }, + # Add more test entries as needed +); + sub actual_DomainList { - my @ret = (); + my $c = shift; # Actual code for extracting DomainList - return @ret; + my @list = (); +# my @rv = Net::SSLeay::X509_get_subjectAltNames($server_cert); +# foreach my $element (@rv) { +# next if $element =~ /^\d+$/; ; +# #print $element . "\n"; +# push @list, $element; +# } + my @data = (); + my $check = $c->l('Check Domain'); + for ($ddb->domains) + { + my $ns = $_->prop('Nameservers') || 'internet'; + my $le = $_->prop('letsencryptSSLcert') || 'disabled';#letsencrypt configure all + my $dname= $_->key; + my $isincert = "N"; + my $link = $c->create_link("letsencryptd","CHECKONEDOMAIN",""); + my $checklink = "".$check.""; + #my $checklink = "check"; + $isincert = "Y" if ( $dname ~~ @list); + # domain + push @data, + { Domain => $_->key, + $_->props, + letsencryptSSLcert => $le, + isincert => $isincert, + Check => $checklink, + Nameservers => $ns, + }; + #and hosts + for my $h ($hdb->get_hosts_by_domain($dname)) + { + next if $ddb->get($h->key); + next unless ($h->prop('HostType') eq "Self" || $h->prop('HostType') eq "Local"); + $le = $h->prop('letsencryptSSLcert') || 'disabled';#letsencrypt configure all + $isincert = "N"; + $isincert = "Y" if ( $h->key ~~ @list); + push @data, + { Domain => "--> ". $h->key, + $h->props, + Description=>$h->prop('ExternalIP')|| $h->prop('InternalIP')||"", + Content => $h->prop('HostType'), + isincert => $isincert, + Check => "", #$checklink + Nameservers => $c->l($ns), + } + } + } + return @data; } sub get_DomainList { # Return an array of hashes of the contents for each row and column for DomainList my $c = shift; - my @source_records = $c->actual_DomainList(); + my @source_records = $c->actual_DomainList(); #TEST_DOMAIN_LIST #Replace by code or call to produce contents of table; my @transformed_records; my %Field_Mapping = DomainList_FIELD_MAPPING; # Iterate over each record in the source array - for my $source_record (@$source_records) { + for my $source_record (@source_records) { my %transformed_record; # Iterate over each key-value pair in the $Field_Mapping constant while (my ($target, $source) = each %Field_Mapping) { @@ -289,17 +346,17 @@ sub get_DomainList { my $db = $cdb; #maybe one of the others my $dbkey = 'ChangeThis'; - if (! TRUE) #copy or perform with value: InternalIP e.g. $c->setprop($db,$dbkey,$c->param('InternalIP'))) + if (! TRUE) #copy or perform with value: InternalIP e.g. $db->set_prop($dbkey,'InternalIP',$c->param('InternalIP'),type=>'service')) {$ret .= 'Perform/save failed for InternalIP';} - if (! TRUE) #copy or perform with value: ExternalIP e.g. $c->setprop($db,$dbkey,$c->param('ExternalIP'))) + if (! TRUE) #copy or perform with value: ExternalIP e.g. $db->set_prop($dbkey,'ExternalIP',$c->param('ExternalIP'),type=>'service')) {$ret .= 'Perform/save failed for ExternalIP';} - if (! TRUE) #copy or perform with value: InternetIP e.g. $c->setprop($db,$dbkey,$c->param('InternetIP'))) + if (! TRUE) #copy or perform with value: InternetIP e.g. $db->set_prop($dbkey,'InternetIP',$c->param('InternetIP'),type=>'service')) {$ret .= 'Perform/save failed for InternetIP';} - if (! TRUE) #copy or perform with value: Issuer e.g. $c->setprop($db,$dbkey,$c->param('Issuer'))) + if (! TRUE) #copy or perform with value: Issuer e.g. $db->set_prop($dbkey,'Issuer',$c->param('Issuer'),type=>'service')) {$ret .= 'Perform/save failed for Issuer';} - if (! TRUE) #copy or perform with value: Expiry e.g. $c->setprop($db,$dbkey,$c->param('Expiry'))) + if (! TRUE) #copy or perform with value: Expiry e.g. $db->set_prop($dbkey,'Expiry',$c->param('Expiry'),type=>'service')) {$ret .= 'Perform/save failed for Expiry';} - if (! TRUE) #copy or perform with value: NotBefore e.g. $c->setprop($db,$dbkey,$c->param('NotBefore'))) + if (! TRUE) #copy or perform with value: NotBefore e.g. $db->set_prop($dbkey,'NotBefore',$c->param('NotBefore'),type=>'service')) {$ret .= 'Perform/save failed for NotBefore';} if ($ret eq "") {$ret = 'ok';} return $ret; @@ -310,28 +367,29 @@ sub get_DomainList { my $prefix_data = shift; #Data hash as parameter my $ret = ""; my $db = $cdb; #maybe one of the others - my $dbkey = 'ChangeThis'; + my $dbkey = 'letsencrypt'; + # To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g." - if (! TRUE) #copy or perform with value: status e.g. $c->setprop($db,$dbkey,$c->param('status'))) + if (! $db->set_prop($dbkey,'status',$c->param('status'),type=>'service')) {$ret .= 'Perform/save failed for status';} - if (! TRUE) #copy or perform with value: hookScript e.g. $c->setprop($db,$dbkey,$c->param('hookScript'))) + if (! $db->set_prop($dbkey,'hookScript',$c->param('hookScript'),type=>'service')) {$ret .= 'Perform/save failed for hookScript';} - if (! TRUE) #copy or perform with value: hostOverride e.g. $c->setprop($db,$dbkey,$c->param('hostOverride'))) + if (! $db->set_prop($dbkey,'hostOverride',$c->param('hostOverride'),type=>'service')) {$ret .= 'Perform/save failed for hostOverride';} - if (! TRUE) #copy or perform with value: ACCEPT_TERMS e.g. $c->setprop($db,$dbkey,$c->param('ACCEPT_TERMS'))) + if (! $db->set_prop($dbkey,'ACCEPT_TERMS',$c->param('ACCEPT_TERMS'),type=>'service')) {$ret .= 'Perform/save failed for ACCEPT_TERMS';} - if (! TRUE) #copy or perform with value: API e.g. $c->setprop($db,$dbkey,$c->param('API'))) + if (! $db->set_prop($dbkey,'API',$c->param('API'),type=>'service')) {$ret .= 'Perform/save failed for API';} - if (! TRUE) #copy or perform with value: keysize e.g. $c->setprop($db,$dbkey,$c->param('keysize'))) + if (! $db->set_prop($dbkey,'keysize',$c->param('keysize'),type=>'service')) {$ret .= 'Perform/save failed for keysize';} - if (! TRUE) #copy or perform with value: configure e.g. $c->setprop($db,$dbkey,$c->param('configure'))) + if (! $db->set_prop($dbkey,'configure',$c->param('configure'),type=>'service')) {$ret .= 'Perform/save failed for configure';} - if (! TRUE) #copy or perform with value: Email e.g. $c->setprop($db,$dbkey,$c->param('Email'))) - {$ret .= 'Perform/save failed for Email';} + if (! $db->set_prop($dbkey,'email',$c->param('email'),type=>'service')) + {$ret .= 'Perform/save failed for email';} if ($ret eq "") {$ret = 'ok';} return $ret; } - + sub perform_CHECKALLDOMAINS { my $c = shift; my $prefix_data = shift; #Data hash as parameter @@ -339,7 +397,7 @@ sub get_DomainList { my $db = $cdb; #maybe one of the others my $dbkey = 'ChangeThis'; - if (! TRUE) #copy or perform with value: AllDomainsCheck e.g. $c->setprop($db,$dbkey,$c->param('AllDomainsCheck'))) + if (! TRUE) #copy or perform with value: AllDomainsCheck e.g. $db->set_prop($dbkey,'AllDomainsCheck',$c->param('AllDomainsCheck'),type=>'service')) {$ret .= 'Perform/save failed for AllDomainsCheck';} if ($ret eq "") {$ret = 'ok';} return $ret; @@ -352,7 +410,7 @@ sub get_DomainList { my $db = $cdb; #maybe one of the others my $dbkey = 'ChangeThis'; - if (! TRUE) #copy or perform with value: EnabledDomainsCheck e.g. $c->setprop($db,$dbkey,$c->param('EnabledDomainsCheck'))) + if (! TRUE) #copy or perform with value: EnabledDomainsCheck e.g. $db->set_prop($dbkey,'EnabledDomainsCheck',$c->param('EnabledDomainsCheck'),type=>'service')) {$ret .= 'Perform/save failed for EnabledDomainsCheck';} if ($ret eq "") {$ret = 'ok';} return $ret; @@ -365,9 +423,9 @@ sub get_DomainList { my $db = $cdb; #maybe one of the others my $dbkey = 'ChangeThis'; - if (! TRUE) #copy or perform with value: OneDomainToCheck e.g. $c->setprop($db,$dbkey,$c->param('OneDomainToCheck'))) + if (! TRUE) #copy or perform with value: OneDomainToCheck e.g. $db->set_prop($dbkey,'OneDomainToCheck',$c->param('OneDomainToCheck'),type=>'service')) {$ret .= 'Perform/save failed for OneDomainToCheck';} - if (! TRUE) #copy or perform with value: OneDomainsCheck e.g. $c->setprop($db,$dbkey,$c->param('OneDomainsCheck'))) + if (! TRUE) #copy or perform with value: OneDomainsCheck e.g. $db->set_prop($dbkey,'OneDomainsCheck',$c->param('OneDomainsCheck'),type=>'service')) {$ret .= 'Perform/save failed for OneDomainsCheck';} if ($ret eq "") {$ret = 'ok';} return $ret; @@ -380,4 +438,11 @@ sub create_link{ my $link = "$route?trt=$panel&Selected=$index"; return $link; } + +sub get_my_ip +{ + my ($self, $item, $prop, $default) = @_; + my $output = `/usr/sbin/e-smith/getmyip`; + return $output || "IP"; +} 1; \ No newline at end of file diff --git a/Targets/Letsencrypt/Letsencrypt.pm b/Targets/Letsencrypt/Letsencrypt.pm index 953e7ce..96653bd 100644 --- a/Targets/Letsencrypt/Letsencrypt.pm +++ b/Targets/Letsencrypt/Letsencrypt.pm @@ -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-12-01 10:58:16 +# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 13:34:33 # #---------------------------------------------------------------------- # heading : Network diff --git a/Targets/Letsencrypt/_lets_CHECKALLDOMAINS.html.ep b/Targets/Letsencrypt/_lets_CHECKALLDOMAINS.html.ep index d0de526..941a99e 100644 --- a/Targets/Letsencrypt/_lets_CHECKALLDOMAINS.html.ep +++ b/Targets/Letsencrypt/_lets_CHECKALLDOMAINS.html.ep @@ -1,5 +1,5 @@ %# -%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 10:58:16 +%# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 13:34:33 %#