dnsmanagerv1/lib/MyWeb/App.pm

276 lines
7.5 KiB
Perl

package MyWeb::App;
use v5.14;
use strict;
use warnings;
use Dancer2;
use Dancer2::Plugin::Deferred;
use File::Basename;
#use Storable qw( freeze thaw );
#$Storable::Deparse = true;
#$Storable::Eval=true;
use utf8;
use YAML::XS;
use configuration ':all';
use util ':all';
use rt::root ':all';
use rt::domain ':all';
use rt::user ':all';
use rt::admin ':all';
use rt::rootfake ':all';
use rt::domainfake ':all';
use rt::userfake ':all';
use rt::adminfake ':all';
use app;
our $isviewtest = is_view_test(get_cfg());
our $VERSION = '0.1';
sub what_is_next {
my ($res) = @_;
if($$res{sessiondestroy}) {
app->destroy_session;
}
for(keys %{$$res{deferred}}) {
deferred $_ => $$res{deferred}{$_};
}
for(keys %{$$res{addsession}}) {
say "ajout de la session $_ : $$res{addsession}{$_}";
session $_ => $$res{addsession}{$_};
}
for(keys %{$$res{delsession}}) {
session $_ => undef;
}
if(exists $$res{route}) {
redirect $$res{route};
}
elsif(exists $$res{template}) {
template $$res{template} => $$res{params};
} else {
redirect '/';
}
}
sub get_param {
my $param_values;
for(@_) {
$$param_values{$_} = param "$_";
}
$param_values;
}
sub get_request {
my $request_values;
for(@_) {
if(/^address$/) { $$request_values{$_} = request->address; }
elsif(/^referer$/) { $$request_values{$_} = request->referer; }
}
$request_values;
}
sub get_session {
my $session_values;
for(@_) {
$$session_values{$_} = session "$_";
}
$session_values;
}
get '/' => sub {
return what_is_next rt_root_fake if $isviewtest;
what_is_next rt_root
get_session( qw/login passwd/ );
};
prefix '/domain' => sub {
post '/updateraw/:domain' => sub {
return what_is_next rt_dom_updateraw_fake
"" , "" , get_request( qw/address referer/ )
if $isviewtest;
what_is_next rt_dom_updateraw
get_session( qw/login passwd/ )
, get_param( qw/domain zoneupdated/)
, get_request( qw/address referer/ );
};
post '/update/:domain' => sub {
return what_is_next rt_dom_add_entry_fake
"" , "", get_request( qw/referer/ )
if $isviewtest;
what_is_next rt_dom_add_entry
get_session( qw/login passwd/ )
, get_param( qw/domain type name ttl priority weight port rdata/ )
, get_request( qw/referer/ );
};
get '/details/:domain' => sub {
return what_is_next rt_dom_details_fake ""
, get_param( qw/expert/ )
, get_request( qw/address referer/ ) if $isviewtest;
what_is_next rt_dom_details
get_session( qw/login passwd/ )
, get_param( qw/domain expert/ )
, get_request( qw/address referer/ );
};
post '/add/' => sub {
return what_is_next rt_dom_add_fake if $isviewtest;
what_is_next rt_dom_add
get_session( qw/login passwd/ )
, get_param( qw/domain tld/ );
};
get '/del/:domain' => sub {
return what_is_next rt_dom_del_fake
"" , "", get_request( qw/address referer/ )
if $isviewtest;
what_is_next rt_dom_del
get_session( qw/login passwd/ )
, get_param( qw/domain/ )
, get_request( qw/address referer/ );
};
get '/del/:domain/:name/:ttl/:type/:priority/:rdata' => sub {
return what_is_next rt_dom_del_entry_fake
"" , "", get_request( qw/address referer/ )
if $isviewtest;
what_is_next rt_dom_del_entry
get_session( qw/login passwd/ )
, get_param( qw/domain name ttl type priority rdata/ )
, get_request( qw/address referer/ );
};
get '/del/:domain/:name/:ttl/:type/:priority/:weight/:port/:rdata' => sub {
return what_is_next rt_dom_del_entry_fake
"" , "", get_request( qw/address referer/ )
if $isviewtest;
what_is_next rt_dom_del_entry
get_session( qw/login passwd/ )
, get_param( qw/domain name ttl type priority weight port rdata/ )
, get_request( qw/address referer/ );
};
get '/del/:domain/:name/:ttl/:type/:rdata' => sub {
return what_is_next rt_dom_del_entry_fake
"" , "", get_request( qw/address referer/ )
if $isviewtest;
what_is_next rt_dom_del_entry
get_session( qw/login passwd/ )
, get_param( qw/domain name type ttl rdata/ )
, get_request( qw/address referer/ );
};
post '/mod/:domain' => sub {
return what_is_next rt_dom_mod_entry_fake
"" , "", get_request( qw/address referer/ )
if $isviewtest;
what_is_next rt_dom_mod_entry
get_session( qw/login passwd/ )
, get_param( qw/domain type
oldpriority oldname oldttl oldrdata oldweight oldport
newpriority newname newttl newrdata newweight newport/ )
, get_request( qw/address referer/ );
};
get '/cliup/:login/:pass/:domain/:name/:type/:rdata' => sub {
return what_is_next rt_dom_cli_autoupdate_fake if $isviewtest;
what_is_next rt_dom_cli_autoupdate
get_session( qw// )
, get_param( qw/login pass domain name type rdata/ );
};
get '/cli/:login/:pass/:domain/:name/:type/:rdata/:ttl/:ip' => sub {
return what_is_next rt_dom_cli_mod_entry_fake if $isviewtest;
what_is_next rt_dom_cli_mod_entry
get_session( qw// )
, get_param( qw/login pass domain name type rdata ttl ip/ );
};
};
any ['get', 'post'] => '/admin' => sub {
return what_is_next rt_admin_fake if $isviewtest;
what_is_next rt_admin
get_session( qw/login passwd/ );
};
prefix '/user' => sub {
get '/home' => sub {
return what_is_next rt_user_home_fake if $isviewtest;
what_is_next rt_user_home
get_session( qw/login passwd/ )
, get_param( qw// )
, get_request( qw// );
};
get '/logout' => sub {
app->destroy_session;
redirect '/';
};
get '/del/:user' => sub {
return what_is_next rt_user_del_fake
"" , "", get_request( qw/address referer/ )
if $isviewtest;
what_is_next rt_user_del
get_session( qw/login passwd/ )
, get_param( qw/user/ )
, get_request( qw/referer/ );
};
# add a user => registration
post '/add/' => sub {
return what_is_next rt_user_add_fake if $isviewtest;
what_is_next rt_user_add
get_session( qw// )
, get_param( qw/login password password2/ )
, get_request( qw// );
};
get '/subscribe' => sub {
return what_is_next rt_user_subscribe_fake if $isviewtest;
what_is_next rt_user_subscribe
get_session( qw/login/ );
};
post '/changepasswd' => sub {
return what_is_next rt_user_changepasswd_fake if $isviewtest;
what_is_next rt_user_changepasswd
get_session( qw/login/ )
, get_param( qw/password/ );
};
get '/toggleadmin/:user' => sub {
return what_is_next rt_user_toggleadmin_fake
"" , "", get_request( qw/referer/ )
if $isviewtest;
what_is_next rt_user_toggleadmin
get_session( qw/login passwd/ )
, get_param( qw/user/ )
, get_request( qw/referer/ );
};
post '/login' => sub {
return what_is_next rt_user_login_fake
"" , "", get_request( qw/referer/ )
if $isviewtest;
what_is_next rt_user_login
get_session( qw/login/ )
, get_param( qw/login password/ )
, get_request( qw/referer/ );
};
};
true;