diff --git a/docs/ntppool/tpl/manage/server.html b/docs/ntppool/tpl/manage/server.html index 4c904ef..f4212ec 100644 --- a/docs/ntppool/tpl/manage/server.html +++ b/docs/ntppool/tpl/manage/server.html @@ -4,6 +4,10 @@ [% IF server.hostname %]Hostname: [% server.hostname | html %]
[% END %] IP: [% server.ip | html %]
+IPv6: +[% IF server.ipv6 %][% server.ipv6 | html %] +[% ELSE %] +[% END %]
[% IF server.deletion_on %] This server is scheduled for deletion on [% server.deletion_on.strftime("%B %d, %Y") %]. diff --git a/lib/Bundle/NP.pm b/lib/Bundle/NP.pm index 7a1a8c3..af35e21 100644 --- a/lib/Bundle/NP.pm +++ b/lib/Bundle/NP.pm @@ -88,6 +88,7 @@ Email::Simple::Creator Digest::HMAC_MD5 Net::IP Net::DNS +Net::IPv6Addr Test::Pod Pod::Coverage diff --git a/lib/NP/Model.pm b/lib/NP/Model.pm index 66f5d31..2544ce7 100644 --- a/lib/NP/Model.pm +++ b/lib/NP/Model.pm @@ -186,6 +186,7 @@ __PACKAGE__->meta->setup( columns => [ id => { type => 'integer', not_null => 1 }, ip => { type => 'varchar', default => '', length => 15, not_null => 1 }, + ipv6 => { type => 'varchar', default => '', length => 40 }, user_id => { type => 'integer', default => '', not_null => 1 }, hostname => { type => 'varchar', length => 255 }, stratum => { type => 'integer' }, diff --git a/lib/NTPPool/Control/Manage.pm b/lib/NTPPool/Control/Manage.pm index e80e1af..3e17841 100644 --- a/lib/NTPPool/Control/Manage.pm +++ b/lib/NTPPool/Control/Manage.pm @@ -10,6 +10,7 @@ use Email::Send 'SMTP'; use Sys::Hostname qw(hostname); use Email::Date qw(); use JSON::XS qw(encode_json); +use Net::IPv6Addr; sub render { my $self = shift; @@ -157,6 +158,7 @@ sub handle_update { # deletion and non-js netspeed if ($self->request->uri =~ m!^/manage/server/update/server!) { return $self->handle_update_netspeed if $self->req_param('Update'); + return $self->handle_update_ipv6 if $self->req_param('SetIPv6'); if ($self->req_param('Delete')) { my $server = $self->req_server or return NOT_FOUND; return $self->redirect("/manage/server/delete?server=" . $server->ip); @@ -196,6 +198,19 @@ sub handle_update_netspeed { } +sub handle_update_ipv6 { + my $self = shift; + my $server = $self->req_server or return NOT_FOUND; + my $ipv6 = $self->req_param('ipv6'); + chomp($ipv6); + unless(Net::IPv6Addr::ipv6_chkip($ipv6)) { + return OK, "Invalid IPv6 address"; + } + $server->ipv6($self->req_param('ipv6')); + $server->save; + return OK, $self->evaluate_template('tpl/manage.html'); +} + sub handle_update_profile { my $self = shift; diff --git a/sql/ntppool.update b/sql/ntppool.update index 413a605..9bc0289 100644 --- a/sql/ntppool.update +++ b/sql/ntppool.update @@ -269,7 +269,9 @@ alter table zone_server_counts #35 alter table servers add key (score_ts); - +#36 +alter table servers + add ipv6 varchar(40);