From 5af67dcd67f8b37ab720ab24d0758e03a5cd0235 Mon Sep 17 00:00:00 2001 From: Julien Simonet Date: Fri, 24 Jan 2014 20:18:49 +0100 Subject: [PATCH 1/2] [Detail] First version of double mode. There is two mode : easy mode and expert mode. - In expert mode, entire file is presented, and user can change it manually. - In easy mode, records informations are presented in a table. --- www/lib/DNSManager.pm | 26 +++++++++++-- www/views/details.tt | 87 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 104 insertions(+), 9 deletions(-) diff --git a/www/lib/DNSManager.pm b/www/lib/DNSManager.pm index 5dbab4f..9f34063 100644 --- a/www/lib/DNSManager.pm +++ b/www/lib/DNSManager.pm @@ -143,10 +143,28 @@ prefix '/domain' => sub { my $zone = $app->get_domain(session('login') , param('domain')); - template details => { - login => session('login') - , domain => param('domain') - , domain_zone => $zone->output() }; + if( param( 'expert' ) ) + { + template details => { + login => session('login') + , domain => param('domain') + , domain_zone => $zone->output() + , expert => true }; + } + else + { + # say dump( $zone->cname()); + template details => { + login => session('login') + , domain => param('domain') + , domain_zone => $zone->output() + , a => $zone->a() + , aaaa => $zone->aaaa() + , cname => $zone->cname() + , ptr => $zone->ptr() + , mx => $zone->mx() + , ns => $zone->ns() }; + } } diff --git a/www/views/details.tt b/www/views/details.tt index 487023b..8ea689f 100644 --- a/www/views/details.tt +++ b/www/views/details.tt @@ -5,11 +5,88 @@

Fichier de zone de <% domain %>

-
- -
- -
+ <% IF expert %> +
+ +
+ +
+ + Easy Mode + <% ELSE %> + + + + + + + + + + <% FOREACH address in ns %> + + + + + + + + <% END %> + + <% FOREACH address in a %> + + + + + + + + <% END %> + + <% FOREACH address in aaaa %> + + + + + + + + <% END %> + + <% FOREACH address in cname %> + + + + + + + + <% END %> + + <% FOREACH address in ptr %> + + + + + + + + <% END %> + + <% FOREACH address in mx %> + + + + + + + + <% END %> + +
+
NameClassTypeHostTTL
<% address.name %><% address.class %>NS<% address.host %><% address.ttl %>
<% address.name %><% address.class %>A<% address.host %><% address.ttl %>
<% address.name %><% address.class %>AAAA<% address.host %><% address.ttl %>
<% address.name %><% address.class %>CNAME<% address.host %><% address.ttl %>
<% address.name %><% address.class %>PTR<% address.host %><% address.ttl %>
<% address.name %><% address.class %>MX<% address.host %> (<% address.priority %>)<% address.ttl %>
+ Expert Mode + <% END %> From b482903b0d056275c2d866517122d00ec2269dfb Mon Sep 17 00:00:00 2001 From: Julien Simonet Date: Fri, 24 Jan 2014 22:42:34 +0100 Subject: [PATCH 2/2] [details] Add "easy mode" working for adding records A form to add some data. --- www/lib/DNSManager.pm | 83 +++++++++++++++++++++++++++++++++++++++++-- www/views/details.tt | 21 ++++++++++- 2 files changed, 100 insertions(+), 4 deletions(-) diff --git a/www/lib/DNSManager.pm b/www/lib/DNSManager.pm index 9f34063..7c0674a 100644 --- a/www/lib/DNSManager.pm +++ b/www/lib/DNSManager.pm @@ -106,7 +106,7 @@ get '/home' => sub { prefix '/domain' => sub { - any ['post', 'get'] => '/update/:domain' => sub { + any ['post', 'get'] => '/updateraw/:domain' => sub { # check if user is logged & if domain parameter is set unless( session('login') && param('domain')) @@ -124,9 +124,86 @@ prefix '/domain' => sub { , param('domain')); redirect '/domain/details/' . param('domain'); - } + } - }; + }; + + any ['post', 'get'] => '/update/:domain' => sub { + unless( session('login') && param('domain') ) + { + redirect '/'; + } + else + { + my $type = param('type'); + my $name = param('name'); + my $value = param('value'); + my $ttl = param('ttl'); + + my $app = initco(); + my ($auth_ok, $user, $isadmin) = $app->auth(param('login'), + param('password') ); + my $zone = $app->get_domain( session('login') , param('domain') ); + given( $type ) + { + + when ('A') { my $a=$zone->a(); + push( @$a, {name => $name, + class => "IN", + host => $value, + ttl => $ttl, + ORIGIN => $zone->origin} ); + } + + when ('AAAA') { my $aaaa=$zone->aaaa; + push(@$aaaa, {name => $name, + class => "IN", + host => $value, + ttl => $ttl, + ORIGIN => $zone->origin} ); + } + + when ('CNAME') { my $cname=$zone->cname; + push(@$cname, + {name => $name, + class => "IN", + host => $value, + ttl => $ttl, + ORIGIN => $zone->origin} ); + } + + when ('MX') { my $ptr=$zone->ptr; + push(@$ptr, {name => $name, + class => "IN", + host => $value, + ttl => $ttl, + ORIGIN => $zone->origin} ); + } + + when ('PTR') { my $ptr=$zone->ptr; + push(@$ptr, {name => $name, + class => "IN", + host => $value, + ttl => $ttl, + ORIGIN => $zone->origin} ); + } + + when ('NS') { my $ns=$zone->ns; + push(@$ns, {name => $name, + class => "IN", + host => $value, + ttl => $ttl, + ORIGIN => $zone->origin} ); + } + + } + $zone->new_serial(); + my $cfg = new Config::Simple(dirname(__FILE__).'/../conf/config.ini'); + my $ed = app::zone::edit->new(zdir=>$cfg->param('zones_path'), zname => param('domain')); + $ed->update($zone); + redirect '/domain/details/'.param('domain'); + } + }; get '/details/:domain' => sub { diff --git a/www/views/details.tt b/www/views/details.tt index 8ea689f..8c50738 100644 --- a/www/views/details.tt +++ b/www/views/details.tt @@ -6,7 +6,7 @@

Fichier de zone de <% domain %>

<% IF expert %> -
+
@@ -86,6 +86,25 @@ Expert Mode + +

+ + Ajouter un enregistrement :
+ + + + + + Valider +
+ <% END %>