| const prisma = require("../utils/prisma"); | |
| const ApiKey = { | |
| tablename: "api_keys", | |
| writable: [], | |
| makeSecret: () => { | |
| const uuidAPIKey = require("uuid-apikey"); | |
| return uuidAPIKey.create().apiKey; | |
| }, | |
| create: async function (createdByUserId = null) { | |
| try { | |
| const apiKey = await prisma.api_keys.create({ | |
| data: { | |
| secret: this.makeSecret(), | |
| createdBy: createdByUserId, | |
| }, | |
| }); | |
| return { apiKey, error: null }; | |
| } catch (error) { | |
| console.error("FAILED TO CREATE API KEY.", error.message); | |
| return { apiKey: null, error: error.message }; | |
| } | |
| }, | |
| get: async function (clause = {}) { | |
| try { | |
| const apiKey = await prisma.api_keys.findFirst({ where: clause }); | |
| return apiKey; | |
| } catch (error) { | |
| console.error("FAILED TO GET API KEY.", error.message); | |
| return null; | |
| } | |
| }, | |
| count: async function (clause = {}) { | |
| try { | |
| const count = await prisma.api_keys.count({ where: clause }); | |
| return count; | |
| } catch (error) { | |
| console.error("FAILED TO COUNT API KEYS.", error.message); | |
| return 0; | |
| } | |
| }, | |
| delete: async function (clause = {}) { | |
| try { | |
| await prisma.api_keys.deleteMany({ where: clause }); | |
| return true; | |
| } catch (error) { | |
| console.error("FAILED TO DELETE API KEY.", error.message); | |
| return false; | |
| } | |
| }, | |
| where: async function (clause = {}, limit) { | |
| try { | |
| const apiKeys = await prisma.api_keys.findMany({ | |
| where: clause, | |
| take: limit, | |
| }); | |
| return apiKeys; | |
| } catch (error) { | |
| console.error("FAILED TO GET API KEYS.", error.message); | |
| return []; | |
| } | |
| }, | |
| whereWithUser: async function (clause = {}, limit) { | |
| try { | |
| const { User } = require("./user"); | |
| const apiKeys = await this.where(clause, limit); | |
| for (const apiKey of apiKeys) { | |
| if (!apiKey.createdBy) continue; | |
| const user = await User.get({ id: apiKey.createdBy }); | |
| if (!user) continue; | |
| apiKey.createdBy = { | |
| id: user.id, | |
| username: user.username, | |
| role: user.role, | |
| }; | |
| } | |
| return apiKeys; | |
| } catch (error) { | |
| console.error("FAILED TO GET API KEYS WITH USER.", error.message); | |
| return []; | |
| } | |
| }, | |
| }; | |
| module.exports = { ApiKey }; | |