mirror of
https://github.com/Nezumi-2711/9router.git
synced 2026-09-23 04:09:49 +00:00
96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
import { v4 as uuidv4 } from "uuid";
|
|
import { getAdapter } from "../driver.js";
|
|
|
|
function rowToKey(row) {
|
|
if (!row) return null;
|
|
return {
|
|
id: row.id,
|
|
key: row.key,
|
|
name: row.name,
|
|
machineId: row.machineId,
|
|
ownerId: row.ownerId,
|
|
isActive: row.isActive === 1 || row.isActive === true,
|
|
createdAt: row.createdAt,
|
|
};
|
|
}
|
|
|
|
export async function getApiKeys() {
|
|
const db = await getAdapter();
|
|
const rows = db.all(`SELECT * FROM apiKeys ORDER BY createdAt ASC`);
|
|
return rows.map(rowToKey);
|
|
}
|
|
|
|
export async function getApiKeysByOwnerId(ownerId) {
|
|
const db = await getAdapter();
|
|
const rows = db.all(`SELECT * FROM apiKeys WHERE ownerId = ? ORDER BY createdAt ASC`, [ownerId]);
|
|
return rows.map(rowToKey);
|
|
}
|
|
|
|
export async function getApiKeyById(id) {
|
|
const db = await getAdapter();
|
|
const row = db.get(`SELECT * FROM apiKeys WHERE id = ?`, [id]);
|
|
return rowToKey(row);
|
|
}
|
|
|
|
export async function getApiKeyByKey(key) {
|
|
const db = await getAdapter();
|
|
const row = db.get(`SELECT * FROM apiKeys WHERE key = ?`, [key]);
|
|
return rowToKey(row);
|
|
}
|
|
|
|
export async function getApiKeyByIdAndOwnerId(id, ownerId) {
|
|
const db = await getAdapter();
|
|
const row = db.get(`SELECT * FROM apiKeys WHERE id = ? AND ownerId = ?`, [id, ownerId]);
|
|
return rowToKey(row);
|
|
}
|
|
|
|
export async function createApiKey(name, machineId, ownerId = null) {
|
|
if (!machineId) throw new Error("machineId is required");
|
|
const db = await getAdapter();
|
|
const { generateApiKeyWithMachine } = await import("@/shared/utils/apiKey");
|
|
const result = generateApiKeyWithMachine(machineId);
|
|
const apiKey = {
|
|
id: uuidv4(),
|
|
name,
|
|
key: result.key,
|
|
machineId,
|
|
ownerId,
|
|
isActive: true,
|
|
createdAt: new Date().toISOString(),
|
|
};
|
|
db.run(
|
|
`INSERT INTO apiKeys(id, key, name, machineId, ownerId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?, ?)`,
|
|
[apiKey.id, apiKey.key, apiKey.name, apiKey.machineId, apiKey.ownerId, 1, apiKey.createdAt]
|
|
);
|
|
return apiKey;
|
|
}
|
|
|
|
export async function updateApiKey(id, data) {
|
|
const db = await getAdapter();
|
|
let result = null;
|
|
db.transaction(() => {
|
|
const row = db.get(`SELECT * FROM apiKeys WHERE id = ?`, [id]);
|
|
if (!row) return;
|
|
const merged = { ...rowToKey(row), ...data };
|
|
db.run(
|
|
`UPDATE apiKeys SET key = ?, name = ?, machineId = ?, ownerId = ?, isActive = ? WHERE id = ?`,
|
|
[merged.key, merged.name, merged.machineId, merged.ownerId, merged.isActive ? 1 : 0, id]
|
|
);
|
|
result = merged;
|
|
});
|
|
return result;
|
|
}
|
|
|
|
export async function deleteApiKey(id) {
|
|
const db = await getAdapter();
|
|
const res = db.run(`DELETE FROM apiKeys WHERE id = ?`, [id]);
|
|
return (res?.changes ?? 0) > 0;
|
|
}
|
|
|
|
export async function validateApiKey(key) {
|
|
const db = await getAdapter();
|
|
const row = db.get(`SELECT isActive FROM apiKeys WHERE key = ?`, [key]);
|
|
if (!row) return false;
|
|
return row.isActive === 1 || row.isActive === true;
|
|
}
|