mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-09 02:55:51 +02:00
Merge branch 'master' of https://github.com/NodeBB/NodeBB
This commit is contained in:
@@ -273,13 +273,20 @@ function continueLogin(req, res, next) {
|
||||
if (passwordExpiry && passwordExpiry < Date.now()) {
|
||||
winston.verbose('[auth] Triggering password reset for uid ' + userData.uid + ' due to password policy');
|
||||
req.session.passwordExpired = true;
|
||||
user.reset.generate(userData.uid, function (err, code) {
|
||||
|
||||
async.series({
|
||||
code: async.apply(user.reset.generate, userData.uid),
|
||||
buildHeader: async.apply(middleware.buildHeader, req, res),
|
||||
header: async.apply(middleware.generateHeader, req, res, {}),
|
||||
}, function (err, payload) {
|
||||
if (err) {
|
||||
return helpers.noScriptErrors(req, res, err.message, 403);
|
||||
}
|
||||
|
||||
res.status(200).send({
|
||||
next: nconf.get('relative_path') + '/reset/' + code,
|
||||
next: nconf.get('relative_path') + '/reset/' + payload.code,
|
||||
header: payload.header,
|
||||
config: res.locals.config,
|
||||
});
|
||||
});
|
||||
} else {
|
||||
|
||||
@@ -62,10 +62,10 @@ Controllers.reset = function (req, res, next) {
|
||||
};
|
||||
|
||||
if (req.params.code) {
|
||||
// Save to session and redirect
|
||||
req.session.reset_code = req.params.code;
|
||||
res.redirect(nconf.get('relative_path') + '/reset');
|
||||
} else if (req.session.reset_code) {
|
||||
}
|
||||
|
||||
if (req.session.reset_code) {
|
||||
// Validate and save to local variable before removing from session
|
||||
user.reset.validate(req.session.reset_code, function (err, valid) {
|
||||
if (err) {
|
||||
|
||||
@@ -69,6 +69,7 @@ function loadConfig(configFile) {
|
||||
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-persona/templates'));
|
||||
|
||||
nconf.set('upload_path', path.resolve(nconf.get('base_dir'), nconf.get('upload_path')));
|
||||
nconf.set('upload_url', '/assets/uploads');
|
||||
|
||||
if (nconf.get('url')) {
|
||||
nconf.set('url_parsed', url.parse(nconf.get('url')));
|
||||
|
||||
@@ -126,6 +126,25 @@ User.sendPasswordResetEmail = function (socket, uids, callback) {
|
||||
}, callback);
|
||||
};
|
||||
|
||||
User.forcePasswordReset = function (socket, uids, callback) {
|
||||
if (!Array.isArray(uids)) {
|
||||
return callback(new Error('[[error:invalid-data]]'));
|
||||
}
|
||||
|
||||
uids = uids.filter(uid => parseInt(uid, 10));
|
||||
|
||||
async.each(uids, function (uid, next) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
user.setUserField(uid, 'passwordExpiry', Date.now(), next);
|
||||
},
|
||||
function (next) {
|
||||
user.auth.revokeAllSessions(uid, next);
|
||||
},
|
||||
], next);
|
||||
}, callback);
|
||||
};
|
||||
|
||||
User.deleteUsers = function (socket, uids, callback) {
|
||||
deleteUsers(socket, uids, function (uid, next) {
|
||||
user.deleteAccount(uid, next);
|
||||
|
||||
@@ -62,7 +62,12 @@ function leaveCurrentRoom(socket) {
|
||||
|
||||
SocketMeta.getServerTime = function (socket, data, callback) {
|
||||
// Returns server time in milliseconds
|
||||
callback(null, Date.now());
|
||||
const now = new Date();
|
||||
|
||||
callback(null, {
|
||||
timestamp: now.getTime(),
|
||||
offset: now.getTimezoneOffset(),
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = SocketMeta;
|
||||
|
||||
@@ -99,7 +99,6 @@ function setupConfigs() {
|
||||
nconf.set('use_port', !!urlObject.port);
|
||||
nconf.set('relative_path', relativePath);
|
||||
nconf.set('port', nconf.get('PORT') || nconf.get('port') || urlObject.port || (nconf.get('PORT_ENV_VAR') ? nconf.get(nconf.get('PORT_ENV_VAR')) : false) || 4567);
|
||||
nconf.set('upload_url', '/assets/uploads');
|
||||
}
|
||||
|
||||
function printStartupInfo() {
|
||||
|
||||
@@ -20,7 +20,32 @@
|
||||
<br />
|
||||
|
||||
<div class="plugins row">
|
||||
<div class="col-lg-9">
|
||||
<div class="acp-sidebar col-lg-3 col-lg-push-9">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">[[admin/extend/plugins:plugin-search]]</div>
|
||||
<div class="panel-body">
|
||||
<input autofocus class="form-control" type="text" id="plugin-search" placeholder="[[admin/extend/plugins:plugin-search-placeholder]]"/><br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">[[admin/extend/plugins:reorder-plugins]]</div>
|
||||
<div class="panel-body">
|
||||
<button class="btn btn-default btn-block" id="plugin-order"><i class="fa fa-exchange"></i> [[admin/extend/plugins:order-active]]</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">[[admin/extend/plugins:dev-interested]]</div>
|
||||
<div class="panel-body">
|
||||
<p>
|
||||
[[admin/extend/plugins:docs-info]]
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-9 col-lg-pull-3">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade active in" id="installed">
|
||||
<ul class="installed">
|
||||
@@ -48,32 +73,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-3 acp-sidebar">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">[[admin/extend/plugins:plugin-search]]</div>
|
||||
<div class="panel-body">
|
||||
<input autofocus class="form-control" type="text" id="plugin-search" placeholder="[[admin/extend/plugins:plugin-search-placeholder]]"/><br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">[[admin/extend/plugins:reorder-plugins]]</div>
|
||||
<div class="panel-body">
|
||||
<button class="btn btn-default btn-block" id="plugin-order"><i class="fa fa-exchange"></i> [[admin/extend/plugins:order-active]]</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">[[admin/extend/plugins:dev-interested]]</div>
|
||||
<div class="panel-body">
|
||||
<p>
|
||||
[[admin/extend/plugins:docs-info]]
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="modal fade" id="order-active-plugins-modal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
<li><a href="#" class="validate-email"><i class="fa fa-fw fa-check"></i> [[admin/manage/users:validate-email]]</a></li>
|
||||
<li><a href="#" class="send-validation-email"><i class="fa fa-fw fa-mail-forward"></i> [[admin/manage/users:send-validation-email]]</a></li>
|
||||
<li><a href="#" class="password-reset-email"><i class="fa fa-fw fa-key"></i> [[admin/manage/users:password-reset-email]]</a></li>
|
||||
<li><a href="#" class="force-password-reset"><i class="fa fa-fw fa-unlock-alt"></i> [[admin/manage/users:force-password-reset]]</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#" class="ban-user"><i class="fa fa-fw fa-gavel"></i> [[admin/manage/users:ban]]</a></li>
|
||||
<li><a href="#" class="ban-user-temporary"><i class="fa fa-fw fa-clock-o"></i>[[admin/manage/users:temp-ban]]</a></li>
|
||||
|
||||
Reference in New Issue
Block a user