53 lines
1.3 KiB
PHP
53 lines
1.3 KiB
PHP
<?php
|
|
|
|
|
|
namespace Venom\Security;
|
|
|
|
|
|
use Venom\Core\ArgumentHandler;
|
|
use Venom\Core\Config;
|
|
use Venom\Helper\URLHelper;
|
|
use Venom\Models\User;
|
|
|
|
/**
|
|
* Class that Login stupid via Password, Username
|
|
*/
|
|
class BaseLogin implements Login
|
|
{
|
|
|
|
private User $user;
|
|
|
|
public function __construct(User $user)
|
|
{
|
|
$this->user = $user;
|
|
}
|
|
|
|
public function checkCredentials(): bool
|
|
{
|
|
$handler = ArgumentHandler::get();
|
|
return $handler->hasPostItem('USERNAME') && $handler->hasPostItem('PASSWORD');
|
|
}
|
|
|
|
public function redirect(): void
|
|
{
|
|
$url = ArgumentHandler::get()->getPostItem('REDIRECT_TO', URLHelper::getInstance()->getUrl());
|
|
header('Location: ' . $url);
|
|
die();
|
|
}
|
|
|
|
public function login(): bool
|
|
{
|
|
$sec = Config::getInstance()->getSecurity();
|
|
$this->user->setUsername(ArgumentHandler::get()->getPostItem('USERNAME'));
|
|
if (!$this->user->loadUser()) {
|
|
return false;
|
|
}
|
|
$secret = $sec->secret ?? 'venom';
|
|
$hashed = hash($sec->algo ?? 'SHA256', ArgumentHandler::get()->getPostItem('PASSWORD') . $secret . $this->user->getSalt());
|
|
if ($this->user->getPassword() === $hashed) {
|
|
$_SESSION['userID'] = $this->user->getId();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
} |