| 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, |
| }; |
|
|