eve-indy-job-tracker/keep_alive.php

89 lines
No EOL
3 KiB
PHP

<?php
require_once __DIR__ . "/session_bootstrap.php";
require_once __DIR__ . "/functions.php";
// Refresh session and tokens
if (session_status() === PHP_SESSION_ACTIVE) {
$tokens_refreshed = false;
$cache_cleared = false;
// Check if we need to refresh tokens
if (isset($_SESSION["characters"]) && !empty($_SESSION["characters"])) {
$page_load_time = time();
$last_token_refresh = $_SESSION['last_token_refresh'] ?? 0;
// Only refresh tokens if it's been at least 5 minutes since the last refresh
if ($page_load_time - $last_token_refresh > 300) {
foreach ($_SESSION["characters"] as $character_id => &$charData) {
// Skip invalid character entries
if (empty($character_id)) continue;
if (isset($charData["refresh_token"])) {
// Check if the access token is expired or missing
if (!isset($charData["access_token"]) ||
is_token_expired($charData["access_token"])) {
$new_tokens = refresh_token($charData["refresh_token"]);
if (!empty($new_tokens["access_token"])) {
$charData["access_token"] = $new_tokens["access_token"];
$tokens_refreshed = true;
}
}
}
}
unset($charData); // Break reference to avoid unexpected behavior
$_SESSION['last_token_refresh'] = $page_load_time;
// Only clear cache if tokens were refreshed
if ($tokens_refreshed) {
// Clear specific cache entries
$cache_keys = [
'character_jobs_',
'corporation_jobs_',
'all_character_blueprints'
];
foreach ($cache_keys as $prefix) {
$cleared = clear_cache_by_prefix($prefix);
if ($cleared) $cache_cleared = true;
}
}
}
}
echo json_encode([
"status" => "success",
"message" => "Session refreshed",
"tokens_refreshed" => $tokens_refreshed,
"cache_cleared" => $cache_cleared,
"timestamp" => time()
]);
} else {
echo json_encode(["status" => "error", "message" => "Session not active"]);
}
// Function to clear cache entries by prefix
function clear_cache_by_prefix($prefix) {
$cache_dir = __DIR__ . "/cache";
$cache_file = $cache_dir . "/api_cache.json";
if (!file_exists($cache_file)) {
return false;
}
$cache = json_decode(file_get_contents($cache_file), true) ?: [];
$cleared = false;
foreach ($cache as $key => $value) {
if (strpos($key, $prefix) === 0) {
unset($cache[$key]);
$cleared = true;
}
}
if ($cleared) {
file_put_contents($cache_file, json_encode($cache));
}
return $cleared;
}
?>