sunrise-cms/helpers/functions.api.js

54 lines
1.4 KiB
JavaScript

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;
const loadApiKeys = async () => {
try {
const fileData = await fs.readFile(apiKeyPath, "utf8");
apiKeys = JSON.parse(fileData);
}
catch (error) {
debug(error);
apiKeys = {};
}
};
const saveApiKeys = async () => {
try {
await fs.writeFile(apiKeyPath, JSON.stringify(apiKeys), "utf8");
}
catch (error) {
debug(error);
}
};
const generateApiKey = (apiKeyPrefix) => {
return apiKeyPrefix + "-" + uuidv4() + "-" + Date.now();
};
export const regenerateApiKey = async (userName) => {
apiKeys[userName] = generateApiKey(userName);
await saveApiKeys();
};
export const getApiKey = async (userName) => {
if (!apiKeys) {
await loadApiKeys();
}
if (!apiKeys[userName]) {
await regenerateApiKey(userName);
}
return apiKeys[userName];
};
export const getApiKeyFromSession = async (session) => {
return await getApiKey(session.user.userName);
};
export const getUserNameFromApiKey = async (apiKey) => {
if (!apiKeys) {
await loadApiKeys();
}
for (const [userName, currentApiKey] of Object.entries(apiKeys)) {
if (apiKey === currentApiKey) {
return userName;
}
}
};