62 lines
1.9 KiB
PHP
62 lines
1.9 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Controller;
|
|
|
|
use Model\Session;
|
|
use Model\User;
|
|
use View\LoginRedirection;
|
|
use View\RegisterPage;
|
|
use View\Sendable;
|
|
|
|
class RegisterController extends RestrictedPageController
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct('/register.php');
|
|
}
|
|
|
|
protected function runLogic(): Sendable
|
|
{
|
|
$registerPage = new RegisterPage($this->context);
|
|
if ($registerPage->formWasSent) {
|
|
$registerPage->fieldUsername = trim($registerPage->fieldUsername);
|
|
$error = false;
|
|
|
|
// check username
|
|
if (empty($registerPage->fieldUsername)) {
|
|
$registerPage->errorUsernameEmpty = true;
|
|
$error = true;
|
|
} elseif (iconv_strlen($registerPage->fieldUsername) > 20) {
|
|
$registerPage->errorUsernameTooLong = true;
|
|
$error = true;
|
|
}
|
|
|
|
// check password
|
|
if ($registerPage->fieldPassword != $registerPage->fieldRepeatPassword) {
|
|
$registerPage->errorPasswordsMismatch = true;
|
|
$error = true;
|
|
} else if (empty($registerPage->fieldPassword)) {
|
|
$registerPage->errorPasswordEmpty = true;
|
|
$error = true;
|
|
}
|
|
|
|
// create account
|
|
if (!$error) {
|
|
$pwHash = password_hash($registerPage->fieldPassword, PASSWORD_ARGON2ID);
|
|
$user = User::create($registerPage->fieldUsername, $pwHash);
|
|
if (!empty($user)) {
|
|
$this->context->session = Session::create($user);
|
|
return new LoginRedirection($this->context);
|
|
} else {
|
|
$registerPage->errorUsernameInUse = true;
|
|
}
|
|
}
|
|
|
|
return $registerPage;
|
|
} else {
|
|
return $registerPage;
|
|
}
|
|
}
|
|
}
|