Files
NodeBB/src/controllers/accounts/helpers.js

172 lines
6.0 KiB
JavaScript
Raw Normal View History

2015-09-25 01:52:41 -04:00
'use strict';
2015-12-25 10:19:15 +02:00
var async = require('async');
var validator = require('validator');
2015-09-25 01:52:41 -04:00
2015-12-25 10:19:15 +02:00
var user = require('../../user');
var groups = require('../../groups');
var plugins =require('../../plugins');
var meta = require('../../meta');
var utils = require('../../../public/src/utils');
2015-09-25 01:52:41 -04:00
var helpers = {};
helpers.getUserDataByUserSlug = function(userslug, callerUID, callback) {
async.waterfall([
function (next) {
user.getUidByUserslug(userslug, next);
},
function (uid, next) {
if (!uid) {
2015-09-25 18:51:27 -04:00
return callback(null, null);
2015-09-25 01:52:41 -04:00
}
async.parallel({
userData : function(next) {
user.getUserData(uid, next);
},
userSettings : function(next) {
user.getSettings(uid, next);
},
isAdmin : function(next) {
user.isAdministrator(callerUID, next);
},
2016-01-25 13:36:10 +02:00
isGlobalModerator: function(next) {
user.isGlobalModerator(callerUID, next);
},
2015-09-25 01:52:41 -04:00
ips: function(next) {
user.getIPs(uid, 4, next);
},
profile_links: function(next) {
plugins.fireHook('filter:user.profileLinks', [], next);
},
groups: function(next) {
groups.getUserGroups([uid], next);
},
sso: function(next) {
plugins.fireHook('filter:auth.list', {uid: uid, associations: []}, next);
}
}, next);
},
function (results, next) {
if (!results.userData) {
return callback(new Error('[[error:invalid-uid]]'));
}
var userData = results.userData;
var userSettings = results.userSettings;
var isAdmin = results.isAdmin;
2016-02-16 18:04:02 +02:00
var isGlobalModerator = results.isGlobalModerator;
2015-09-25 01:52:41 -04:00
var self = parseInt(callerUID, 10) === parseInt(userData.uid, 10);
2015-11-08 14:57:55 -05:00
userData.joindateISO = utils.toISOString(userData.joindate);
2015-11-05 12:54:15 -05:00
userData.lastonlineISO = utils.toISOString(userData.lastonline || userData.joindate);
2015-12-11 15:24:49 +02:00
userData.age = Math.max(0, userData.birthday ? Math.floor((new Date().getTime() - new Date(userData.birthday).getTime()) / 31536000000) : 0);
2015-09-25 01:52:41 -04:00
2016-02-16 18:04:02 +02:00
if (!(isAdmin || isGlobalModerator || self || (userData.email && userSettings.showemail))) {
2015-09-25 01:52:41 -04:00
userData.email = '';
}
userData.emailClass = (self && !userSettings.showemail) ? '' : 'hide';
2016-02-16 18:04:02 +02:00
if (!isAdmin && !isGlobalModerator && !self && !userSettings.showfullname) {
2015-09-25 01:52:41 -04:00
userData.fullname = '';
}
2016-02-16 18:04:02 +02:00
if (isAdmin || isGlobalModerator || self) {
2015-09-25 01:52:41 -04:00
userData.ips = results.ips;
}
userData.uid = userData.uid;
userData.yourid = callerUID;
userData.theirid = userData.uid;
userData.isAdmin = isAdmin;
2016-02-16 18:04:02 +02:00
userData.isGlobalModerator = isGlobalModerator;
userData.canBan = isAdmin || isGlobalModerator;
userData.canChangePassword = isAdmin || self;
2015-09-25 01:52:41 -04:00
userData.isSelf = self;
2016-02-16 18:04:02 +02:00
userData.showHidden = self || isAdmin || isGlobalModerator;
2015-09-25 01:52:41 -04:00
userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : [];
userData.disableSignatures = meta.config.disableSignatures !== undefined && parseInt(meta.config.disableSignatures, 10) === 1;
userData['email:confirmed'] = !!parseInt(userData['email:confirmed'], 10);
2015-11-05 21:03:01 -05:00
userData.profile_links = filterLinks(results.profile_links, self);
2015-09-25 01:52:41 -04:00
userData.sso = results.sso.associations;
userData.status = user.getStatus(userData);
2015-09-25 01:52:41 -04:00
userData.banned = parseInt(userData.banned, 10) === 1;
2016-02-08 12:21:23 +02:00
userData.website = validator.escape(userData.website || '');
2015-09-25 01:52:41 -04:00
userData.websiteLink = !userData.website.startsWith('http') ? 'http://' + userData.website : userData.website;
userData.websiteName = userData.website.replace(validator.escape('http://'), '').replace(validator.escape('https://'), '');
userData.followingCount = parseInt(userData.followingCount, 10) || 0;
userData.followerCount = parseInt(userData.followerCount, 10) || 0;
2016-02-08 12:21:23 +02:00
userData.username = validator.escape(userData.username || '');
userData.email = validator.escape(userData.email || '');
userData.fullname = validator.escape(userData.fullname || '');
userData.location = validator.escape(userData.location || '');
userData.signature = validator.escape(userData.signature || '');
2015-09-25 01:52:41 -04:00
userData.aboutme = validator.escape(userData.aboutme || '');
userData['cover:url'] = userData['cover:url'] || require('../../coverPhoto').getDefaultProfileCover(userData.uid);
userData['cover:position'] = userData['cover:position'] || '50% 50%';
2015-12-25 10:19:15 +02:00
userData['username:disableEdit'] = !userData.isAdmin && parseInt(meta.config['username:disableEdit'], 10) === 1;
userData['email:disableEdit'] = !userData.isAdmin && parseInt(meta.config['email:disableEdit'], 10) === 1;
2015-09-25 01:52:41 -04:00
next(null, userData);
}
], callback);
};
helpers.getBaseUser = function(userslug, callerUID, callback) {
async.waterfall([
function (next) {
user.getUidByUserslug(userslug, next);
},
function (uid, next) {
if (!uid) {
return callback(null, null);
}
async.parallel({
user: function(next) {
2015-11-05 16:07:25 -05:00
user.getUserFields(uid, ['uid', 'username', 'userslug', 'picture', 'cover:url', 'cover:position', 'status', 'lastonline'], next);
},
isAdmin: function(next) {
user.isAdministrator(callerUID, next);
},
2016-02-16 18:04:02 +02:00
isGlobalModerator: function(next) {
user.isGlobalModerator(callerUID, next);
},
profile_links: function(next) {
plugins.fireHook('filter:user.profileLinks', [], next);
}
}, next);
},
function (results, next) {
if (!results.user) {
return callback();
}
results.user.yourid = callerUID;
results.user.theirid = results.user.uid;
2015-11-05 16:07:25 -05:00
results.user.status = user.getStatus(results.user);
results.user.isSelf = parseInt(callerUID, 10) === parseInt(results.user.uid, 10);
2016-02-16 18:04:02 +02:00
results.user.showHidden = results.user.isSelf || results.isAdmin || results.isGlobalModerator;
2015-11-05 21:03:01 -05:00
results.user.profile_links = filterLinks(results.profile_links, results.user.isSelf);
2015-10-29 16:05:07 -04:00
results.user['cover:url'] = results.user['cover:url'] || require('../../coverPhoto').getDefaultProfileCover(results.user.uid);
results.user['cover:position'] = results.user['cover:position'] || '50% 50%';
next(null, results.user);
}
], callback);
};
2015-11-05 21:03:01 -05:00
function filterLinks(links, self) {
return links.filter(function(link) {
return link && (link.public || self);
});
}
2015-09-25 01:52:41 -04:00
module.exports = helpers;