You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.3 KiB

11 months ago
  1. const prisma = require("../utils/prisma");
  2. const ApiKey = {
  3. tablename: "api_keys",
  4. writable: [],
  5. makeSecret: () => {
  6. const uuidAPIKey = require("uuid-apikey");
  7. return uuidAPIKey.create().apiKey;
  8. },
  9. create: async function (createdByUserId = null) {
  10. try {
  11. const apiKey = await prisma.api_keys.create({
  12. data: {
  13. secret: this.makeSecret(),
  14. createdBy: createdByUserId,
  15. },
  16. });
  17. return { apiKey, error: null };
  18. } catch (error) {
  19. console.error("FAILED TO CREATE API KEY.", error.message);
  20. return { apiKey: null, error: error.message };
  21. }
  22. },
  23. get: async function (clause = {}) {
  24. try {
  25. const apiKey = await prisma.api_keys.findFirst({ where: clause });
  26. return apiKey;
  27. } catch (error) {
  28. console.error("FAILED TO GET API KEY.", error.message);
  29. return null;
  30. }
  31. },
  32. count: async function (clause = {}) {
  33. try {
  34. const count = await prisma.api_keys.count({ where: clause });
  35. return count;
  36. } catch (error) {
  37. console.error("FAILED TO COUNT API KEYS.", error.message);
  38. return 0;
  39. }
  40. },
  41. delete: async function (clause = {}) {
  42. try {
  43. await prisma.api_keys.deleteMany({ where: clause });
  44. return true;
  45. } catch (error) {
  46. console.error("FAILED TO DELETE API KEY.", error.message);
  47. return false;
  48. }
  49. },
  50. where: async function (clause = {}, limit) {
  51. try {
  52. const apiKeys = await prisma.api_keys.findMany({
  53. where: clause,
  54. take: limit,
  55. });
  56. return apiKeys;
  57. } catch (error) {
  58. console.error("FAILED TO GET API KEYS.", error.message);
  59. return [];
  60. }
  61. },
  62. whereWithUser: async function (clause = {}, limit) {
  63. try {
  64. const { User } = require("./user");
  65. const apiKeys = await this.where(clause, limit);
  66. for (const apiKey of apiKeys) {
  67. if (!apiKey.createdBy) continue;
  68. const user = await User.get({ id: apiKey.createdBy });
  69. if (!user) continue;
  70. apiKey.createdBy = {
  71. id: user.id,
  72. username: user.username,
  73. role: user.role,
  74. };
  75. }
  76. return apiKeys;
  77. } catch (error) {
  78. console.error("FAILED TO GET API KEYS WITH USER.", error.message);
  79. return [];
  80. }
  81. },
  82. };
  83. module.exports = { ApiKey };