added remove button
[pxelator] / lib / PXElator / httpd.pm
index e2f1a6e..8473665 100644 (file)
@@ -208,14 +208,34 @@ warn "XXX pids = ", dump( $daemons::pids );
                        )
                        ;
        } elsif ( $path =~ m!^/client(?:/$RE{net}{IPv4}{-keep})?! ) {
-               my $ip = $1 || $client->peerhost;
+               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;
+                       }
+               }
+
+               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;
 
-               if ( my $new_ip = $param->{change_ip} ) {
-                       client::change_ip( $ip, $new_ip );
-                       $ip = $new_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 ) {
+               if ( $ip && $ip ne $server::ip ) {
                        my $hostname = client::conf( $ip, 'hostname' => $param->{hostname} );
 
                        my @table = (
@@ -239,7 +259,10 @@ warn "XXX pids = ", dump( $daemons::pids );
                        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
                                ;
 
@@ -277,13 +300,7 @@ warn "XXX pids = ", dump( $daemons::pids );
                                                        , 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/*") 
+                                       } client::all_ips
                                )
                                ;
                }