File size: 1,921 Bytes
777b311 a705c01 777b311 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
const { db } = require('../db');
const crypto = require('crypto');
class ApiKey {
constructor(keyData) {
Object.assign(this, keyData);
this.id = keyData._id;
}
static async find(query) {
return new Promise((resolve, reject) => {
db.apikeys.find(query, (err, docs) => {
if (err) reject(err);
else resolve(docs.map(doc => new ApiKey(doc)));
});
});
}
static async findOne(query) {
return new Promise((resolve, reject) => {
db.apikeys.findOne(query, (err, doc) => {
if (err) reject(err);
else resolve(doc ? new ApiKey(doc) : null);
});
});
}
static async findById(id) {
return new Promise((resolve, reject) => {
db.apikeys.findOne({ _id: id }, (err, doc) => {
if (err) reject(err);
else resolve(doc ? new ApiKey(doc) : null);
});
});
}
static async create(keyData) {
keyData.isActive = keyData.isActive !== undefined ? keyData.isActive : true;
keyData.createdAt = keyData.createdAt || new Date();
keyData.lastUsed = keyData.lastUsed || null;
return new Promise((resolve, reject) => {
db.apikeys.insert(keyData, (err, newDoc) => {
if (err) reject(err);
else resolve(new ApiKey(newDoc));
});
});
}
static generateKey() {
const token = crypto.randomBytes(24).toString('hex');
return `sk-cdx-${token}`;
}
async save() {
return new Promise((resolve, reject) => {
const data = { ...this };
const id = data._id;
delete data._id;
db.apikeys.update({ _id: id }, { $set: data }, (err) => {
if (err) reject(err);
else resolve(this);
});
});
}
async deleteOne() {
return new Promise((resolve, reject) => {
db.apikeys.remove({ _id: this._id }, {}, (err) => {
if (err) reject(err);
else resolve();
});
});
}
}
module.exports = ApiKey; |