This commit is contained in:
2025-12-12 20:19:29 +09:00
parent 47cf4f9f54
commit e648d83d08

View File

@@ -178,47 +178,45 @@ function assert_unless_success(Result $assertion, Throwable|string|null $descrip
return false; return false;
} }
if (AUTH_ENABLED) { function getcookie(string $name): string|null {
function getcookie(string $name): string|null { return $_COOKIE[$name] ?? null;
return $_COOKIE[$name] ?? null; }
}
function namecolor(\stdClass $userData): string { function namecolor(\stdClass $userData): string {
$ban = "#888888"; $ban = "#888888";
$male = "#97ACEF"; $male = "#97ACEF";
$female = "#F185C9"; $female = "#F185C9";
$ungender = "#7C60B0"; $ungender = "#7C60B0";
$gender = 'color: '.($userData->gender === 0 ? $male : ($userData->gender === 1 ? $female : $ungender)).';'; $gender = 'color: '.($userData->gender === 0 ? $male : ($userData->gender === 1 ? $female : $ungender)).';';
$style = $userData->namecolor ?: ($userData->role >= 0 ? $gender : $ban); $style = $userData->namecolor ?: ($userData->role >= 0 ? $gender : $ban);
$showname = $userData->displayname ?: $userData->username; $showname = $userData->displayname ?: $userData->username;
$color = "<span style=\"{$style}\">{$showname}</span>"; $color = "<span style=\"{$style}\">{$showname}</span>";
if ($userData->role === 1) $color .= "<span style=\"font-size: x-small; background: #10c074; border: 1px solid #fcfcfc; border-radius: 10px; padding: 0 0.5em;\">✓</span>"; if ($userData->role === 1) $color .= "<span style=\"font-size: x-small; background: #10c074; border: 1px solid #fcfcfc; border-radius: 10px; padding: 0 0.5em;\">✓</span>";
$suffix = $userData->gender === 0 ? 'くん' : ($userData->gender === 1 ? 'ちゃん' : 'さん'); $suffix = $userData->gender === 0 ? 'くん' : ($userData->gender === 1 ? 'ちゃん' : 'さん');
return $color.$suffix; return $color.$suffix;
} }
function make_csrf_token(?bool $force = false): string { function make_csrf_token(?bool $force = false): string {
if (null !== getcookie('csrf_token') && !$force) return getcookie('csrf_token'); if (null !== getcookie('csrf_token') && !$force) return getcookie('csrf_token');
$token = bin2hex(random_bytes(32)); $token = bin2hex(random_bytes(32));
setcookie('csrf_token', $token, [ setcookie('csrf_token', $token, [
'expires' => time() + 300, // 5分 'expires' => time() + 300, // 5分
'path' => '/', 'path' => '/',
'domain' => $_SERVER['SERVER_NAME'], 'domain' => $_SERVER['SERVER_NAME'],
'secure' => (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'), 'secure' => (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'),
'httponly' => true, 'httponly' => true,
'samesite' => 'Strict' 'samesite' => 'Strict'
]); ]);
return $token; return $token;
} }
function verify_csrf_token(string $token): bool { function verify_csrf_token(string $token): bool {
return null !== getcookie('csrf_token') && hash_equals(getcookie('csrf_token'), $token); return null !== getcookie('csrf_token') && hash_equals(getcookie('csrf_token'), $token);
}
} }
function count_special_chars(string $str): int { function count_special_chars(string $str): int {