)
;
} elsif ( $path =~ m!^/client(?:/$RE{net}{IPv4}{-keep})?! ) {
- my $ip = $1 || $client->peerhost;
-
- if ( my $new_ip = $param->{change_ip} ) {
- client::change_ip( $ip, $new_ip );
- $ip = $new_ip;
+ my $ip = $1;
+
+ if ( $param->{action} eq 'remove' ) {
+ client::remove( $param->{change_ip} );
+ print $client redirect("$url/client");
+ return;
+ } elsif ( $param->{action} eq 'change' ) {
+ if ( my $new_ip = client::change_ip( $ip, $param->{change_ip} ) ) {
+ print $client redirect("$url/client#$new_ip");
+ return;
+ }
}
- my $ip_short = (split(/\./, $ip, 4))[3];
+ if ( ! $ip ) {
+ my $peer_ip = $client->peerhost;
+
+ my $netmask = ip::to_int $server::netmask;
+ my $network = ip::to_int $server::ip & $netmask;
+ my ( $from, $to ) = ( $network | $server::ip_from, $network | $server::ip_to );
+ my $ip_int = ip::to_int $peer_ip;
+
+ # show edit for clients in our dhcp range
+ if ( $ip_int >= ( $network | $server::ip_from ) && $ip_int <= ( $network | $server::ip_to ) ) {
+ $ip = $peer_ip;
+ }
+ }
- # if ( $ip ne $server::ip ) -- not flexible enough for tunnel endpoints
- if ( $ip_short >= $server::ip_from && $ip_short <= $server::ip_to ) {
+ if ( $ip && $ip ne $server::ip ) {
my $hostname = client::conf( $ip, 'hostname' => $param->{hostname} );
my @table = (
print $client ok
, qq|<form method=get>|
, html::table( 2, @table ),
- , qq|<input type=submit value=change></form>|
+ , qq|
+ <input type=submit name=action value=change>
+ <input type=submit name=action value=remove style="color: red">
+ </form>|
, $deploy
;
, delete $conf->{deploy}
, ( %$conf ? html::pre_dump( $conf ) : qq|<a href=/nmap?scan=$ip>nmap</a>| )
);
- }
- sort { ip::to_int($a) cmp ip::to_int($b) }
- map {
- my $ip = $_;
- $ip =~ s{^.+/ip/}{};
- $ip;
- } glob("$server::conf/ip/*")
- )
- , qq|<h2>ARP</h2>|
- , html::table( -3, 'ip', 'mac', 'dev',
- map {
- my $c = $arp->{$_};
- ( $c->[0], format::mac( $_ => 'html' ), $c->[1] )
- } sort keys %$arp
+ } client::all_ips
)
;
}