diff --git a/api.php b/api.php index 022b955..7e51a7a 100644 --- a/api.php +++ b/api.php @@ -27,6 +27,19 @@ function launcher_is_digit_password(string $password): bool return preg_match('/^\d{4}$/', $password) === 1; } +function launcher_admin_assertion(array $config): string +{ + $body = base64_encode(json_encode([ + 'aud' => 'car-monitor', + 'admin' => true, + 'iat' => time(), + 'exp' => time() + 120, + ], JSON_UNESCAPED_SLASHES)); + $sig = hash_hmac('sha256', $body, (string)($config['auth']['secret'] ?? '')); + + return $body . '.' . $sig; +} + if ($_SERVER['REQUEST_METHOD'] === 'POST') { $data = custom_read_request_data(); $action = $data['action'] ?? 'login'; @@ -114,7 +127,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { if ($isAdmin) { custom_issue_auth_cookie(true); } - custom_json(['admin' => $isAdmin, 'authenticated' => $isAdmin]); + custom_json([ + 'admin' => $isAdmin, + 'authenticated' => $isAdmin, + 'assertion' => $isAdmin ? launcher_admin_assertion($config) : '', + ]); } if (isset($_GET['failMessages'])) {