You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
6.3 KiB
JavaScript

'use strict';
9 years ago
var async = require('async');
var validator = require('validator');
var winston = require('winston');
9 years ago
var user = require('../../user');
var groups = require('../../groups');
var plugins = require('../../plugins');
9 years ago
var meta = require('../../meta');
var utils = require('../../../public/src/utils');
var helpers = {};
helpers.getUserDataByUserSlug = function (userslug, callerUID, callback) {
async.waterfall([
function (next) {
user.getUidByUserslug(userslug, next);
},
function (uid, next) {
if (!uid) {
10 years ago
return callback(null, null);
}
async.parallel({
8 years ago
userData: function (next) {
user.getUserData(uid, next);
},
8 years ago
isTargetAdmin: function (next) {
user.isAdministrator(uid, next);
},
userSettings: function (next) {
user.getSettings(uid, next);
},
8 years ago
isAdmin: function (next) {
user.isAdministrator(callerUID, next);
},
isGlobalModerator: function (next) {
9 years ago
user.isGlobalModerator(callerUID, next);
},
isModerator: function (next) {
user.isModeratorOfAnyCategory(callerUID, next);
},
isFollowing: function (next) {
user.isFollowing(callerUID, uid, next);
},
ips: function (next) {
user.getIPs(uid, 4, next);
},
profile_links: function (next) {
plugins.fireHook('filter:user.profileLinks', [], next);
},
profile_menu: function (next) {
9 years ago
plugins.fireHook('filter:user.profileMenu', {uid: uid, callerUID: callerUID, links: []}, 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;
9 years ago
var isGlobalModerator = results.isGlobalModerator;
var isModerator = results.isModerator;
9 years ago
var isSelf = parseInt(callerUID, 10) === parseInt(userData.uid, 10);
9 years ago
userData.joindateISO = utils.toISOString(userData.joindate);
userData.lastonlineISO = utils.toISOString(userData.lastonline || userData.joindate);
9 years ago
userData.age = Math.max(0, userData.birthday ? Math.floor((new Date().getTime() - new Date(userData.birthday).getTime()) / 31536000000) : 0);
userData.emailClass = 'hide';
9 years ago
if (!(isAdmin || isGlobalModerator || isSelf || (userData.email && userSettings.showemail))) {
userData.email = '';
} else if (!userSettings.showemail) {
userData.emailClass = '';
}
9 years ago
if (!isAdmin && !isGlobalModerator && !isSelf && !userSettings.showfullname) {
userData.fullname = '';
}
8 years ago
if (isAdmin || isSelf || (isGlobalModerator && !results.isTargetAdmin)) {
userData.ips = results.ips;
}
if (!isAdmin && !isGlobalModerator && !isModerator) {
userData.moderationNote = undefined;
}
userData.uid = userData.uid;
userData.yourid = callerUID;
userData.theirid = userData.uid;
8 years ago
userData.isTargetAdmin = results.isTargetAdmin;
userData.isAdmin = isAdmin;
9 years ago
userData.isGlobalModerator = isGlobalModerator;
userData.isModerator = isModerator;
userData.isAdminOrGlobalModerator = isAdmin || isGlobalModerator;
userData.isAdminOrGlobalModeratorOrModerator = isAdmin || isGlobalModerator || isModerator;
8 years ago
userData.canEdit = isAdmin || (isGlobalModerator && !results.isTargetAdmin);
userData.canBan = isAdmin || (isGlobalModerator && !results.isTargetAdmin);
9 years ago
userData.canChangePassword = isAdmin || (isSelf && parseInt(meta.config['password:disableEdit'], 10) !== 1);
userData.isSelf = isSelf;
userData.isFollowing = results.isFollowing;
8 years ago
userData.showHidden = isSelf || isAdmin || (isGlobalModerator && !results.isTargetAdmin);
userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : [];
userData.disableSignatures = meta.config.disableSignatures !== undefined && parseInt(meta.config.disableSignatures, 10) === 1;
9 years ago
userData['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1;
userData['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1;
userData['email:confirmed'] = !!parseInt(userData['email:confirmed'], 10);
9 years ago
userData.profile_links = filterLinks(results.profile_links.concat(results.profile_menu.links), isSelf);
userData.sso = results.sso.associations;
userData.status = user.getStatus(userData);
userData.banned = parseInt(userData.banned, 10) === 1;
userData.website = validator.escape(String(userData.website || ''));
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;
userData.email = validator.escape(String(userData.email || ''));
userData.fullname = validator.escape(String(userData.fullname || ''));
userData.location = validator.escape(String(userData.location || ''));
userData.signature = validator.escape(String(userData.signature || ''));
userData.aboutme = validator.escape(String(userData.aboutme || ''));
9 years ago
userData.birthday = validator.escape(String(userData.birthday || ''));
userData.moderationNote = validator.escape(String(userData.moderationNote || ''));
userData['cover:url'] = userData['cover:url'] || require('../../coverPhoto').getDefaultProfileCover(userData.uid);
userData['cover:position'] = userData['cover:position'] || '50% 50%';
9 years ago
userData['username:disableEdit'] = !userData.isAdmin && parseInt(meta.config['username:disableEdit'], 10) === 1;
userData['email:disableEdit'] = !userData.isAdmin && parseInt(meta.config['email:disableEdit'], 10) === 1;
next(null, userData);
}
], callback);
};
helpers.getBaseUser = function (userslug, callerUID, callback) {
winston.warn('helpers.getBaseUser deprecated please use helpers.getUserDataByUserSlug');
helpers.getUserDataByUserSlug(userslug, callerUID, callback);
};
9 years ago
function filterLinks(links, self) {
return links.filter(function (link) {
9 years ago
return link && (link.public || self);
});
}
module.exports = helpers;