# # 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 # and provison of the control data for table(s) # use esmith::util; use esmith::util::network; use esmith::ConfigDB; use esmith::HostsDB; use esmith::AccountsDB; use esmith::NetworksDB; use esmith::DomainsDB; use constant FALSE => 0; use constant TRUE => 1; #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_LIST { my $c = shift; my $prefix_data = shift; #Data hash as parameter # Validation for each field my $ret = ""; if (!TRUE) #validate $c->param('InternalIP') { $ret .= 'Validation for InternalIP failed'; } if (!TRUE) #validate $c->param('ExternalIP') { $ret .= 'Validation for ExternalIP failed'; } if (!TRUE) #validate $c->param('InternetIP') { $ret .= 'Validation for InternetIP failed'; } if (!TRUE) #validate $c->param('Issuer') { $ret .= 'Validation for Issuer failed'; } if (!TRUE) #validate $c->param('Expiry') { $ret .= 'Validation for Expiry failed'; } if (!TRUE) #validate $c->param('NotBefore') { $ret .= 'Validation for NotBefore failed'; } if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub validate_LIST sub validate_PARAMS { my $c = shift; 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') { $ret .= 'Validation for hookScript failed'; } if (!TRUE) #validate $c->param('hostOverride') { $ret .= 'Validation for hostOverride failed'; } if (!TRUE) #validate $c->param('ACCEPT_TERMS') { $ret .= 'Validation for ACCEPT_TERMS failed'; } if (!TRUE) #validate $c->param('API') { $ret .= 'Validation for API failed'; } if (!TRUE) #validate $c->param('keysize') { $ret .= 'Validation for keysize failed'; } if (!TRUE) #validate $c->param('configure') { $ret .= 'Validation for configure failed'; } if (!TRUE) #validate $c->param('Email') { $ret .= 'Validation for Email failed'; } if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub validate_PARAMS sub validate_CHECKALLDOMAINS { my $c = shift; my $prefix_data = shift; #Data hash as parameter # Validation for each field my $ret = ""; if (!TRUE) #validate $c->param('AllDomainsCheck') { $ret .= 'Validation for AllDomainsCheck failed'; } if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub validate_CHECKALLDOMAINS sub validate_CHECKALLENABLEDDOMAINS { my $c = shift; my $prefix_data = shift; #Data hash as parameter # Validation for each field my $ret = ""; if (!TRUE) #validate $c->param('EnabledDomainsCheck') { $ret .= 'Validation for EnabledDomainsCheck failed'; } if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub validate_CHECKALLENABLEDDOMAINS sub validate_CHECKONEDOMAIN { my $c = shift; my $prefix_data = shift; #Data hash as parameter # Validation for each field my $ret = ""; if (!TRUE) #validate $c->param('OneDomainToCheck') { $ret .= 'Validation for OneDomainToCheck failed'; } if (!TRUE) #validate $c->param('OneDomainsCheck') { $ret .= 'Validation for OneDomainsCheck failed'; } if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub validate_CHECKONEDOMAIN # Get singleton data for each panel 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' => $cdb->get_prop('InternalInterface', 'IPAddress'), 'ExternalIP' => $cdb->get_prop('ExternalInterface', 'IPAddress'), 'InternetIP' => $c->get_my_ip(), 'Issuer' => '$issuer', 'Expiry' => '$expiry', 'NotBefore' => '$before', ); return %ret; } ## end sub get_data_for_panel_LIST sub get_data_for_panel_PARAMS { # Return a hash with the fields required which will be loaded into the shared data my $c = shift; my %ret = ( 'Data1' => 'Data for PARAMS', #Example # fields from Inputs in PARAMS $fields['PARAMS'] '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; } ## end sub get_data_for_panel_PARAMS sub get_data_for_panel_CHECKALLDOMAINS { # Return a hash with the fields required which will be loaded into the shared data my $c = shift; my %ret = ( 'Data1' => 'Data for CHECKALLDOMAINS', #Example # fields from Inputs in CHECKALLDOMAINS $fields['CHECKALLDOMAINS'] 'AllDomainsCheck' => $c->update_all_domains(), ); return %ret; } ## end sub get_data_for_panel_CHECKALLDOMAINS sub get_data_for_panel_CHECKALLENABLEDDOMAINS { # Return a hash with the fields required which will be loaded into the shared data my $c = shift; my %ret = ( 'Data1' => 'Data for CHECKALLENABLEDDOMAINS', #Example # fields from Inputs in CHECKALLENABLEDDOMAINS $fields['CHECKALLENABLEDDOMAINS'] 'EnabledDomainsCheck' => $c->update_enabled_domains(), ); return %ret; } ## end sub get_data_for_panel_CHECKALLENABLEDDOMAINS sub get_data_for_panel_CHECKONEDOMAIN { # Return a hash with the fields required which will be loaded into the shared data my $c = shift; my %ret = ( 'Data1' => 'Data for CHECKONEDOMAIN', #Example # fields from Inputs in CHECKONEDOMAIN $fields['CHECKONEDOMAIN'] 'OneDomainToCheck' => $c->param("CHECKONEDOMAIN"), 'OneDomainsCheck' => $c->update_one_domain($c->param("CHECKONEDOMAIN")) ); return %ret; } ## end sub get_data_for_panel_CHECKONEDOMAIN # Get control data for table(s) # Define a constant hash for field name mapping use constant DomainList_FIELD_MAPPING => ( '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' => '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 $c = shift; # Actual code for extracting DomainList 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), }; } ## end for my $h ($hdb->get_hosts_by_domain...) } ## end for ($ddb->domains) return @data; } ## end sub actual_DomainList 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(); #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) { my %transformed_record; # Iterate over each key-value pair in the $Field_Mapping constant while (my ($target, $source) = each %Field_Mapping) { # Check if the source field exists in the source record if (exists $source_record->{$source}) { # Assign the source field value to the target field in the transformed record $transformed_record{$target} = $source_record->{$source}; } } ## end while (my ($target, $source...)) # Add transformed record to the array if it's not empty push @transformed_records, \%transformed_record if %transformed_record; } ## end for my $source_record (...) return \@transformed_records; } ## end sub get_DomainList # Return hash with values from row in which link clicked on table sub get_selected_LIST { 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; } ## end sub get_selected_LIST 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; } ## end sub get_selected_PARAMS sub get_selected_CHECKALLDOMAINS { 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; } ## end sub get_selected_CHECKALLDOMAINS sub get_selected_CHECKALLENABLEDDOMAINS { 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; } ## end sub get_selected_CHECKALLENABLEDDOMAINS sub get_selected_CHECKONEDOMAIN { 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; } ## end sub get_selected_CHECKONEDOMAIN #after sucessful modify or create or whatever and submit then perfom (if the params validate) sub perform_LIST { my $c = shift; my $prefix_data = shift; #Data hash as parameter my $ret = ""; my $db = $cdb; #maybe one of the others my $dbkey = 'ChangeThis'; 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'; } ## end if (!TRUE) 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'; } ## end if (!TRUE) 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'; } ## end if (!TRUE) 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'; } ## end if (!TRUE) 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'; } ## end if (!TRUE) 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'; } ## end if (!TRUE) if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub perform_LIST sub perform_PARAMS { my $c = shift; my $prefix_data = shift; #Data hash as parameter my $ret = ""; my $db = $cdb; #maybe one of the others 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 (!$db->set_prop($dbkey, 'status', $c->param('status'), type => 'service')) { $ret .= 'Perform/save failed for status'; } if (!$db->set_prop($dbkey, 'hookScript', $c->param('hookScript'), type => 'service')) { $ret .= 'Perform/save failed for hookScript'; } if (!$db->set_prop($dbkey, 'hostOverride', $c->param('hostOverride'), type => 'service')) { $ret .= 'Perform/save failed for hostOverride'; } if (!$db->set_prop($dbkey, 'ACCEPT_TERMS', $c->param('ACCEPT_TERMS'), type => 'service')) { $ret .= 'Perform/save failed for ACCEPT_TERMS'; } if (!$db->set_prop($dbkey, 'API', $c->param('API'), type => 'service')) { $ret .= 'Perform/save failed for API'; } if (!$db->set_prop($dbkey, 'keysize', $c->param('keysize'), type => 'service')) { $ret .= 'Perform/save failed for keysize'; } if (!$db->set_prop($dbkey, 'configure', $c->param('configure'), type => 'service')) { $ret .= 'Perform/save failed for configure'; } if (!$db->set_prop($dbkey, 'email', $c->param('email'), type => 'service')) { $ret .= 'Perform/save failed for email'; } if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub perform_PARAMS sub perform_CHECKALLDOMAINS { my $c = shift; my $prefix_data = shift; #Data hash as parameter my $ret = ""; my $db = $cdb; #maybe one of the others my $dbkey = 'ChangeThis'; 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'; } ## end if (!TRUE) if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub perform_CHECKALLDOMAINS sub perform_CHECKALLENABLEDDOMAINS { my $c = shift; my $prefix_data = shift; #Data hash as parameter my $ret = ""; my $db = $cdb; #maybe one of the others my $dbkey = 'ChangeThis'; 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'; } ## end if (!TRUE) if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub perform_CHECKALLENABLEDDOMAINS sub perform_CHECKONEDOMAIN { my $c = shift; my $prefix_data = shift; #Data hash as parameter my $ret = ""; my $db = $cdb; #maybe one of the others my $dbkey = 'ChangeThis'; 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'; } ## end if (!TRUE) 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'; } ## end if (!TRUE) if ($ret eq "") { $ret = 'ok'; } return $ret; } ## end sub perform_CHECKONEDOMAIN sub create_link { # WIP my ($c, $route, $panel, $index) = @_; my $link = "$route?trt=$panel&Selected=$index"; return $link; } ## end sub create_link sub get_my_ip { my ($self, $item, $prop, $default) = @_; my $output = `/usr/sbin/e-smith/getmyip`; return $output || "IP"; } ## end sub get_my_ip sub update_one_domain { my ($self, $domain) = @_; return "$domain not domain" unless ($ddb->get($domain) || $hdb->get($domain)); ($domain) = ($domain =~ /([\w\p{L}.]+)/); my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains " " $domain `; return $output || "-empty-"; } ## end sub update_one_domain sub update_all_domains { my $self = shift; my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" all `; return $output || "-empty-"; } ## end sub update_all_domains sub update_enabled_domains { my $self = shift; my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" enabled `; return $output || "-empty-"; } ## end sub update_enabled_domains 1;