diff --git a/Targets/Letsencrypt/Letsencrypt-Custom.pm b/Targets/Letsencrypt/Letsencrypt-Custom.pm index e6f32d7..ca68016 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-11-16 10:30: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 @@ -12,461 +12,555 @@ 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 $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 = ""; - 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; - } + if (!TRUE) #validate $c->param('InternalIP') + { + $ret .= 'Validation for InternalIP failed'; + } - 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; - } + if (!TRUE) #validate $c->param('ExternalIP') + { + $ret .= 'Validation for ExternalIP failed'; + } - 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; - } + if (!TRUE) #validate $c->param('InternetIP') + { + $ret .= 'Validation for InternetIP failed'; + } - 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; - } + if (!TRUE) #validate $c->param('Issuer') + { + $ret .= 'Validation for Issuer failed'; + } - 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; - } + 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 { - 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)); + # Return a hash with the fields required which will be loaded into the shared data + my $c = shift; - 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; - } + # 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; - } +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; - } + # 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_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; - } +sub get_data_for_panel_CHECKALLDOMAINS { - 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; - } + # 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' - # 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 - ); - - + #'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" }, + { "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), - } - } - } - return @data; -} + 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 $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_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; - } +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_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; - } +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_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; - } - - 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; - } - - 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; - } +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'; - 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';} - 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. $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. $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. $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. $db->set_prop($dbkey,'NotBefore',$c->param('NotBefore'),type=>'service')) - {$ret .= 'Perform/save failed for NotBefore';} - if ($ret eq "") {$ret = 'ok';} - return $ret; - } + 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) - 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; - } - - 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';} - if ($ret eq "") {$ret = 'ok';} - return $ret; - } + 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) - 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';} - if ($ret eq "") {$ret = 'ok';} - return $ret; - } + 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) - 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';} - 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; - } + 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) -sub create_link{ - # WIP - my ($c,$route, $panel, $index) = @_; - my $link = "$route?trt=$panel&Selected=$index"; - return $link; -} + 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 get_my_ip -{ +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"; -} + return $output || "IP"; +} ## end sub get_my_ip -sub update_one_domain -{ - my ($self,$domain) = @_; +sub update_one_domain { + my ($self, $domain) = @_; return "$domain not domain" unless ($ddb->get($domain) || $hdb->get($domain)); - ($domain) = ($domain =~ /([\w\p{L}.]+)/); + ($domain) = ($domain =~ /([\w\p{L}.]+)/); my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains " " $domain `; - return $output || "-empty-"; -} + return $output || "-empty-"; +} ## end sub update_one_domain -sub update_all_domains -{ - my $self = shift; +sub update_all_domains { + my $self = shift; my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" all `; - return $output || "-empty-"; -} + return $output || "-empty-"; +} ## end sub update_all_domains -sub update_enabled_domains -{ - my $self = shift; +sub update_enabled_domains { + my $self = shift; my $output = `/etc/e-smith/events/actions/letsencrypt-setdomains "" "" enabled `; - return $output || "-empty-"; -} - - + return $output || "-empty-"; +} ## end sub update_enabled_domains 1; \ No newline at end of file diff --git a/Targets/Letsencrypt/Letsencrypt.pm b/Targets/Letsencrypt/Letsencrypt.pm index 821002a..6e700e7 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-09 17:25:37 +# Generated by SM2Gen version:0.8 Chameleon version:4.5.4 On Python:3.12.3 at 2024-12-01 15:22:43 # #---------------------------------------------------------------------- # heading : Network @@ -15,25 +15,19 @@ package SrvMngr::Controller::Letsencrypt; # # Documentation: https://wiki.contribs.org/Letsencrypt #---------------------------------------------------------------------- - # # 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::util::network; use esmith::ConfigDB; @@ -41,389 +35,414 @@ use esmith::AccountsDB; use esmith::NetworksDB; use esmith::HostsDB; use esmith::DomainsDB; - - - -require '/usr/share/smanager/lib/SrvMngr/Controller/Letsencrypt-Custom.pm'; #The code that is to be added by the developer +require + '/usr/share/smanager/lib/SrvMngr/Controller/Letsencrypt-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 ); - - #The most common ones - 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 = ''; - - $lets_data{'trt'} = 'LIST'; - - #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 - - - $c->do_display($lets_data{'trt'}); - -} - -# 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 - + # + # 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 $modul = ''; - - #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"); + #The most common ones + 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 $title = $c->l('lets_Letsencrypt_certificate'); + my $modul = ''; + $lets_data{'trt'} = 'LIST'; - # Accessing all POST parameters + #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 + $c->do_display($lets_data{'trt'}); +} ## end sub main + +# 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 $modul = ''; + + #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'); + + # 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') || 'LIST'; #hidden control on every form. + # the value of trt will tell you which panel has returned + 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) my $thispanel; - - if ($trt eq 'LIST'){ - #Validate form parameters for panel LIST - $ret = $c->validate_LIST(\%lets_data); - $thispanel = 'LIST'; - } - - if ($trt eq 'PARAMS'){ - #Validate form parameters for panel PARAMS - $ret = $c->validate_PARAMS(\%lets_data); - $thispanel = 'PARAMS'; - } - - if ($trt eq 'CHECKALLDOMAINS'){ - #Validate form parameters for panel CHECKALLDOMAINS - $ret = $c->validate_CHECKALLDOMAINS(\%lets_data); - $thispanel = 'CHECKALLDOMAINS'; - } - - if ($trt eq 'CHECKALLENABLEDDOMAINS'){ - #Validate form parameters for panel CHECKALLENABLEDDOMAINS - $ret = $c->validate_CHECKALLENABLEDDOMAINS(\%lets_data); - $thispanel = 'CHECKALLENABLEDDOMAINS'; - } - - if ($trt eq 'CHECKONEDOMAIN'){ - #Validate form parameters for panel CHECKONEDOMAIN - $ret = $c->validate_CHECKONEDOMAIN(\%lets_data); - $thispanel = 'CHECKONEDOMAIN'; - } - - if ($ret ne "ok"){ - $c->do_display($thispanel); - } else { - #Do whatever is needed, including writing values to the DB - - - if ($trt eq 'LIST'){ - #do whatever is required ... - $ret = $c->perform_LIST(\%lets_data); - if ($ret ne "ok") { - # return to the panel with error message - $c->stash(error => $c->l($ret)); - $c->stash( - title => $title, - modul => $modul, - lets_data => \%lets_data - ); - $c->render(template => "letsencrypt"); - } else { - $c->stash( success => $c->l('lets_LIST_panel_action_was_successful')); #A bit bland - edit it in the lex file - } - } - - 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->stash( - title => $title, - modul => $modul, - lets_data => \%lets_data - ); - $c->render(template => "letsencrypt"); - } else { - $c->stash( success => $c->l('lets_PARAMS_panel_action_was_successful')); #A bit bland - edit it in the lex file - } - } - - if ($trt eq 'CHECKALLDOMAINS'){ - #do whatever is required ... - $ret = $c->perform_CHECKALLDOMAINS(\%lets_data); - if ($ret ne "ok") { - # return to the panel with error message - $c->stash(error => $c->l($ret)); - $c->stash( - title => $title, - modul => $modul, - lets_data => \%lets_data - ); - $c->render(template => "letsencrypt"); - } else { - $c->stash( success => $c->l('lets_CHECKALLDOMAINS_panel_action_was_successful')); #A bit bland - edit it in the lex file - } - } - - if ($trt eq 'CHECKALLENABLEDDOMAINS'){ - #do whatever is required ... - $ret = $c->perform_CHECKALLENABLEDDOMAINS(\%lets_data); - if ($ret ne "ok") { - # return to the panel with error message - $c->stash(error => $c->l($ret)); - $c->stash( - title => $title, - modul => $modul, - lets_data => \%lets_data - ); - $c->render(template => "letsencrypt"); - } else { - $c->stash( success => $c->l('lets_CHECKALLENABLEDDOMAINS_panel_action_was_successful')); #A bit bland - edit it in the lex file - } - } - - if ($trt eq 'CHECKONEDOMAIN'){ - #do whatever is required ... - $ret = $c->perform_CHECKONEDOMAIN(\%lets_data); - if ($ret ne "ok") { - # return to the panel with error message - $c->stash(error => $c->l($ret)); - $c->stash( - title => $title, - modul => $modul, - lets_data => \%lets_data - ); - $c->render(template => "letsencrypt"); - } else { - $c->stash( success => $c->l('lets_CHECKONEDOMAIN_panel_action_was_successful')); #A bit bland - edit it in the lex file - } - } - - # and call any signal-events needed - #TBD - # Setup shared data and call panel - if ('none' eq 'none') { - $lets_data{'trt'} = 'LIST'; - } else { - $lets_data{'trt'} = 'none'; - } - $c->do_display($lets_data{'trt'}); - } -} + + if ($trt eq 'LIST') { + + #Validate form parameters for panel LIST + $ret = $c->validate_LIST(\%lets_data); + $thispanel = 'LIST'; + } ## end if ($trt eq 'LIST') + + if ($trt eq 'PARAMS') { + + #Validate form parameters for panel PARAMS + $ret = $c->validate_PARAMS(\%lets_data); + $thispanel = 'PARAMS'; + } ## end if ($trt eq 'PARAMS') + + if ($trt eq 'CHECKALLDOMAINS') { + + #Validate form parameters for panel CHECKALLDOMAINS + $ret = $c->validate_CHECKALLDOMAINS(\%lets_data); + $thispanel = 'CHECKALLDOMAINS'; + } ## end if ($trt eq 'CHECKALLDOMAINS') + + if ($trt eq 'CHECKALLENABLEDDOMAINS') { + + #Validate form parameters for panel CHECKALLENABLEDDOMAINS + $ret = $c->validate_CHECKALLENABLEDDOMAINS(\%lets_data); + $thispanel = 'CHECKALLENABLEDDOMAINS'; + } ## end if ($trt eq 'CHECKALLENABLEDDOMAINS') + + if ($trt eq 'CHECKONEDOMAIN') { + + #Validate form parameters for panel CHECKONEDOMAIN + $ret = $c->validate_CHECKONEDOMAIN(\%lets_data); + $thispanel = 'CHECKONEDOMAIN'; + } ## end if ($trt eq 'CHECKONEDOMAIN') + + if ($ret ne "ok") { + $c->do_display($thispanel); + } else { + + #Do whatever is needed, including writing values to the DB + if ($trt eq 'LIST') { + + #do whatever is required ... + $ret = $c->perform_LIST(\%lets_data); + + if ($ret ne "ok") { + + # return to the panel with error message + $c->stash(error => $c->l($ret)); + $c->stash( + title => $title, + modul => $modul, + lets_data => \%lets_data + ); + $c->render(template => "letsencrypt"); + } else { + $c->stash(success => $c->l('lets_LIST_panel_action_was_successful')) + ; #A bit bland - edit it in the lex file + } + } ## end if ($trt eq 'LIST') + + 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->stash( + title => $title, + modul => $modul, + lets_data => \%lets_data + ); + $c->render(template => "letsencrypt"); + } else { + $c->stash(success => $c->l('lets_PARAMS_panel_action_was_successful')) + ; #A bit bland - edit it in the lex file + } + } ## end if ($trt eq 'PARAMS') + + if ($trt eq 'CHECKALLDOMAINS') { + + #do whatever is required ... + $ret = $c->perform_CHECKALLDOMAINS(\%lets_data); + + if ($ret ne "ok") { + + # return to the panel with error message + $c->stash(error => $c->l($ret)); + $c->stash( + title => $title, + modul => $modul, + lets_data => \%lets_data + ); + $c->render(template => "letsencrypt"); + } else { + $c->stash(success => $c->l('lets_CHECKALLDOMAINS_panel_action_was_successful')) + ; #A bit bland - edit it in the lex file + } + } ## end if ($trt eq 'CHECKALLDOMAINS') + + if ($trt eq 'CHECKALLENABLEDDOMAINS') { + + #do whatever is required ... + $ret = $c->perform_CHECKALLENABLEDDOMAINS(\%lets_data); + + if ($ret ne "ok") { + + # return to the panel with error message + $c->stash(error => $c->l($ret)); + $c->stash( + title => $title, + modul => $modul, + lets_data => \%lets_data + ); + $c->render(template => "letsencrypt"); + } else { + $c->stash(success => $c->l('lets_CHECKALLENABLEDDOMAINS_panel_action_was_successful')) + ; #A bit bland - edit it in the lex file + } + } ## end if ($trt eq 'CHECKALLENABLEDDOMAINS') + + if ($trt eq 'CHECKONEDOMAIN') { + + #do whatever is required ... + $ret = $c->perform_CHECKONEDOMAIN(\%lets_data); + + if ($ret ne "ok") { + + # return to the panel with error message + $c->stash(error => $c->l($ret)); + $c->stash( + title => $title, + modul => $modul, + lets_data => \%lets_data + ); + $c->render(template => "letsencrypt"); + } else { + $c->stash(success => $c->l('lets_CHECKONEDOMAIN_panel_action_was_successful')) + ; #A bit bland - edit it in the lex file + } + } ## end if ($trt eq 'CHECKONEDOMAIN') + + # and call any signal-events needed + #TBD + # Setup shared data and call panel + if ('none' eq 'none') { + $lets_data{'trt'} = 'LIST'; + } else { + $lets_data{'trt'} = 'none'; + } + $c->do_display($lets_data{'trt'}); + } ## end else [ if ($ret ne "ok") ] +} ## end sub do_update 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,$trt) = @_; + # + # 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, $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"); - + #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 = ""; + my $title = $c->l('lets_Letsencrypt_certificate'); + my $modul = ""; - # Accessing all parameters - my %params = $c->req->params->to_hash; + # Accessing all parameters + my $params = $c->req->params->to_hash; # Get number of parameters - my $num_params = keys %params; - + my $num_params = scalar 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 + } - # 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){ + + if ($trt eq 'LIST') { + + #Validate Get selected row (if applicable) LIST + %selectedrow = $c->get_selected_LIST($lets_data{'Selected'}, $is_new_record); + } ## end if ($trt eq 'LIST') + + if ($trt eq 'PARAMS') { + + #Validate Get selected row (if applicable) PARAMS + %selectedrow = $c->get_selected_PARAMS($lets_data{'Selected'}, $is_new_record); + } ## end if ($trt eq 'PARAMS') + + if ($trt eq 'CHECKALLDOMAINS') { + + #Validate Get selected row (if applicable) CHECKALLDOMAINS + %selectedrow = $c->get_selected_CHECKALLDOMAINS($lets_data{'Selected'}, $is_new_record); + } ## end if ($trt eq 'CHECKALLDOMAINS') + + if ($trt eq 'CHECKALLENABLEDDOMAINS') { + + #Validate Get selected row (if applicable) CHECKALLENABLEDDOMAINS + %selectedrow = $c->get_selected_CHECKALLENABLEDDOMAINS($lets_data{'Selected'}, $is_new_record); + } ## end if ($trt eq 'CHECKALLENABLEDDOMAINS') + + if ($trt eq 'CHECKONEDOMAIN') { + + #Validate Get selected row (if applicable) CHECKONEDOMAIN + %selectedrow = $c->get_selected_CHECKONEDOMAIN($lets_data{'Selected'}, $is_new_record); + } ## end if ($trt eq 'CHECKONEDOMAIN') + + #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"); -} + + # 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; + } + } ## end if ($trt eq 'LIST') + + 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; + } + } ## end if ($trt eq 'PARAMS') + + 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; + } + } ## end if ($trt eq 'CHECKALLDOMAINS') + + 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; + } + } ## end if ($trt eq 'CHECKALLENABLEDDOMAINS') + + 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; + } + } ## end if ($trt eq 'CHECKONEDOMAIN') + + # 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"); +} ## end sub do_display 1; \ No newline at end of file diff --git a/Targets/Nutups/Nutups-Custom.pm b/Targets/Nutups/Nutups-Custom.pm index 090d007..0606bc2 100644 --- a/Targets/Nutups/Nutups-Custom.pm +++ b/Targets/Nutups/Nutups-Custom.pm @@ -69,13 +69,12 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Get singleton data for each panel - sub get_data_for_panel_STATUS { + sub get_data_for_panel_STATUS { # Return a hash with the fields required which will be loaded into the shared data my $c = shift; my %ret = ( - 'Data1'=>'Data for STATUS', #Example # fields from Inputs in STATUS $fields['STATUS'] - 'UPSStatus'=>'UPSStatus contents', + 'UPSStatus'=>get_ups_details() ); return %ret; @@ -85,18 +84,18 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); # Return a hash with the fields required which will be loaded into the shared data my $c = shift; my %ret = ( - 'Data1'=>'Data for CONFIG', #Example # fields from Inputs in CONFIG $fields['CONFIG'] - 'status'=>'status contents', - 'Nutmode'=>'Nutmode contents', - 'SlaveUPS_Name'=>'SlaveUPS_Name contents', - 'MasterUPS_Name'=>'MasterUPS_Name contents', - 'UPS_Model'=>'UPS_Model contents', - 'UPS_Device'=>'UPS_Device contents', - 'UPS_gen_Type'=>'UPS_gen_Type contents', - 'UPS_gen_Mfr'=>'UPS_gen_Mfr contents', - 'UPS_gen_Model'=>'UPS_gen_Model contents', - + 'status'=>$cdb->get_prop('nut', 'status', 'disabled'), + 'Nutmode'=>$cdb->get_prop('nut', 'mode', 'standalone'), + 'SlaveUPS_Name'=>$cdb->get_prop('nut', 'SlaveUPS', ''), + 'MasterUPS_Name'=>$cdb->get_prop('nut', 'MasterUPS', ''), + 'UPS_Model'=>$cdb->get_prop('nut', 'Model', 'usbhid-ups'), + 'UPS_Device'=>$cdb->get_prop('nut', 'Device', 'auto'), + 'UPS_gen_Type'=>$cdb->get_prop('nut', 'Type', ''), + 'UPS_gen_Mfr'=>$cdb->get_prop('nut', 'mfr', ''), + 'UPS_gen_Model'=>$cdb->get_prop('nut', 'mdl', ''), + 'MasterUPS_Password'=>$cdb->get_prop('nut', 'MasterPass', ''), + 'SlaveUPS_Password'=>$cdb->get_prop('nut', 'SlavePass', ''), ); return %ret; } @@ -114,7 +113,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $selected = shift; #Parameter is name of selected row. my $is_new_record = shift; #Indicates new record required (defaults) my %ret = {}; - return $ret; + return %ret; } sub get_selected_CONFIG { @@ -122,7 +121,7 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $selected = shift; #Parameter is name of selected row. my $is_new_record = shift; #Indicates new record required (defaults) my %ret = {}; - return $ret; + return %ret; } @@ -146,27 +145,28 @@ our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db"); my $c = shift; my $prefix_data = shift; #Data hash as parameter my $ret = ""; + our $cdb = esmith::ConfigDB->open() || die("Couldn't open config db"); my $db = $cdb; #maybe one of the others - my $dbkey = 'ChangeThis'; + my $dbkey = 'nut'; # 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. $db->set_prop($dbkey,'status',$c->param('status'),type=>'service')) + if (!$db->set_prop($dbkey,'status',$c->param('status'),type=>'service')) {$ret .= 'Perform/save failed for status';} - if (! TRUE) #copy or perform with value: Nutmode e.g. $db->set_prop($dbkey,'Nutmode',$c->param('Nutmode'),type=>'service')) + if (!$db->set_prop($dbkey,'Nutmode',$c->param('Nutmode'),type=>'service')) {$ret .= 'Perform/save failed for Nutmode';} - if (! TRUE) #copy or perform with value: SlaveUPS_Name e.g. $db->set_prop($dbkey,'SlaveUPS_Name',$c->param('SlaveUPS_Name'),type=>'service')) + if (!$db->set_prop($dbkey,'SlaveUPS_Name',$c->param('SlaveUPS_Name'),type=>'service')) {$ret .= 'Perform/save failed for SlaveUPS_Name';} - if (! TRUE) #copy or perform with value: MasterUPS_Name e.g. $db->set_prop($dbkey,'MasterUPS_Name',$c->param('MasterUPS_Name'),type=>'service')) + if (!$db->set_prop($dbkey,'MasterUPS_Name',$c->param('MasterUPS_Name'),type=>'service')) {$ret .= 'Perform/save failed for MasterUPS_Name';} - if (! TRUE) #copy or perform with value: UPS_Model e.g. $db->set_prop($dbkey,'UPS_Model',$c->param('UPS_Model'),type=>'service')) + if (!$db->set_prop($dbkey,'Model',$c->param('UPS_Model'),type=>'service')) {$ret .= 'Perform/save failed for UPS_Model';} - if (! TRUE) #copy or perform with value: UPS_Device e.g. $db->set_prop($dbkey,'UPS_Device',$c->param('UPS_Device'),type=>'service')) + if (!$db->set_prop($dbkey,'Device',$c->param('UPS_Device'),type=>'service')) {$ret .= 'Perform/save failed for UPS_Device';} - if (! TRUE) #copy or perform with value: UPS_gen_Type e.g. $db->set_prop($dbkey,'UPS_gen_Type',$c->param('UPS_gen_Type'),type=>'service')) + if (!$db->set_prop($dbkey,'Type',$c->param('UPS_gen_Type'),type=>'service')) {$ret .= 'Perform/save failed for UPS_gen_Type';} - if (! TRUE) #copy or perform with value: UPS_gen_Mfr e.g. $db->set_prop($dbkey,'UPS_gen_Mfr',$c->param('UPS_gen_Mfr'),type=>'service')) + if (!$db->set_prop($dbkey,'mfr',$c->param('UPS_gen_Mfr'),type=>'service')) {$ret .= 'Perform/save failed for UPS_gen_Mfr';} - if (! TRUE) #copy or perform with value: UPS_gen_Model e.g. $db->set_prop($dbkey,'UPS_gen_Model',$c->param('UPS_gen_Model'),type=>'service')) + if (!$db->set_prop($dbkey,'mdl',$c->param('UPS_gen_Model'),type=>'service')) {$ret .= 'Perform/save failed for UPS_gen_Model';} if ($ret eq "") {$ret = 'ok';} return $ret; @@ -183,7 +183,7 @@ sub create_link{ sub get_model_options { # Execute the RPM command and capture the output - my @output = qx{rpm -ql nut | grep /usr/sbin}; + my @output = qx{rpm -ql nut | grep /usr/sbin/}; # Check for errors if ($? != 0) { @@ -192,10 +192,43 @@ sub get_model_options { } # Remove "/usr/sbin" from the front of each line - s{^/usr/sbin}{} for @output; + s{^/usr/sbin/}{} for @output; # Trim whitespace from each element and return the array chomp(@output); # Remove newline characters from each line - return ["fred","Art"] #@output; # Return the array of modified output lines + return @output; # Return the array of modified output lines +} + +sub get_ups_details { + my ($ups_system_name) = @_; + # Determine the default based on $nut + if ( ($cdb->get_prop('nut', 'Master', 'yes')) eq 'yes' ) { + $ups_system_name //= $cdb->get_prop('nut', 'MasterUPS', 'UPS\@localhost'); # Master from DB + } else { + $ups_system_name //= $cdb->get_prop('nut', 'SlaveUPS', 'apc\@192.168.1.99'); # Use Slave UPS if Master is "no" + } + + # If ups_system_name is still empty or undefined, use the hardcoded default + #$ups_system_name //= "apc\@192.168.1.99"; # Fallback default + + + # Execute the 'upsc' command + my $command = "/usr/bin/upsc $ups_system_name"; + my $result = qx/$command/; + + # Check for execution errors + if ($? != 0) { + return "Error executing command: $! ($command)"; + } + + # Format the output + my @lines = split /\n/, $result; # Split the result into lines + my $formatted_output = "UPS Details for $ups_system_name:\n"; + + foreach my $line (@lines) { + $formatted_output .= " - $line\n"; # Format each line + } + + return $formatted_output; } 1; \ No newline at end of file diff --git a/Targets/Nutups/Nutups.pm b/Targets/Nutups/Nutups.pm index 1c6dae7..f643560 100644 --- a/Targets/Nutups/Nutups.pm +++ b/Targets/Nutups/Nutups.pm @@ -232,10 +232,10 @@ sub do_display { my $modul = ""; # Accessing all parameters - my %params = $c->req->params->to_hash; + my $params = $c->req->params->to_hash; # Get number of parameters - my $num_params = keys %params; + my $num_params = scalar keys %$params; #Tag as Post or Get (ie. create new entry or edit existing one my $is_new_record = ($c->req->method() eq 'POST'); diff --git a/Targets/Nutups/_nut_CONFIG.html.ep b/Targets/Nutups/_nut_CONFIG.html.ep index b84e179..446a6df 100644 --- a/Targets/Nutups/_nut_CONFIG.html.ep +++ b/Targets/Nutups/_nut_CONFIG.html.ep @@ -7,7 +7,7 @@ SelectInput(); }; - % if ($config->{debug} == 1) { + % if (config->{debug} == 1) {
 			%= dumper $nut_data
 		
