mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
closes #5642
This commit is contained in:
@@ -65,8 +65,8 @@
|
|||||||
"nodebb-plugin-spam-be-gone": "0.5.0",
|
"nodebb-plugin-spam-be-gone": "0.5.0",
|
||||||
"nodebb-rewards-essentials": "0.0.9",
|
"nodebb-rewards-essentials": "0.0.9",
|
||||||
"nodebb-theme-lavender": "4.0.0",
|
"nodebb-theme-lavender": "4.0.0",
|
||||||
"nodebb-theme-persona": "5.0.2",
|
"nodebb-theme-persona": "5.0.3",
|
||||||
"nodebb-theme-vanilla": "6.0.2",
|
"nodebb-theme-vanilla": "6.0.3",
|
||||||
"nodebb-widget-essentials": "3.0.0",
|
"nodebb-widget-essentials": "3.0.0",
|
||||||
"nodemailer": "2.6.4",
|
"nodemailer": "2.6.4",
|
||||||
"nodemailer-sendmail-transport": "1.0.0",
|
"nodemailer-sendmail-transport": "1.0.0",
|
||||||
|
|||||||
@@ -60,7 +60,9 @@ define('forum/account/edit', ['forum/account/header', 'translator', 'components'
|
|||||||
if (parseInt(ajaxify.data.theirid, 10) !== parseInt(ajaxify.data.yourid, 10)) {
|
if (parseInt(ajaxify.data.theirid, 10) !== parseInt(ajaxify.data.yourid, 10)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!picture && ajaxify.data.defaultAvatar) {
|
||||||
|
picture = ajaxify.data.defaultAvatar;
|
||||||
|
}
|
||||||
components.get('header/userpicture')[picture ? 'show' : 'hide']();
|
components.get('header/userpicture')[picture ? 'show' : 'hide']();
|
||||||
components.get('header/usericon')[!picture ? 'show' : 'hide']();
|
components.get('header/usericon')[!picture ? 'show' : 'hide']();
|
||||||
if (picture) {
|
if (picture) {
|
||||||
@@ -85,6 +87,8 @@ define('forum/account/edit', ['forum/account/header', 'translator', 'components'
|
|||||||
templates.parse('partials/modals/change_picture_modal', {
|
templates.parse('partials/modals/change_picture_modal', {
|
||||||
pictures: pictures,
|
pictures: pictures,
|
||||||
uploaded: uploaded,
|
uploaded: uploaded,
|
||||||
|
icon: { text: ajaxify.data['icon:text'], bgColor: ajaxify.data['icon:bgColor'] },
|
||||||
|
defaultAvatar: ajaxify.data.defaultAvatar,
|
||||||
allowProfileImageUploads: ajaxify.data.allowProfileImageUploads,
|
allowProfileImageUploads: ajaxify.data.allowProfileImageUploads,
|
||||||
}, function (html) {
|
}, function (html) {
|
||||||
translator.translate(html, function (html) {
|
translator.translate(html, function (html) {
|
||||||
@@ -115,12 +119,6 @@ define('forum/account/edit', ['forum/account/header', 'translator', 'components'
|
|||||||
handleImageUpload(modal);
|
handleImageUpload(modal);
|
||||||
|
|
||||||
function updateImages() {
|
function updateImages() {
|
||||||
var userIcon = modal.find('.user-icon');
|
|
||||||
|
|
||||||
userIcon
|
|
||||||
.css('background-color', ajaxify.data['icon:bgColor'])
|
|
||||||
.text(ajaxify.data['icon:text']);
|
|
||||||
|
|
||||||
// Check to see which one is the active picture
|
// Check to see which one is the active picture
|
||||||
if (!ajaxify.data.picture) {
|
if (!ajaxify.data.picture) {
|
||||||
modal.find('.list-group-item .user-icon').parents('.list-group-item').addClass('active');
|
modal.find('.list-group-item .user-icon').parents('.list-group-item').addClass('active');
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ editController.get = function (req, res, callback) {
|
|||||||
userData.allowProfileImageUploads = parseInt(meta.config.allowProfileImageUploads, 10) === 1;
|
userData.allowProfileImageUploads = parseInt(meta.config.allowProfileImageUploads, 10) === 1;
|
||||||
userData.allowAccountDelete = parseInt(meta.config.allowAccountDelete, 10) === 1;
|
userData.allowAccountDelete = parseInt(meta.config.allowAccountDelete, 10) === 1;
|
||||||
userData.profileImageDimension = parseInt(meta.config.profileImageDimension, 10) || 200;
|
userData.profileImageDimension = parseInt(meta.config.profileImageDimension, 10) || 200;
|
||||||
|
userData.defaultAvatar = user.getDefaultAvatar();
|
||||||
|
|
||||||
userData.groups = userData.groups.filter(function (group) {
|
userData.groups = userData.groups.filter(function (group) {
|
||||||
return group && group.userTitleEnabled && !groups.isPrivilegeGroup(group.name) && group.name !== 'registered-users';
|
return group && group.userTitleEnabled && !groups.isPrivilegeGroup(group.name) && group.name !== 'registered-users';
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ module.exports = function (middleware) {
|
|||||||
username: '[[global:guest]]',
|
username: '[[global:guest]]',
|
||||||
userslug: '',
|
userslug: '',
|
||||||
email: '',
|
email: '',
|
||||||
picture: meta.config.defaultAvatar,
|
picture: user.getDefaultAvatar(),
|
||||||
status: 'offline',
|
status: 'offline',
|
||||||
reputation: 0,
|
reputation: 0,
|
||||||
'email:confirmed': 0,
|
'email:confirmed': 0,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ var nconf = require('nconf');
|
|||||||
var winston = require('winston');
|
var winston = require('winston');
|
||||||
|
|
||||||
var db = require('../database');
|
var db = require('../database');
|
||||||
|
var meta = require('../meta');
|
||||||
var plugins = require('../plugins');
|
var plugins = require('../plugins');
|
||||||
var utils = require('../utils');
|
var utils = require('../utils');
|
||||||
|
|
||||||
@@ -134,7 +135,7 @@ module.exports = function (User) {
|
|||||||
user.uid = 0;
|
user.uid = 0;
|
||||||
user.username = '[[global:guest]]';
|
user.username = '[[global:guest]]';
|
||||||
user.userslug = '';
|
user.userslug = '';
|
||||||
user.picture = '';
|
user.picture = User.getDefaultAvatar();
|
||||||
user['icon:text'] = '?';
|
user['icon:text'] = '?';
|
||||||
user['icon:bgColor'] = '#aaa';
|
user['icon:bgColor'] = '#aaa';
|
||||||
}
|
}
|
||||||
@@ -145,6 +146,9 @@ module.exports = function (User) {
|
|||||||
} else if (user.uploadedpicture) {
|
} else if (user.uploadedpicture) {
|
||||||
user.uploadedpicture = user.uploadedpicture.startsWith('http') ? user.uploadedpicture : nconf.get('relative_path') + user.uploadedpicture;
|
user.uploadedpicture = user.uploadedpicture.startsWith('http') ? user.uploadedpicture : nconf.get('relative_path') + user.uploadedpicture;
|
||||||
}
|
}
|
||||||
|
if (meta.config.defaultAvatar && !user.picture) {
|
||||||
|
user.picture = User.getDefaultAvatar();
|
||||||
|
}
|
||||||
|
|
||||||
if (user.hasOwnProperty('status') && parseInt(user.lastonline, 10)) {
|
if (user.hasOwnProperty('status') && parseInt(user.lastonline, 10)) {
|
||||||
user.status = User.getStatus(user);
|
user.status = User.getStatus(user);
|
||||||
@@ -155,7 +159,7 @@ module.exports = function (User) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// User Icons
|
// User Icons
|
||||||
if (user.hasOwnProperty('picture') && user.username && parseInt(user.uid, 10)) {
|
if (user.hasOwnProperty('picture') && user.username && parseInt(user.uid, 10) && !meta.config.defaultAvatar) {
|
||||||
user['icon:text'] = (user.username[0] || '').toUpperCase();
|
user['icon:text'] = (user.username[0] || '').toUpperCase();
|
||||||
user['icon:bgColor'] = iconBackgrounds[Array.prototype.reduce.call(user.username, function (cur, next) {
|
user['icon:bgColor'] = iconBackgrounds[Array.prototype.reduce.call(user.username, function (cur, next) {
|
||||||
return cur + next.charCodeAt();
|
return cur + next.charCodeAt();
|
||||||
@@ -174,6 +178,13 @@ module.exports = function (User) {
|
|||||||
plugins.fireHook('filter:users.get', users, callback);
|
plugins.fireHook('filter:users.get', users, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
User.getDefaultAvatar = function () {
|
||||||
|
if (!meta.config.defaultAvatar) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return meta.config.defaultAvatar.startsWith('http') ? meta.config.defaultAvatar : nconf.get('relative_path') + meta.config.defaultAvatar;
|
||||||
|
};
|
||||||
|
|
||||||
User.setUserField = function (uid, field, value, callback) {
|
User.setUserField = function (uid, field, value, callback) {
|
||||||
callback = callback || function () {};
|
callback = callback || function () {};
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ var async = require('async');
|
|||||||
var db = require('./mocks/databasemock');
|
var db = require('./mocks/databasemock');
|
||||||
var user = require('../src/user');
|
var user = require('../src/user');
|
||||||
var meta = require('../src/meta');
|
var meta = require('../src/meta');
|
||||||
|
var helpers = require('./helpers');
|
||||||
|
|
||||||
describe('authentication', function () {
|
describe('authentication', function () {
|
||||||
function loginUser(username, password, callback) {
|
function loginUser(username, password, callback) {
|
||||||
@@ -120,23 +121,8 @@ describe('authentication', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should logout a user', function (done) {
|
it('should logout a user', function (done) {
|
||||||
request({
|
helpers.logoutUser(jar, function (err) {
|
||||||
url: nconf.get('url') + '/api/config',
|
|
||||||
json: true,
|
|
||||||
jar: jar,
|
|
||||||
}, function (err, response, body) {
|
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
|
|
||||||
request.post(nconf.get('url') + '/logout', {
|
|
||||||
form: {},
|
|
||||||
json: true,
|
|
||||||
jar: jar,
|
|
||||||
headers: {
|
|
||||||
'x-csrf-token': body.csrf_token,
|
|
||||||
},
|
|
||||||
}, function (err) {
|
|
||||||
assert.ifError(err);
|
|
||||||
|
|
||||||
request({
|
request({
|
||||||
url: nconf.get('url') + '/api/me',
|
url: nconf.get('url') + '/api/me',
|
||||||
json: true,
|
json: true,
|
||||||
@@ -148,7 +134,6 @@ describe('authentication', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
it('should login a user', function (done) {
|
it('should login a user', function (done) {
|
||||||
loginUser('regular', 'regularpwd', function (err, response, body, jar) {
|
loginUser('regular', 'regularpwd', function (err, response, body, jar) {
|
||||||
@@ -317,9 +302,9 @@ describe('authentication', function () {
|
|||||||
|
|
||||||
|
|
||||||
it('should be able to login with email', function (done) {
|
it('should be able to login with email', function (done) {
|
||||||
user.create({ username: 'ginger', password: '123456', email: 'ginger@nodebb.org' }, function (err, uid) {
|
user.create({ username: 'ginger', password: '123456', email: 'ginger@nodebb.org' }, function (err) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
loginUser('ginger@nodebb.org', '123456', function (err, response, body) {
|
loginUser('ginger@nodebb.org', '123456', function (err, response) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(response.statusCode, 200);
|
assert.equal(response.statusCode, 200);
|
||||||
done();
|
done();
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ var helpers = module.exports;
|
|||||||
|
|
||||||
helpers.loginUser = function (username, password, callback) {
|
helpers.loginUser = function (username, password, callback) {
|
||||||
var jar = request.jar();
|
var jar = request.jar();
|
||||||
|
|
||||||
request({
|
request({
|
||||||
url: nconf.get('url') + '/api/config',
|
url: nconf.get('url') + '/api/config',
|
||||||
json: true,
|
json: true,
|
||||||
@@ -42,6 +43,30 @@ helpers.loginUser = function (username, password, callback) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
helpers.logoutUser = function (jar, callback) {
|
||||||
|
request({
|
||||||
|
url: nconf.get('url') + '/api/config',
|
||||||
|
json: true,
|
||||||
|
jar: jar,
|
||||||
|
}, function (err, response, body) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err, response, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
request.post(nconf.get('url') + '/logout', {
|
||||||
|
form: {},
|
||||||
|
json: true,
|
||||||
|
jar: jar,
|
||||||
|
headers: {
|
||||||
|
'x-csrf-token': body.csrf_token,
|
||||||
|
},
|
||||||
|
}, function (err, response, body) {
|
||||||
|
callback(err, response, body);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
helpers.connectSocketIO = function (res, callback) {
|
helpers.connectSocketIO = function (res, callback) {
|
||||||
myXhr.callbacks.headerCallback = function () {
|
myXhr.callbacks.headerCallback = function () {
|
||||||
this.setDisableHeaderCheck(true);
|
this.setDisableHeaderCheck(true);
|
||||||
|
|||||||
16
test/user.js
16
test/user.js
@@ -650,13 +650,13 @@ describe('User', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should set user picture to uploaded', function (done) {
|
it('should set user picture to uploaded', function (done) {
|
||||||
User.setUserField(uid, 'uploadedpicture', 'test', function (err) {
|
User.setUserField(uid, 'uploadedpicture', '/test', function (err) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
socketUser.changePicture({ uid: uid }, { type: 'uploaded', uid: uid }, function (err) {
|
socketUser.changePicture({ uid: uid }, { type: 'uploaded', uid: uid }, function (err) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
User.getUserField(uid, 'picture', function (err, picture) {
|
User.getUserField(uid, 'picture', function (err, picture) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(picture, 'test');
|
assert.equal(picture, nconf.get('relative_path') + '/test');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -802,6 +802,18 @@ describe('User', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should get default profile avatar', function (done) {
|
||||||
|
assert.strictEqual(User.getDefaultAvatar(), '');
|
||||||
|
meta.config.defaultAvatar = 'https://path/to/default/avatar';
|
||||||
|
assert.strictEqual(User.getDefaultAvatar(), meta.config.defaultAvatar);
|
||||||
|
meta.config.defaultAvatar = '/path/to/default/avatar';
|
||||||
|
nconf.set('relative_path', '/community');
|
||||||
|
assert.strictEqual(User.getDefaultAvatar(), '/community' + meta.config.defaultAvatar);
|
||||||
|
meta.config.defaultAvatar = '';
|
||||||
|
nconf.set('relative_path', '');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
it('should fail to get profile pictures with invalid data', function (done) {
|
it('should fail to get profile pictures with invalid data', function (done) {
|
||||||
socketUser.getProfilePictures({ uid: uid }, null, function (err) {
|
socketUser.getProfilePictures({ uid: uid }, null, function (err) {
|
||||||
assert.equal(err.message, '[[error:invalid-data]]');
|
assert.equal(err.message, '[[error:invalid-data]]');
|
||||||
|
|||||||
Reference in New Issue
Block a user