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;
|