const { BeanModel } = require("redbean-node/dist/bean-model"); const { R } = require("redbean-node"); const dayjs = require("dayjs"); class APIKey extends BeanModel { /** * Get the current status of this API key * @returns {string} active, inactive or expired */ getStatus() { let current = dayjs(); let expiry = dayjs(this.expires); if (expiry.diff(current) < 0) { return "expired"; } return this.active ? "active" : "inactive"; } /** * Returns an object that ready to parse to JSON * @returns {Object} */ toJSON() { return { id: this.id, key: this.key, name: this.name, userID: this.user_id, createdDate: this.created_date, active: this.active, expires: this.expires, status: this.getStatus(), }; } /** * Returns an object that ready to parse to JSON with sensitive fields * removed * @returns {Object} */ toPublicJSON() { return { id: this.id, name: this.name, userID: this.user_id, createdDate: this.created_date, active: this.active, expires: this.expires, status: this.getStatus(), }; } /** * Create a new API Key and store it in the database * @param {Object} key Object sent by client * @param {int} userID ID of socket user * @returns {Promise} */ static async save(key, userID) { let bean; bean = R.dispense("api_key"); bean.key = key.key; bean.name = key.name; bean.user_id = userID; bean.active = key.active; bean.expires = key.expires; await R.store(bean); return bean; } } module.exports = APIKey;