44 lines
1.0 KiB
PHP
44 lines
1.0 KiB
PHP
<?php
|
|
header('Content-Type: application/json');
|
|
|
|
$tokensFile = __DIR__ . '/door_tokens.json';
|
|
$tokens = [];
|
|
|
|
// Read existing tokens
|
|
if (file_exists($tokensFile)) {
|
|
$content = file_get_contents($tokensFile);
|
|
if ($content) {
|
|
$tokens = json_decode($content, true) ?: [];
|
|
}
|
|
}
|
|
|
|
// Cleanup expired tokens (> 5 minutes old)
|
|
$currentTime = time();
|
|
$activeTokens = [];
|
|
foreach ($tokens as $token => $data) {
|
|
if (($currentTime - $data['created_at']) <= 300) { // 5 minutes
|
|
if (!isset($data['used']) || !$data['used']) {
|
|
$activeTokens[$token] = $data;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Generate new random token
|
|
$newToken = bin2hex(random_bytes(16)); // 32 hex chars
|
|
|
|
$activeTokens[$newToken] = [
|
|
'created_at' => $currentTime,
|
|
'used' => false
|
|
];
|
|
|
|
// Save back
|
|
file_put_contents($tokensFile, json_decode('{}')); // clear out file first securely?
|
|
file_put_contents($tokensFile, json_encode($activeTokens, JSON_PRETTY_PRINT));
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'token' => $newToken,
|
|
'expires_in' => 300
|
|
]);
|
|
?>
|