Obsolete
/
dnsmanagerv1
Archived
3
0
Fork 0
This repository has been archived on 2024-06-18. You can view files and clone it, but cannot push or open issues/pull-requests.
dnsmanagerv1/www/lib/DNSManager.pm

192 lines
4.4 KiB
Perl
Raw Normal View History

package DNSManager;
use Dancer ':syntax';
use strict;
use warnings;
use v5.14;
use Modern::Perl;
use Data::Dump qw( dump );
use Data::Structure::Util qw ( unbless );
use File::Basename;
use Config::Simple;
use Storable qw( freeze thaw );
$Storable::Deparse = true;
$Storable::Eval=true;
# Include other libs relative to current path
use Find::Lib '../../'; # TODO remove it when it won't be usefull anymore
use app::app;
our $VERSION = '0.1';
# eventually change place
sub initco {
my $cfg = new Config::Simple(dirname(__FILE__).'/../conf/config.ini');
my $app = app->new( zdir => $cfg->param('zones_path'),
dbname => $cfg->param('dbname'),
dbhost => $cfg->param('host'),
dbport => $cfg->param('port'),
dbuser => $cfg->param('user'),
dbpass => $cfg->param('passwd'),
sgbd => $cfg->param('sgbd'),
dnsapp => $cfg->param('dnsapp') );
$app->init();
return $app;
}
get '/' => sub {
if( session('login') )
{
my $app = initco();
$app->get_domains( session('login') );
template index => {
logged => true
, login => session('login')
, admin => session('admin')
, domains => $app->get_domains(session('login')) };
}
else
{
template 'index';
}
};
post '/login' => sub {
# Check if user is already logged
unless ( session('login') )
{
# Check user login and password
if ( param('login') && param('password') )
{
my $app = initco();
my ($auth_ok, $user, $isadmin) = $app->auth(param('login'),
param('password') );
if( $auth_ok )
{
session login => param('login');
# TODO : change password storage…
session password => param('password');
session user => freeze( $user );
session admin => $isadmin;
}
else
{
# User login and/or password are incorrect
}
}
}
redirect '/';
};
get '/mapage' => sub {
unless( session('login') )
{
redirect '/';
}
else
{
my $app = initco();
my %domains = ();
my %zone_properties = ();
my @d = @{$app->get_domains( session('login') )};
template mapage => {
login => session('login')
, domains => $app->get_domains(session('login'))
, zones_domains => \%domains
, zone_properties => \%zone_properties
, admin => session('admin') };
}
};
get '/details' => sub {
# check if user is logged & if domain parameter is set
unless( session('login') && param('domain'))
{
redirect '/';
}
else
{
my $app = initco();
my ($auth_ok, $user, $isadmin) = $app->auth( param('login') );
my @zones = ();
my $zone_properties;
#say 'dump : ' . dump $user->get_zone( param('domain') );
for( $user->get_zone( param('domain') ) )
{
if( ref($_) eq 'HASH' and exists $_->{addr} ) {
push( @zones, $_ ) when $_->{addr} ne '@';
$zone_properties = $_ when $_->{addr} eq '@';
}
}
template details => {
login => session('login')
, domain => param('domain')
, zones => \@zones
, zone_properties => $zone_properties };
}
};
any ['get', 'post'] => '/administration' => sub {
unless( session('login') )
{
redirect '/';
}
else
{
template administration => {
login => session('login')
, admin => session('admin') };
}
};
any ['post', 'get'] => '/logout' => sub {
session->destroy;
redirect '/';
};
get '/domainadd' => sub {
# check if user is logged & if domain parameter is set
unless( session('login') )
{
redirect '/';
}
else
{
my $app = initco();
if( param('domain') )
{
# create domain
$app->add_domain( session('login'), param('domain') );
# Then, redirect to mapage
redirect '/mapage';
}
}
};
get qr{/domaindel/(.*)} => sub {
my ($domainToDelete) = splat;
my $app = initco();
$app->delete_domain(session('login'), $domainToDelete);
redirect '/mapage';
}