mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-06 15:42:52 +01:00
Squashed commit of the following: commitf9ce878b26Author: Julian Lam <julian@nodebb.org> Date: Tue Aug 13 14:30:46 2019 -0400 fix(style): updated code to follow new eslint recommendations commit80dd370e41Author: Julian Lam <julian@nodebb.org> Date: Tue Aug 13 14:14:58 2019 -0400 fix(deps): update dependency sitemap to v4 Squashed commit of the following: commitf4dd9cabb2Author: Julian Lam <julian@nodebb.org> Date: Tue Aug 13 11:33:05 2019 -0400 fix: resolved breaking changes from sitemap v4 upgrade commit9043415ee1Merge:e3352b27272590b346Author: Julian Lam <julian@nodebb.org> Date: Tue Aug 13 11:09:55 2019 -0400 Merge branch 'master' into renovate/sitemap-4.x commite3352b272eAuthor: Renovate Bot <bot@renovateapp.com> Date: Mon Aug 12 07:59:05 2019 +0000 fix(deps): update dependency sitemap to v4 commit8e3c0cdcaeAuthor: Renovate Bot <bot@renovateapp.com> Date: Fri Aug 9 00:49:51 2019 +0000 fix(deps): update dependency commander to v3 commit2104449d38Author: Renovate Bot <bot@renovateapp.com> Date: Tue Aug 13 15:00:27 2019 +0000 fix(deps): update dependency mongodb to v3.3.0 commitd2937f446aAuthor: Barış Soner Uşaklı <barisusakli@gmail.com> Date: Tue Aug 13 10:36:48 2019 -0400 feat: async/await admin/controllers commit1b97e8b199Author: Misty (Bot) <deploy@nodebb.org> Date: Tue Aug 13 09:28:39 2019 +0000 Latest translations and fallbacks commit69a48957a2Author: Barış Soner Uşaklı <barisusakli@gmail.com> Date: Mon Aug 12 21:56:09 2019 -0400 feat: async/await commitb9b2a7e593Author: Barış Soner Uşaklı <barisusakli@gmail.com> Date: Mon Aug 12 20:58:29 2019 -0400 feat: async/await refactor controllers/accounts commita8d43a1759Author: Baris Usakli <barisusakli@gmail.com> Date: Mon Aug 12 14:49:40 2019 -0400 feat: async/await controllers/accounts commit2f25aae57bAuthor: Barış Soner Uşaklı <barisusakli@gmail.com> Date: Sun Aug 11 23:09:50 2019 -0400 fix: #7831, fix pagination convert to async/await commitc9e83f2374Author: Barış Soner Uşaklı <barisusakli@gmail.com> Date: Sun Aug 11 00:14:35 2019 -0400 fix: remove empty line commit30be91b26cAuthor: Barış Soner Uşaklı <barisusakli@gmail.com> Date: Sun Aug 11 00:13:41 2019 -0400 fix: remove useless catchs and empty line commit2e4a71c0b6Author: Renovate Bot <bot@renovateapp.com> Date: Sat Aug 10 06:51:50 2019 +0000 chore(deps): update dependency eslint-config-airbnb-base to v14
107 lines
3.2 KiB
JavaScript
107 lines
3.2 KiB
JavaScript
|
|
'use strict';
|
|
|
|
var async = require('async');
|
|
var nconf = require('nconf');
|
|
var validator = require('validator');
|
|
|
|
var db = require('./../database');
|
|
var meta = require('../meta');
|
|
var emailer = require('../emailer');
|
|
var translator = require('../translator');
|
|
var utils = require('../utils');
|
|
|
|
module.exports = function (User) {
|
|
User.getInvites = async function (uid) {
|
|
const emails = await db.getSetMembers('invitation:uid:' + uid);
|
|
return emails.map(email => validator.escape(String(email)));
|
|
};
|
|
|
|
User.getInvitesNumber = async function (uid) {
|
|
return await db.setCount('invitation:uid:' + uid);
|
|
};
|
|
|
|
User.getInvitingUsers = async function () {
|
|
return await db.getSetMembers('invitation:uids');
|
|
};
|
|
|
|
User.getAllInvites = async function () {
|
|
const uids = await User.getInvitingUsers();
|
|
const invitations = await async.map(uids, User.getInvites);
|
|
return invitations.map(function (invites, index) {
|
|
return {
|
|
uid: uids[index],
|
|
invitations: invites,
|
|
};
|
|
});
|
|
};
|
|
|
|
User.sendInvitationEmail = async function (uid, email) {
|
|
const token = utils.generateUUID();
|
|
const registerLink = nconf.get('url') + '/register?token=' + token + '&email=' + encodeURIComponent(email);
|
|
|
|
const expireDays = meta.config.inviteExpiration;
|
|
const expireIn = expireDays * 86400000;
|
|
|
|
const exists = await User.getUidByEmail(email);
|
|
if (exists) {
|
|
throw new Error('[[error:email-taken]]');
|
|
}
|
|
await db.setAdd('invitation:uid:' + uid, email);
|
|
await db.setAdd('invitation:uids', uid);
|
|
await db.set('invitation:email:' + email, token);
|
|
await db.pexpireAt('invitation:email:' + email, Date.now() + expireIn);
|
|
const username = await User.getUserField(uid, 'username');
|
|
const title = meta.config.title || meta.config.browserTitle || 'NodeBB';
|
|
const subject = await translator.translate('[[email:invite, ' + title + ']]', meta.config.defaultLang);
|
|
let data = {
|
|
site_title: title,
|
|
registerLink: registerLink,
|
|
subject: subject,
|
|
username: username,
|
|
template: 'invitation',
|
|
expireDays: expireDays,
|
|
};
|
|
|
|
// Append default data to this email payload
|
|
data = { ...emailer._defaultPayload, ...data };
|
|
|
|
await emailer.sendToEmail('invitation', email, meta.config.defaultLang, data);
|
|
};
|
|
|
|
User.verifyInvitation = async function (query) {
|
|
if (!query.token || !query.email) {
|
|
throw new Error('[[error:invalid-data]]');
|
|
}
|
|
const token = await db.get('invitation:email:' + query.email);
|
|
if (!token || token !== query.token) {
|
|
throw new Error('[[error:invalid-token]]');
|
|
}
|
|
};
|
|
|
|
User.deleteInvitation = async function (invitedBy, email) {
|
|
const invitedByUid = await User.getUidByUsername(invitedBy);
|
|
if (!invitedByUid) {
|
|
throw new Error('[[error:invalid-username]]');
|
|
}
|
|
await Promise.all([
|
|
deleteFromReferenceList(invitedByUid, email),
|
|
db.delete('invitation:email:' + email),
|
|
]);
|
|
};
|
|
|
|
User.deleteInvitationKey = async function (email) {
|
|
const uids = await User.getInvitingUsers();
|
|
await Promise.all(uids.map(uid => deleteFromReferenceList(uid, email)));
|
|
await db.delete('invitation:email:' + email);
|
|
};
|
|
|
|
async function deleteFromReferenceList(uid, email) {
|
|
await db.setRemove('invitation:uid:' + uid, email);
|
|
const count = await db.setCount('invitation:uid:' + uid);
|
|
if (count === 0) {
|
|
await db.setRemove('invitation:uids', uid);
|
|
}
|
|
}
|
|
};
|