256 lines
5.7 KiB
Perl
256 lines
5.7 KiB
Perl
|
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;
|