| const { User, Key } = require('../../models'); | |
| const { encrypt, decrypt } = require('../utils'); | |
| const updateUserPluginsService = async (user, pluginKey, action) => { | |
| try { | |
| if (action === 'install') { | |
| return await User.updateOne( | |
| { _id: user._id }, | |
| { $set: { plugins: [...user.plugins, pluginKey] } }, | |
| ); | |
| } else if (action === 'uninstall') { | |
| return await User.updateOne( | |
| { _id: user._id }, | |
| { $set: { plugins: user.plugins.filter((plugin) => plugin !== pluginKey) } }, | |
| ); | |
| } | |
| } catch (err) { | |
| console.log(err); | |
| return err; | |
| } | |
| }; | |
| const getUserKey = async ({ userId, name }) => { | |
| const keyValue = await Key.findOne({ userId, name }).lean(); | |
| if (!keyValue) { | |
| throw new Error('User-provided key not found'); | |
| } | |
| return decrypt(keyValue.value); | |
| }; | |
| const getUserKeyExpiry = async ({ userId, name }) => { | |
| const keyValue = await Key.findOne({ userId, name }).lean(); | |
| if (!keyValue) { | |
| return { expiresAt: null }; | |
| } | |
| return { expiresAt: keyValue.expiresAt }; | |
| }; | |
| const updateUserKey = async ({ userId, name, value, expiresAt }) => { | |
| const encryptedValue = encrypt(value); | |
| return await Key.findOneAndUpdate( | |
| { userId, name }, | |
| { | |
| userId, | |
| name, | |
| value: encryptedValue, | |
| expiresAt: new Date(expiresAt), | |
| }, | |
| { upsert: true, new: true }, | |
| ).lean(); | |
| }; | |
| const deleteUserKey = async ({ userId, name, all = false }) => { | |
| if (all) { | |
| return await Key.deleteMany({ userId }); | |
| } | |
| await Key.findOneAndDelete({ userId, name }).lean(); | |
| }; | |
| const checkUserKeyExpiry = (expiresAt, message) => { | |
| const expiresAtDate = new Date(expiresAt); | |
| if (expiresAtDate < new Date()) { | |
| const expiryStr = `User-provided key expired at ${expiresAtDate.toLocaleString()}`; | |
| const errorMessage = message ? `${message}\n${expiryStr}` : expiryStr; | |
| throw new Error(errorMessage); | |
| } | |
| }; | |
| module.exports = { | |
| updateUserPluginsService, | |
| getUserKey, | |
| getUserKeyExpiry, | |
| updateUserKey, | |
| deleteUserKey, | |
| checkUserKeyExpiry, | |
| }; | |