import fs from "node:fs/promises"; import { v4 as uuidv4 } from "uuid"; import Debug from "debug"; const debug = Debug("lot-occupancy-system:functions.api"); const apiKeyPath = "data/apiKeys.json"; let apiKeys; async function loadApiKeys() { try { const fileData = await fs.readFile(apiKeyPath, "utf8"); apiKeys = JSON.parse(fileData); } catch (error) { debug(error); apiKeys = {}; } } async function saveApiKeys() { try { await fs.writeFile(apiKeyPath, JSON.stringify(apiKeys), "utf8"); } catch (error) { debug(error); } } function generateApiKey(apiKeyPrefix) { return apiKeyPrefix + "-" + uuidv4() + "-" + Date.now(); } export async function regenerateApiKey(userName) { apiKeys[userName] = generateApiKey(userName); await saveApiKeys(); } export async function getApiKey(userName) { if (!apiKeys) { await loadApiKeys(); } if (!apiKeys[userName]) { await regenerateApiKey(userName); } return apiKeys[userName]; } export async function getApiKeyFromSession(session) { return await getApiKey(session.user.userName); } export async function getUserNameFromApiKey(apiKey) { if (!apiKeys) { await loadApiKeys(); } for (const [userName, currentApiKey] of Object.entries(apiKeys)) { if (apiKey === currentApiKey) { return userName; } } }