Compare commits

..

4 Commits

Author SHA1 Message Date
Julian Lam
7624af5769 feat: add feature flag to disable verification emails, closes #9996 2022-01-19 22:22:23 -05:00
Opliko
00a6b05f89 Stop colors.js vandalism (#10131)
* fix: pin colors to 1.4.0

* fix: exclude colors from renovate updates
2022-01-10 09:20:54 -05:00
Barış Soner Uşaklı
b46dcd9243 fix: use component instead of class name 2021-12-23 11:07:57 -05:00
Barış Soner Uşaklı
1a375000a7 refactor: only pass qs 2021-12-16 13:47:12 -05:00
8 changed files with 35 additions and 16 deletions

View File

@@ -138,6 +138,7 @@
"disableEmailSubscriptions": 0,
"emailConfirmInterval": 10,
"removeEmailNotificationImages": 0,
"sendValidationEmail": 1,
"includeUnverifiedEmails": 0,
"emailPrompt": 1,
"inviteExpiration": 7,

View File

@@ -41,7 +41,7 @@
"chart.js": "^2.9.4",
"cli-graph": "^3.2.2",
"clipboard": "^2.0.6",
"colors": "^1.4.0",
"colors": "1.4.0",
"commander": "^7.1.0",
"compare-versions": "3.6.0",
"compression": "^1.7.4",

View File

@@ -38,7 +38,8 @@
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>",
"notifications.remove-images": "Remove images from email notifications",
"require-email-address": "Require new users to specify an email address",
"require-email-address-warning": "By default, users can opt-out of entering an email address. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"send-validation-email": "Send validation emails when an email is added or changed",
"include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails",
"include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). <strong>Enable this setting at your own risk</strong> &ndash; sending emails to unverified addresses may be a violation of regional anti-spam laws.",
"prompt": "Prompt users to enter or confirm their emails",

View File

@@ -285,7 +285,7 @@ define('forum/topic/threadTools', [
threadEl.find('[component="post"][data-uid="' + app.user.uid + '"].deleted [component="post/tools"]').toggleClass('hidden', isLocked);
$('.topic-header [component="topic/locked"]').toggleClass('hidden', !data.isLocked);
$('[component="topic/labels"] [component="topic/locked"]').toggleClass('hidden', !data.isLocked);
$('[component="post/tools"] .dropdown-menu').html('');
ajaxify.data.locked = data.isLocked;
@@ -334,7 +334,7 @@ define('forum/topic/threadTools', [
components.get('topic/pin').toggleClass('hidden', data.pinned).parent().attr('hidden', data.pinned ? '' : null);
components.get('topic/unpin').toggleClass('hidden', !data.pinned).parent().attr('hidden', !data.pinned ? '' : null);
const icon = $('.topic-header [component="topic/pinned"]');
const icon = $('[component="topic/labels"] [component="topic/pinned"]');
icon.toggleClass('hidden', !data.pinned);
if (data.pinned) {
icon.translateAttr('title', (

View File

@@ -6,7 +6,8 @@
"packageRules": [
{
"updateTypes": ["minor", "patch", "pin", "digest"],
"automerge": true
"automerge": true,
"excludePackageNames": ["colors"]
}
]
}

View File

@@ -50,10 +50,12 @@ module.exports = function (SocketCategories) {
};
async function findMatchedCids(uid, data) {
const params = { ...data, uid, paginate: false };
params.query = data.search;
params.qs = data.query;
const result = await categories.search(params);
const result = await categories.search({
uid: uid,
query: data.search,
qs: data.query,
paginate: false,
});
let matchedCids = result.categories.map(c => c.cid);
// no need to filter if all 3 states are used

View File

@@ -2,6 +2,7 @@
'use strict';
const nconf = require('nconf');
const winston = require('winston');
const user = require('./index');
const utils = require('../utils');
@@ -69,6 +70,11 @@ UserEmail.sendValidationEmail = async function (uid, options) {
* - force, sends email even if it is too soon to send another
*/
if (meta.config.sendValidationEmail !== 1) {
winston.verbose(`[user/email] Validation email for uid ${uid} not sent due to config settings`);
return;
}
options = options || {};
// Fallback behaviour (email passed in as second argument)
@@ -110,6 +116,7 @@ UserEmail.sendValidationEmail = async function (uid, options) {
await db.expireAt(`confirm:${confirm_code}`, Math.floor((Date.now() / 1000) + (60 * 60 * 24)));
const username = await user.getUserField(uid, 'username');
winston.verbose(`[user/email] Validation email for uid ${uid} sent to ${options.email}`);
events.log({
type: 'email-confirmation-sent',
uid,

View File

@@ -20,13 +20,6 @@
<input type="text" class="form-control input-lg" id="email:from_name" data-field="email:from_name" placeholder="NodeBB" /><br />
</div>
<div class="checkbox">
<label for="removeEmailNotificationImages" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" id="removeEmailNotificationImages" data-field="removeEmailNotificationImages" name="removeEmailNotificationImages" />
<span class="mdl-switch__label">[[admin/settings/email:notifications.remove-images]]</span>
</label>
</div>
<div class="checkbox">
<label for="requireEmailAddress" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" id="requireEmailAddress" data-field="requireEmailAddress" name="requireEmailAddress" />
@@ -35,6 +28,13 @@
</div>
<p class="help-block">[[admin/settings/email:require-email-address-warning]]</p>
<div class="checkbox">
<label for="sendValidationEmail" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" id="sendValidationEmail" data-field="sendValidationEmail" name="sendValidationEmail" />
<span class="mdl-switch__label">[[admin/settings/email:send-validation-email]]</span>
</label>
</div>
<div class="checkbox">
<label for="includeUnverifiedEmails" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" id="includeUnverifiedEmails" data-field="includeUnverifiedEmails" name="includeUnverifiedEmails" />
@@ -50,6 +50,13 @@
</label>
</div>
<p class="help-block">[[admin/settings/email:prompt-help]]</p>
<div class="checkbox">
<label for="removeEmailNotificationImages" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" id="removeEmailNotificationImages" data-field="removeEmailNotificationImages" name="removeEmailNotificationImages" />
<span class="mdl-switch__label">[[admin/settings/email:notifications.remove-images]]</span>
</label>
</div>
</form>
</div>
</div>