dnsmanagerv1/lib/rt/user.pm

256 lines
5.7 KiB
Perl
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

package rt::user;
use v5.14;
use configuration ':all';
use encryption ':all';
use app;
use utf8;
use YAML::XS;
use Exporter 'import';
# what we want to export eventually
our @EXPORT_OK = qw/
rt_user_login
rt_user_del
rt_user_toggleadmin
rt_user_subscribe
rt_user_add
rt_user_home
/;
# bundle of exports (tags)
our %EXPORT_TAGS = ( all => [qw/
rt_user_login
rt_user_del
rt_user_toggleadmin
rt_user_subscribe
rt_user_add
rt_user_home
/] );
sub rt_user_login {
my ($session, $param, $request) = @_;
my $res;
# Check if user is already logged
if ( exists $$session{login} && length $$session{login} > 0 ) {
$$res{deferred}{errmsg} = q{Vous êtes déjà connecté.};
$$res{route} = '/';
return $res;
}
# Check user login and password
unless ( exists $$param{login}
&& exists $$param{password}
&& length $$param{login} > 0
&& length $$param{password} > 0 ) {
$$res{deferred}{errmsg} = q{Vous n'avez pas renseigné tous les paramètres.};
$$res{route} = '/';
return $res;
}
eval {
my $app = app->new(get_cfg());
my $pass = encrypt($$param{password});
my $user = $app->auth($$param{login}, $pass);
unless( $user ) {
$$res{deferred}{errmsg} =
q{Impossible de se connecter (login ou mot de passe incorrect).};
$$res{route} = '/';
return $res;
}
$$res{addsession}{login} = $$param{login};
$$res{addsession}{passwd} = $pass;
# TODO adds a freeze feature, not used for now
# $$res{addsession}{user} = freeze( $user );
if( $$user{admin} ) {
$$res{route} = '/admin';
}
else {
$$res{route} = '/user/home';
}
$app->disconnect();
};
if( $@ ) {
$$res{deferred}{errmsg} = q{Impossible de se connecter ! } . $@;
$$res{sessiondestroy} = 1;
$$res{route} = '/';
}
$res
}
sub rt_user_del {
my ($session, $param, $request) = @_;
my $res;
unless ( $$param{user} ) {
$$res{deferred}{errmsg} = q{Le nom d'utilisateur n'est pas renseigné.};
return $res;
}
eval {
my $app = app->new(get_cfg());
my $user = $app->auth($$session{login}, $$session{passwd});
if ( $user && $$user{admin} || $$session{login} eq $$param{user} ) {
$app->delete_user($$param{user});
}
$app->disconnect();
};
if ( $@ ) {
$$res{deferred}{errmsg} =
"L'utilisateur $$res{user} n'a pas pu être supprimé. $@";
}
if( $$request{referer} ) {
$$res{route} = $$request{referer};
}
else {
$$res{route} = '/';
}
$res
}
sub rt_user_toggleadmin {
my ($session, $param, $request) = @_;
my $res;
unless( $$param{user} ) {
$$res{deferred}{errmsg} = q{L'utilisateur n'est pas défini.};
$$res{route} = $$request{referer};
return $res;
}
eval {
my $app = app->new(get_cfg());
my $user = $app->auth($$session{login}, $$session{passwd});
unless ( $user && $$user{admin} ) {
$$res{deferred}{errmsg} = q{Vous n'êtes pas administrateur.};
return $res;
}
$app->toggle_admin($$param{user});
$app->disconnect();
};
if( $$request{referer} =~ '/admin' ) {
$$res{route} = $$request{referer};
}
else {
$$res{route} = '/';
}
$res
}
sub rt_user_subscribe {
my ($session, $param, $request) = @_;
my $res;
if( $$session{login} ) {
$$res{route} = '/user/home';
}
else {
$$res{template} = 'subscribe';
}
$res
}
sub rt_user_add {
my ($session, $param, $request) = @_;
my $res;
unless ( $$param{login} && $$param{password} && $$param{password2} ) {
$$res{deferred}{errmsg} = q{Identifiant ou mot de passe non renseigné.};
$$res{route} = '/user/subscribe';
return $res;
}
unless ( $$param{password} eq $$param{password2} ) {
$$res{deferred}{errmsg} = q{Les mots de passes ne sont pas identiques.};
$$res{route} = '/user/subscribe';
return $res;
}
eval {
my $pass = encrypt($$param{password});
my $app = app->new(get_cfg());
$app->register_user($$param{login}, $pass);
$app->disconnect();
$$res{addsession}{login} = $$param{login};
$$res{addsession}{passwd} = $pass;
$$res{route} = '/user/home';
};
if($@) {
$$res{deferred}{errmsg} = q{Ce pseudo est déjà pris.} . $@;
$$res{route} = '/user/subscribe';
return $res;
}
$res
}
sub rt_user_home {
my ($session, $param, $request) = @_;
my $res;
$$res{template} = 'home';
eval {
my $app = app->new(get_cfg());
my $user = $app->auth($$session{login}, $$session{passwd});
unless( $user ) {
$$res{deferred}{errmsg} = q{Problème de connexion à votre compte.};
$$res{sessiondestroy} = 1;
$$res{route} = '/';
return $res;
}
my $domains = $app->get_domains($$session{login});
my $dn = $$session{domainName};
#$$res{delsession}{domainName};
$$res{params} = {
login => $$session{login}
, admin => $$user{admin}
, domains => $domains
, provideddomains => $$app{tld}
, domainName => $dn
};
$app->disconnect();
};
if( $@ ) {
$$res{sessiondestroy} = 1;
$$res{deferred}{errmsg} = q{On a chié quelque-part.} . $@;
$$res{route} = '/';
}
$res
}
1;