@@ -17,6 +17,8 @@ % param 'trt' => $nut_data->{trt} unless param 'trt'; %= hidden_field 'trt' => $nut_data->{trt} %# Inputs etc in here. + %# my $ServerNameReg = '([A-Za-z0-9._%+-]+)@((?:(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,}|(?:\d{1,3}\.){3}\d{1,3})|(?:[A-Za-z0-9-]+))'; + % my $ServerNameReg = '(.*)@(.*)';

<%=l('nut_Manage_Nutups-config_settings:')%>

@@ -45,14 +47,15 @@ %=l('nut_SlaveUPS_UPSNAME@IP') % param 'SlaveUPS_Name' => $nut_data->{SlaveUPS_Name} unless param 'SlaveUPS_Name'; - %= text_field 'SlaveUPS_Name', size => '50', class => 'textinput SlaveUPS_Name' , pattern=>'.*' , placeholder=>'SlaveUPS_Name' + %= text_field 'SlaveUPS_Name', size => '50', class => 'textinput SlaveUPS_Name', pattern => "$ServerNameReg", placeholder=>'server@ip', title=>"Expecting UPSname\@IP or hostname"

%=l('nut_SlaveUPS_Password') + % my $placeholder1 = ($nut_data->{MasterUPS_Password} && $nut_data->{MasterUPS_Password} =~ /\S/) ? "password set" : "password not set"; % param 'SlaveUPS_Password' => $nut_data->{SlaveUPS_Password} unless param 'SlaveUPS_Password'; - %=password_field 'SlaveUPS_Password', class => 'pass4 sme-password' + %=password_field 'SlaveUPS_Password', class => 'pass4 sme-password' , placeholder => $placeholder1

