2021-06-06 00:29:49 +02:00
|
|
|
package BeastBB::Controller::Login;
|
|
|
|
|
|
|
|
use 5.30.3;
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
use Mojo::Base 'BeastBB::Controller';
|
|
|
|
|
|
|
|
sub GetLogin {
|
2021-06-06 02:22:19 +02:00
|
|
|
my $self = shift;
|
2021-06-06 00:29:49 +02:00
|
|
|
$self->render;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub Login {
|
2021-06-06 02:22:19 +02:00
|
|
|
my $self = shift;
|
|
|
|
my $error_url =
|
|
|
|
Mojo::URL->new('/')->query( error => 'You are already logged in.' );
|
2021-06-06 00:41:27 +02:00
|
|
|
return $self->redirect_to($error_url) if !$self->LoggedUser->IsError;
|
2021-06-06 00:29:49 +02:00
|
|
|
my $user_manager = BeastBB::DAO::UserManager->new( app => $self );
|
|
|
|
my $username = $self->param('username');
|
|
|
|
my $password = $self->param('password');
|
|
|
|
my $wrong_auth_error = 'Credentials invalid or user not found.';
|
|
|
|
return $self->reply->exception('Request not understood.')->rendered(400)
|
|
|
|
if !defined $username || !defined $password;
|
|
|
|
my $maybe_user = $user_manager->Get( username => $username );
|
2021-06-06 02:22:19 +02:00
|
|
|
$error_url = Mojo::URL->new('/')->query( error => $wrong_auth_error );
|
2021-06-06 00:29:49 +02:00
|
|
|
return $self->redirect_to($error_url)
|
|
|
|
if $maybe_user->IsError
|
|
|
|
|| !$maybe_user->Content->CheckPasswordLogin( password => $password );
|
|
|
|
$self->session->{username} = $username;
|
|
|
|
return $self->redirect_to('/');
|
|
|
|
}
|
2021-06-06 02:22:19 +02:00
|
|
|
|
|
|
|
sub Logout {
|
|
|
|
my $self = shift;
|
|
|
|
$self->reply->exception('You are not logged in.')->rendered(401)
|
|
|
|
if $self->LoggedUser->IsError;
|
|
|
|
delete $self->session->{username};
|
|
|
|
$self->redirect_to('/');
|
|
|
|
}
|
2021-06-06 00:29:49 +02:00
|
|
|
1;
|