Files
LittleBeast/src/Site/Controller/User.php
2025-12-12 01:07:09 +09:00

186 lines
4.7 KiB
PHP

<?php
namespace Site\Controller;
use Site\Controller\Mods;
use Site\Lib\Auth;
use Site\Lib\Template;
class User {
use Mods;
public function login(array $params): void {
if (!AUTH_ENABLED) return;
try {
$auth = new Auth;
$user = $auth->getLoggedInUser();
if ($user) {
header('Location: /');
exit();
}
$doLogin = $_SERVER['REQUEST_METHOD'] === 'POST';
$error = '';
if ($doLogin) {
if (!\verify_csrf_token($_POST['csrf_token'])) {
header('Location: /');
exit();
}
unset($_POST['csrf_token']);
$a = [];
if (count($_POST) === 2) {
$i = 0;
foreach ($_POST as $p) {
$a[(int)$i] = $p;
$i++;
}
}
$auth = new Auth($a[0]);
$res = $auth->isUserExist($a[0]);
if (!$res->isSuccess) {
$error = $res->message;
} else {
$auth->setToken($a[0], $a[1]);
header('Location: /');
exit();
}
}
$tmpl = new Template('/');
$pagetit = 'サインイン';
$description = 'サイトにサインイン';
$tmpl->assign('pagetit', $pagetit);
$tmpl->assign('curPage', 'auth');
$tmpl->assign('custCss', false);
$tmpl->assign('menu', $this->getMenu());
$tmpl->assign('description', $description);
$tmpl->assign('error', $error);
$tmpl->render('login');
} catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
}
public function logout(array $params): void {
if (!AUTH_ENABLED) return;
try {
$auth = new Auth;
$user = $auth->getLoggedInUser();
if (!$user) {
header('Location: /');
exit();
}
$auth->logout();
header('Location: /');
exit();
} catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
}
public function register(array $params): void {
if (!AUTH_REGISTER_ENABLED) return;
try {
$auth = new Auth;
$user = $auth->getLoggedInUser();
if ($user) {
header('Location: /');
exit();
}
$doRegister = $_SERVER['REQUEST_METHOD'] === 'POST';
$error = '';
$nyuU = '';
$nyuE = '';
if ($doRegister) {
if (!\verify_csrf_token($_POST['csrf_token'])) {
header('Location: /');
exit();
}
unset($_POST['csrf_token']);
$a = [];
if (count($_POST) === 4) {
$i = 0;
foreach ($_POST as $p) {
$a[(int)$i] = $p;
$i++;
}
}
$auth = new Auth;
$res = $auth->mkUser($a[0], $a[1], $a[2], $a[3]);
if (!$res->isSuccess) {
$error = $res->message;
$nyuU = $a[0];
$nyuE = $a[3];
} else {
$auth = new Auth($a[0]);
$auth->setToken($a[0], $a[1]);
header('Location: /');
exit();
}
}
$tmpl = new Template('/');
$pagetit = '登録';
$description = 'サイトに登録';
$tmpl->assign('pagetit', $pagetit);
$tmpl->assign('curPage', 'auth');
$tmpl->assign('custCss', false);
$tmpl->assign('menu', $this->getMenu());
$tmpl->assign('description', $description);
$tmpl->assign('error', $error);
$tmpl->assign('nyuU', $nyuU);
$tmpl->assign('nyuE', $nyuE);
$tmpl->render('register');
} catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
}
public function profile(array $params): void {
if (!AUTH_ENABLED) return;
$name = '';
if (isset($params['name'])) $name = $params['name'];
if ($name === '') {
header('Location: /');
exit();
}
try {
$auth = new Auth;
$user = $auth->getLoggedInUser();
$u = $auth->getUser($name);
if (!$u) {
header('Location: /404');
exit();
}
$tmpl = new Template('/');
$suffix = $u->gender === '男' ? 'くん' : ($u->gender === '女' ? 'ちゃん' : 'さん');
$pagetit = $u->altName.$suffix.'のプロフィール';
$description = '';
$tmpl->assign('pagetit', $pagetit);
$tmpl->assign('curPage', 'auth');
$tmpl->assign('custCss', false);
$tmpl->assign('menu', $this->getMenu());
$tmpl->assign('description', $description);
$tmpl->assign('error', $error);
$tmpl->assign('user', $user);
$tmpl->assign('u', $u);
$tmpl->render('profile');
} catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
}
}