@@ -68,14 +71,15 @@ %=l('nut_MasterUPS_UPSNAME@IP') % param 'MasterUPS_Name' => $nut_data->{MasterUPS_Name} unless param 'MasterUPS_Name'; - %= text_field 'MasterUPS_Name', size => '50', class => 'textinput MasterUPS_Name' , pattern=>'.*' , placeholder=>'MasterUPS_Name' + %= text_field 'MasterUPS_Name', size => '50', class => 'textinput MasterUPS_Name' , pattern=>$ServerNameReg , placeholder=>'server@ip', title=>"Expecting UPSname\@IP or hostname"

%=l('nut_MasterUPS_Password') + % my $placeholder2 = ($nut_data->{MasterUPS_Password} && $nut_data->{MasterUPS_Password} =~ /\S/) ? "password set" : "password not set"; % param 'MasterUPS_Password' => $nut_data->{MasterUPS_Password} unless param 'MasterUPS_Password'; - %=password_field 'MasterUPS_Password', class => 'pass6 sme-password' + %=password_field 'MasterUPS_Password', class => 'pass6 sme-password', placeholder => $placeholder2

diff --git a/Templates/controller.pm.tem b/Templates/controller.pm.tem index d59617c..5505e06 100644 --- a/Templates/controller.pm.tem +++ b/Templates/controller.pm.tem @@ -125,11 +125,11 @@ sub do_update { my %${prefix}_data = (); my $title = $c->l('${prefix}_${MenuDescription}'); - # Accessing all POST parameters - my %params = $c->req->params->to_hash; + # Accessing all POST/GET parameters + my $params = $c->req->params->to_hash; # Get number of POST parameters - my $num_params = keys %params; + my $num_params = keys scaler %$params; #Params are available in the hash "params" - copy to the prefix_data hash #while (my ($key, $value) = each %{$c->req->params->to_hash}) { diff --git a/Templates/custom.pm.tem b/Templates/custom.pm.tem index 58461b8..61df817 100644 --- a/Templates/custom.pm.tem +++ b/Templates/custom.pm.tem @@ -103,7 +103,7 @@ sub get_${tablecontrol[0]} { my $selected = shift; #Parameter is name of selected row. my $is_new_record = shift; #Indicates new record required (defaults) my %ret = {}; - return $ret; + return %ret; } diff --git a/Templates/layout.html.ep.tem b/Templates/layout.html.ep.tem index 7c08ecf..99ca07b 100644 --- a/Templates/layout.html.ep.tem +++ b/Templates/layout.html.ep.tem @@ -32,6 +32,7 @@ %= $c->l($c->stash('success'));

+
%} elsif ($c->stash('error')) {
@@ -39,6 +40,7 @@ %= $c->l($c->stash('error'));

+
%} %#Routing to partials according to trt parameter.