'+1 day',
'3 ngày' => '+3 days',
'1 tuần' => '+1 week',
'1 tháng' => '+1 month',
'2 tháng' => '+2 months',
'3 tháng' => '+3 months',
'1 năm' => '+1 year',
];
$strtotimeDuration = $durationMap[$expirationString] ?? null;
if ($strtotimeDuration) {
return strtotime($strtotimeDuration, $createdTime);
}
return null;
}
function isKeyExpired($keyData) {
if ($keyData['expiration'] === 'vĩnh viễn') {
return false;
}
$expireTimestamp = calculateExpirationTimestamp($keyData['created_at'], $keyData['expiration']);
return ($expireTimestamp !== null && time() > $expireTimestamp);
}
function checkAndRemoveExpiredKeys() {
$keys = loadKeys();
$originalCount = count($keys);
$updatedKeys = array_filter($keys, function($keyData) {
return !isKeyExpired($keyData);
});
if (count($updatedKeys) !== $originalCount) {
saveKeys(array_values($updatedKeys));
}
return array_values($updatedKeys);
}
// --- Xử lý Đăng nhập Admin ---
if (isset($_POST['login'])) {
if (!verifyCsrfToken($_POST['csrf_token'] ?? '')) {
$error = "Lỗi CSRF. Vui lòng thử lại.";
} else {
$pass = $_POST['password'] ?? '';
if (hash_equals($adminPassword, $pass)) {
$_SESSION['admin'] = true;
regenerateCsrfToken();
header("Location: ".$_SERVER['PHP_SELF']);
exit();
} else {
$error = "Mật khẩu admin không đúng!";
}
}
}
if (!isset($_SESSION['admin'])) {
?>
Admin - Đăng nhập
Đăng nhập Admin
".htmlspecialchars($error).""; ?>
$newKey,
'expiration' => $expiration,
'created_at' => date('Y-m-d H:i:s')
];
saveKeys($currentKeys);
$_SESSION['flash_message'] = "✅ Thêm key thành công: " . htmlspecialchars($newKey);
error_log("Added key: $newKey"); // Debug add
} else {
$_SESSION['flash_message'] = "⚠️ Key '" . htmlspecialchars($newKey) . "' đã tồn tại!";
error_log("Key exists: $newKey"); // Debug exists
}
}
regenerateCsrfToken();
header("Location: ".$_SERVER['PHP_SELF'] . (isset($_GET['search']) ? '?search='.urlencode($_GET['search']) : ''));
exit();
}
if (isset($_POST['deleteKey'])) {
$delKey = $_POST['key_to_delete'] ?? '';
$currentKeys = loadKeys();
$keysBeforeDelete = count($currentKeys);
$updatedKeys = [];
$deleted = false;
foreach ($currentKeys as $keyData) {
if ($keyData['key'] === $delKey) {
$deleted = true;
continue;
}
$updatedKeys[] = $keyData;
}
if ($deleted) {
saveKeys($updatedKeys);
$_SESSION['flash_message'] = "🗑️ Đã xóa key: " . htmlspecialchars($delKey);
} else {
$_SESSION['flash_message'] = "⚠️ Không tìm thấy key để xóa: " . htmlspecialchars($delKey);
}
regenerateCsrfToken();
header("Location: ".$_SERVER['PHP_SELF'] . (isset($_GET['search']) ? '?search='.urlencode($_GET['search']) : ''));
exit();
}
}
}
$keys = loadKeys();
$searchTerm = isset($_GET['search']) ? trim($_GET['search']) : '';
$filteredKeys = $keys;
if (!empty($searchTerm)) {
$filteredKeys = array_filter($keys, function($keyData) use ($searchTerm) {
return stripos($keyData['key'], $searchTerm) !== false ||
stripos($keyData['expiration'], $searchTerm) !== false ||
(isset($keyData['created_at']) && stripos($keyData['created_at'], $searchTerm) !== false);
});
}
?>
Admin - Quản lý Key