UNPKG

@a11ywatch/core

Version:
187 lines 8.56 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UsersController = void 0; const date_fns_1 = require("date-fns"); const html_1 = require("../../../html"); const strings_1 = require("../../strings"); const utils_1 = require("../../utils"); const websites_1 = require("../websites"); const find_1 = require("./find"); const update_1 = require("./update"); const set_1 = require("./set"); const confirm_email_1 = require("./update/confirm-email"); const database_1 = require("../../../database"); const UsersController = ({ user: _user } = { user: null }) => ({ getCollection: database_1.usersCollection, getUser: find_1.getUser, verifyUser: update_1.verifyUser, createUser: set_1.createUser, addPaymentSubscription: update_1.addPaymentSubscription, cancelSubscription: update_1.cancelSubscription, downgradeStripeUserValues: update_1.downgradeStripeUserValues, updateFilterEmailDates: ({ id, emailFilteredDates, morning = false, }) => __awaiter(void 0, void 0, void 0, function* () { const [user, collection] = yield (0, find_1.getUser)({ id }); if (user) { yield collection.updateOne({ id }, { $set: { emailFilteredDates, emailMorningOnly: morning, }, }); return { user, code: 200, success: true, message: strings_1.SUCCESS, }; } throw new Error(strings_1.GENERAL_ERROR); }), updateUser: ({ password, email, newPassword, userId }) => __awaiter(void 0, void 0, void 0, function* () { const authed = typeof userId !== "undefined"; const [user, collection] = yield (0, find_1.getUser)(authed ? { id: userId } : { email }); if (!user) { throw new Error("Error user not found."); } let sendData = authed; let updateProps = { jwt: user.jwt, password: user.password, salt: user.salt, email: user.email, emailConfirmed: user.emailConfirmed, }; if (password) { const salthash = yield (0, utils_1.saltHashPassword)(password, user === null || user === void 0 ? void 0 : user.salt); const authless = !(user === null || user === void 0 ? void 0 : user.password) && !(user === null || user === void 0 ? void 0 : user.googleId); if ((user === null || user === void 0 ? void 0 : user.password) && user.password !== (salthash === null || salthash === void 0 ? void 0 : salthash.passwordHash)) { throw new Error(strings_1.PASSWORD_ERROR); } if (newPassword && ((user === null || user === void 0 ? void 0 : user.password) === (salthash === null || salthash === void 0 ? void 0 : salthash.passwordHash) || authless)) { const jwt = yield (0, utils_1.signJwt)({ email, role: user === null || user === void 0 ? void 0 : user.role, keyid: user === null || user === void 0 ? void 0 : user.id, }); const newSaltHash = yield (0, utils_1.saltHashPassword)(newPassword); updateProps = Object.assign(Object.assign({}, updateProps), { jwt, password: newSaltHash === null || newSaltHash === void 0 ? void 0 : newSaltHash.passwordHash, salt: newSaltHash === null || newSaltHash === void 0 ? void 0 : newSaltHash.salt }); } sendData = true; } if (sendData) { if (email && email !== user.email) { updateProps = Object.assign(Object.assign({}, updateProps), { email, emailConfirmed: false }); yield (0, confirm_email_1.sendEmailConfirmation)(user, collection); } } yield collection.updateOne({ id: userId }, { $set: updateProps, }); return sendData ? { user: Object.assign(Object.assign({}, user), updateProps), jwt: updateProps.jwt, code: 200, success: true, message: strings_1.SUCCESS, } : { user: null, jwt: "", code: 200, success: false, message: strings_1.GENERAL_ERROR, }; }), forgotPassword: update_1.forgotPassword, resetPassword: update_1.resetPassword, toggleAlert: update_1.toggleAlert, confirmEmail: update_1.confirmEmail, updateScanAttempt: update_1.updateScanAttempt, validateEmail: update_1.validateEmail, unsubscribeEmails: update_1.unsubscribeEmails, sendWebsiteOffline: ({ id, domain }) => __awaiter(void 0, void 0, void 0, function* () { var _a, _b; const [user, collection] = yield (0, find_1.getUser)({ id }); if ((user === null || user === void 0 ? void 0 : user.alertEnabled) === false || !domain) { return false; } const [website, websiteCollection] = yield (0, websites_1.getWebsite)({ userId: id, domain, }); if (website) { yield websiteCollection.findOneAndUpdate({ userId: id, domain: domain }, { $set: { online: false, }, }); } let shouldEmail = false; if ((_a = user === null || user === void 0 ? void 0 : user.downAlerts) === null || _a === void 0 ? void 0 : _a.length) { const newAlerts = (_b = user === null || user === void 0 ? void 0 : user.downAlerts) === null || _b === void 0 ? void 0 : _b.map((item) => { if (item.domain === domain && (0, date_fns_1.isBefore)(new Date(), new Date(item === null || item === void 0 ? void 0 : item.date))) { shouldEmail = true; item.date = new Date().toUTCString(); } return item; }); if (shouldEmail) { yield collection.findOneAndUpdate({ id: id }, { $set: { downAlerts: newAlerts, }, }); } } else { const downAlerts = [{ domain, date: new Date().toUTCString() }]; shouldEmail = true; yield collection.findOneAndUpdate({ id: id }, { $set: { downAlerts, }, }); } if (shouldEmail) { utils_1.transporter.sendMail({ from: utils_1.mailOptions.from, text: utils_1.mailOptions.text, to: user.email, subject: `${domain} is Offline.`, html: `<h1>${domain} is currently offline.</h1><br /><p>Please check your server logs to see what happened if issues are difficult to figure out.</p><br />${html_1.footer.marketing({ userId: id, email: user === null || user === void 0 ? void 0 : user.email })}`, }, utils_1.sendMailCallback); } }), setPageSpeedKey: ({ id, pageSpeedApiKey }) => __awaiter(void 0, void 0, void 0, function* () { const [user, collection] = yield (0, find_1.getUser)({ id }); if (user) { yield collection.updateOne({ id }, { $set: { pageSpeedApiKey, }, }); user.pageSpeedApiKey = pageSpeedApiKey; return { user, code: 200, success: true, message: strings_1.SUCCESS, }; } throw new Error(strings_1.GENERAL_ERROR); }), }); exports.UsersController = UsersController; //# sourceMappingURL=users.js.map