make server configuration editable using tied variables
authorDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 8 Sep 2009 18:28:15 +0000 (18:28 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 8 Sep 2009 18:28:15 +0000 (18:28 +0000)
lib/PXElator/httpd.pm

index 507f86f..0c46e36 100644 (file)
@@ -223,20 +223,33 @@ warn "XXX pids = ", dump( $daemons::pids );
                        ;
 
        } elsif ( $path =~ m{^/server} ) {
-               if ( my $c = $param->{new_clients} ) {
-                       server::shared( 'new_clients', $c );
+               foreach my $name ( keys %$param ) {
+                       eval '$server::' . $name . '= $param->{$name}';
                }
+               my @table = (
+                         'debug' => qq|<a href=/our/debug/| . boolean::toggle($debug) . qq|>$debug</a>|,
+                       , 'new_clients' => qq|<input type=text name=new_clients size=3 value="$server::new_clients">|
+               );
+
+               foreach my $editable ( 'ip', 'netmask', 'ip_from', 'ip_to', 'domain' ) {
+                       my $v = eval '$server::' . $editable;
+                       push @table, ( $editable, qq|<input type=text name=$editable value="$v">| );
+               }
+
+               foreach my $readonly ( 'base_dir', 'conf' ) {
+                       my $v = eval '$server::' . $readonly;
+                       push @table, ( $readonly, html::tt $v );
+               }
+                       
                print $client ok
                        , qq|<form method=get>|
-                       , html::table( 2,
-                               'debug' => qq|<a href=/our/debug/| . boolean::toggle($debug) . qq|>$debug</a>|,
-                               'new_clients' => qq|<input type=text name=new_clients size=3 value="| . server::shared( 'new_clients' ) . qq|">|,
-                                map {
-                                       ( $_, html::tt eval '$server::'.$_ )
-                                } ( 'ip', 'netmask', 'ip_from', 'ip_to', 'domain', 'base_dir', 'conf' )
-                       )
-                       , qq|</form>|
+                       , html::table( 2, @table )
+                       , qq|
+                               <input type=submit name=action value=change>
+                               </form>
+                       |
                        ;
+
        } elsif ( $path =~ m!^/client(?:/$RE{net}{IPv4}{-keep})?! ) {
                my $ip = $1;
                $title = $ip;