52 lines
1.3 KiB
PHP
52 lines
1.3 KiB
PHP
<?php
|
|
|
|
require_once 'lib/stored_config.php';
|
|
|
|
const ADMIN_SESSION_TIMEOUT = 86400 * 14;
|
|
const ADMIN_COOKIE_NAME = 'admin_key';
|
|
|
|
function is_admin(): bool {
|
|
static $is_admin = null;
|
|
if (is_null($is_admin))
|
|
$is_admin = _admin_verify_key();
|
|
return $is_admin;
|
|
}
|
|
|
|
function _admin_verify_key(): bool {
|
|
if (isset($_COOKIE[ADMIN_COOKIE_NAME])) {
|
|
$cookie = (string)$_COOKIE[ADMIN_COOKIE_NAME];
|
|
if ($cookie !== _admin_get_key())
|
|
admin_unset_cookie();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function admin_check_password(string $pwd): bool {
|
|
return salt_password($pwd) === scGet('admin_pwd');
|
|
}
|
|
|
|
function _admin_get_key(): string {
|
|
$admin_pwd_hash = scGet('admin_pwd');
|
|
return salt_password("$admin_pwd_hash|{$_SERVER['REMOTE_ADDR']}");
|
|
}
|
|
|
|
function admin_set_cookie(): void {
|
|
global $config;
|
|
$key = _admin_get_key();
|
|
setcookie(ADMIN_COOKIE_NAME, $key, time() + ADMIN_SESSION_TIMEOUT, '/', $config['cookie_host']);
|
|
}
|
|
|
|
function admin_unset_cookie(): void {
|
|
global $config;
|
|
setcookie(ADMIN_COOKIE_NAME, '', 1, '/', $config['cookie_host']);
|
|
}
|
|
|
|
function admin_log_auth(): void {
|
|
DB()->insert('admin_log', [
|
|
'ts' => time(),
|
|
'ip' => ip2ulong($_SERVER['REMOTE_ADDR']),
|
|
'ua' => $_SERVER['HTTP_USER_AGENT'] ?? '',
|
|
]);
|
|
}
|