@exweiv/weiv-data
Version:
Custom API Library for Wix sites to connect MongoDB. Designed to easily switch from wix-data APIs.
161 lines (160 loc) • 6.19 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMongoURI = getMongoURI;
exports.getPermissionsCache = getPermissionsCache;
const wix_users_backend_1 = require("wix-users-backend");
const secret_helpers_1 = require("../Helpers/secret_helpers");
const cacheable_1 = require("cacheable");
const crypto_js_1 = __importDefault(require("crypto-js"));
const encrypt_helpers_1 = require("../Helpers/encrypt_helpers");
const error_manager_1 = require("../Errors/error_manager");
const cache = new cacheable_1.CacheableMemory({ useClone: false, checkInterval: 5000 });
async function getMongoURI(suppressAuth = false) {
try {
if (suppressAuth != true) {
if (wix_users_backend_1.currentUser.loggedIn === true) {
return getMemberURI();
}
else {
return getVisitorURI();
}
}
else {
return getAdminURI();
}
}
catch (err) {
(0, error_manager_1.kaptanLogar)("00009", `on getting URI for MongoDB based on permission of current user: ${err}`);
}
}
const getVisitorURI = async () => {
try {
const cachedEncryptedVisitorURI = cache.get("VisitorMongoDB_URI");
if (cachedEncryptedVisitorURI) {
const cachedVisitorURI = await decryptURI(cachedEncryptedVisitorURI);
return { uri: cachedVisitorURI, role: "visitorClientOptions" };
}
const secret = await getSecretURI("visitor");
if (secret) {
const encryptedURI = await encryptURI(secret);
cache.set("VisitorMongoDB_URI", encryptedURI, 60 * 5);
return { uri: secret, role: "visitorClientOptions" };
}
else {
(0, error_manager_1.kaptanLogar)("00009", `WeivDataURIs Secret Not Found or Not Configured Correctly`);
}
}
catch (err) {
(0, error_manager_1.kaptanLogar)("00009", `when getting VisitorURI: ${err}`);
}
};
const getAdminURI = async () => {
try {
const cachedEncryptedAdminURI = cache.get("AdminMongoDB_URI");
if (cachedEncryptedAdminURI) {
const cachedAdminURI = await decryptURI(cachedEncryptedAdminURI);
return {
uri: cachedAdminURI,
memberId: wix_users_backend_1.currentUser.id,
role: "adminClientOptions"
};
}
const secret = await getSecretURI("admin");
if (secret) {
const encryptedURI = await encryptURI(secret);
cache.set("AdminMongoDB_URI", encryptedURI, 60 * 5);
return {
uri: secret,
memberId: wix_users_backend_1.currentUser.id,
role: "adminClientOptions"
};
}
else {
(0, error_manager_1.kaptanLogar)("00009", `WeivDataURIs Secret Not Found or Not Configured Correctly`);
}
}
catch (err) {
(0, error_manager_1.kaptanLogar)("00009", `when getting AdminURI: ${err}`);
}
};
const getMemberURI = async () => {
try {
const cachedEncryptedMemberURI = cache.get(`MemberURI${wix_users_backend_1.currentUser.id}`);
if (cachedEncryptedMemberURI) {
const cachedMemberURI = await decryptURI(cachedEncryptedMemberURI);
return {
uri: cachedMemberURI,
memberId: wix_users_backend_1.currentUser.id,
role: "memberClientOptions"
};
}
const cachedRole = cache.get(`MemberRoles${wix_users_backend_1.currentUser.id}`);
if (cachedRole) {
if (cachedRole === "Admin") {
return getAdminURI();
}
}
const roles = await wix_users_backend_1.currentUser.getRoles();
if (roles.length > 0) {
cache.set(`MemberRoles${wix_users_backend_1.currentUser.id}`, roles[0].name, 60 * 5);
const isAdmin = roles.filter((role) => {
return role.name === "Admin";
}).length > 0;
if (isAdmin) {
return getAdminURI();
}
}
else {
cache.set(`MemberRoles${wix_users_backend_1.currentUser.id}`, "Member", 60 * 5);
}
const secret = await getSecretURI("member");
if (secret) {
const encryptedURI = await encryptURI(secret);
cache.set(`MemberURI${wix_users_backend_1.currentUser.id}`, encryptedURI, 60 * 5);
return {
uri: secret,
memberId: wix_users_backend_1.currentUser.id,
role: "memberClientOptions"
};
}
else {
(0, error_manager_1.kaptanLogar)("00009", `WeivDataURIs Secret Not Found or Not Configured Correctly`);
}
}
catch (err) {
(0, error_manager_1.kaptanLogar)("00009", `when getting MemberURI: ${err}`);
}
};
function getPermissionsCache() {
return cache;
}
const encryptURI = async (uri) => {
const secret = await (0, encrypt_helpers_1.getSecretKey)();
const encrypted = crypto_js_1.default.AES.encrypt(uri, secret, {
mode: crypto_js_1.default.mode.CBC,
paddding: crypto_js_1.default.pad.Pkcs7,
iv: crypto_js_1.default.lib.WordArray.random(16)
});
return encrypted;
};
const decryptURI = async (encryptedURI) => {
const secret = await (0, encrypt_helpers_1.getSecretKey)();
const decrypted = crypto_js_1.default.AES.decrypt(encryptedURI, secret, {
mode: crypto_js_1.default.mode.CBC,
padding: crypto_js_1.default.pad.Pkcs7,
iv: encryptedURI.iv
});
return decrypted.toString(crypto_js_1.default.enc.Utf8);
};
const getSecretURI = async (uri) => {
try {
const secret = await (0, secret_helpers_1.getCachedSecret)("WeivDataURIs", true);
return secret[uri];
}
catch (err) {
(0, error_manager_1.kaptanLogar)("00009", `when getting connection URI from secret manager via getCachedSecret helper function, ${err}`);
}
};