From 87874b6523570e7ed24f3640aa00bd6284164a98 Mon Sep 17 00:00:00 2001 From: Jorj Bauer Date: Sat, 24 Jan 2026 14:40:24 -0500 Subject: [PATCH] add missing files --- bin/dump-config | 14 ++++++++ bin/update-config | 87 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100755 bin/dump-config create mode 100755 bin/update-config diff --git a/bin/dump-config b/bin/dump-config new file mode 100755 index 0000000..f19c7b6 --- /dev/null +++ b/bin/dump-config @@ -0,0 +1,14 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Martnet::DDNS; +use JSON::PP qw/encode_json/; + +my $ddns = Martnet::DDNS->new(); +my $cfg = $ddns->get_config(); + +my $json = JSON::PP->new->canonical(1)->pretty(1); +print $json->encode($cfg); + +exit 0; diff --git a/bin/update-config b/bin/update-config new file mode 100755 index 0000000..515837b --- /dev/null +++ b/bin/update-config @@ -0,0 +1,87 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Martnet::DDNS; +use Getopt::Long qw/GetOptions/; +use JSON::PP qw//; + +sub usage { + die "Usage: update-config [--default-master IP] [--vhost-default-web-ip IP] [--soa-mname FQDN] [--soa-rname FQDN]\n" + . " [--ns FQDN --ns FQDN ...] [--mx PRIORITY:FQDN --mx PRIORITY:FQDN ...]\n" + . " [--master-ddns-keyname NAME] [--master-ddns-keyfile PATH]\n"; +} + +my $default_master; +my $vhost_default_web_ip; +my $soa_mname; +my $soa_rname; +my @ns; +my @mx; +my $master_ddns_keyname; +my $master_ddns_keyfile; + +GetOptions( + 'default-master=s' => \$default_master, + 'vhost-default-web-ip=s' => \$vhost_default_web_ip, + 'soa-mname=s' => \$soa_mname, + 'soa-rname=s' => \$soa_rname, + 'ns=s@' => \@ns, + 'mx=s@' => \@mx, + 'master-ddns-keyname=s' => \$master_ddns_keyname, + 'master-ddns-keyfile=s' => \$master_ddns_keyfile, +) or usage(); + +my $ddns = Martnet::DDNS->new(); +my $old = $ddns->get_config(); + +my $json = JSON::PP->new->canonical(1)->pretty(1); + +print "Current _config:\n"; +print $json->encode($old); + +# Build new config (copy then modify) +my %new = %$old; + +$new{default_master} = $default_master if defined $default_master; +$new{vhost_default_web_ip} = $vhost_default_web_ip if defined $vhost_default_web_ip; +$new{soa_mname} = $soa_mname if defined $soa_mname; +$new{soa_rname} = $soa_rname if defined $soa_rname; +$new{master_ddns_keyname} = $master_ddns_keyname if defined $master_ddns_keyname; +$new{master_ddns_keyfile} = $master_ddns_keyfile if defined $master_ddns_keyfile; + +if (@ns) { + $new{ns} = \@ns; +} + +if (@mx) { + my @mx_arr; + foreach my $m (@mx) { + die "Invalid --mx format (expected PRIORITY:FQDN): $m\n" + unless ($m =~ /^(\d+):(\S+)$/); + push @mx_arr, { priority => int($1), host => $2 }; + } + $new{vhost_mx} = \@mx_arr; +} + +print "\nNew _config to apply:\n"; +print $json->encode(\%new); + +print "\nApplying...\n"; +$ddns->set_config(\%new); + +my $after = $ddns->get_config(); + +print "Applied. Current _config after update:\n"; +print $json->encode($after); + +# Basic success check +foreach my $k (keys %new) { + next unless exists $after->{$k}; + if (JSON::PP->new->canonical(1)->encode($after->{$k}) ne JSON::PP->new->canonical(1)->encode($new{$k})) { + die "Update failed for key '$k'\n"; + } +} + +print "Update succeeded.\n"; +exit 0;