3
0
This repository has been archived on 2024-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
dnsmanagerv1/lib/rt/user.pm
2016-02-10 11:07:34 +01:00

290 lines
6.6 KiB
Perl
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package rt::user;
use v5.14;
use configuration ':all';
use encryption ':all';
use app;
use utf8;
use open qw/:std :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_changepasswd
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_changepasswd
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_changepasswd {
my ($session, $param, $request) = @_;
my $res;
unless ( $$session{login} && $$param{password} ) {
$$res{deferred}{errmsg} = q{Identifiant ou mot de passe non renseigné.};
$$res{route} = '/user/home';
return $res;
}
eval {
my $pass = encrypt($$param{password});
my $app = app->new(get_cfg());
$app->update_passwd($$session{login}, $pass);
$app->disconnect();
$$res{deferred}{succmsg} = q{Changement de mot de passe effectué !};
$$res{addsession}{passwd} = $pass;
$$res{route} = '/user/home';
};
if($@) {
$$res{deferred}{errmsg} = q{Changement de mot de passe impossible !.};
$$res{route} = '/user/subscribe';
return $res;
}
$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{Problème d'authentification.} . $@;
$$res{route} = '/';
}
$res
}
1;