79 строки
2.4 KiB
JavaScript
79 строки
2.4 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
var config = require('../config')
|
|
var P = require('./promise')
|
|
var reminderConfig = config.get('verificationReminders')
|
|
|
|
var LOG_REMINDERS_CREATED = 'verification-reminders.created'
|
|
var LOG_REMINDERS_DELETED = 'verification-reminders.deleted'
|
|
var LOG_REMINDERS_ERROR_CREATE = 'verification-reminder.create'
|
|
var LOG_REMINDERS_ERROR_DELETE = 'verification-reminder.delete'
|
|
|
|
module.exports = function (log, db) {
|
|
/**
|
|
* shouldRemind
|
|
*
|
|
* Determines if we should create a reminder for this user to verify their account.
|
|
*
|
|
* @returns {boolean}
|
|
*/
|
|
function shouldRemind() {
|
|
// random between 0 and 100, inclusive
|
|
var rand = Math.floor(Math.random() * (100 + 1))
|
|
return rand < (reminderConfig.rate * 100)
|
|
}
|
|
|
|
return {
|
|
/**
|
|
* Create a new reminder
|
|
* @param reminderData
|
|
* @param {string} reminderData.uid - The uid to remind.
|
|
*/
|
|
create: function createReminder(reminderData) {
|
|
if (! shouldRemind()) {
|
|
// resolves if not part of the verification roll out
|
|
return P.resolve(false)
|
|
}
|
|
|
|
reminderData.type = 'first'
|
|
var firstReminder = db.createVerificationReminder(reminderData)
|
|
reminderData.type = 'second'
|
|
var secondReminder = db.createVerificationReminder(reminderData)
|
|
|
|
return P.all([firstReminder, secondReminder])
|
|
.then(
|
|
function () {
|
|
log.increment(LOG_REMINDERS_CREATED)
|
|
},
|
|
function (err) {
|
|
log.error({ op: LOG_REMINDERS_ERROR_CREATE, err: err })
|
|
}
|
|
)
|
|
},
|
|
/**
|
|
* Delete the reminder. Used if the user verifies their account.
|
|
*
|
|
* @param reminderData
|
|
* @param {string} reminderData.uid - The uid for the reminder.
|
|
*/
|
|
'delete': function deleteReminder(reminderData) {
|
|
reminderData.type = 'first'
|
|
var firstReminder = db.deleteVerificationReminder(reminderData)
|
|
reminderData.type = 'second'
|
|
var secondReminder = db.deleteVerificationReminder(reminderData)
|
|
|
|
return P.all([firstReminder, secondReminder])
|
|
.then(
|
|
function () {
|
|
log.increment(LOG_REMINDERS_DELETED)
|
|
},
|
|
function (err) {
|
|
log.error({ op: LOG_REMINDERS_ERROR_DELETE, err: err })
|
|
}
|
|
)
|
|
}
|
|
}
|
|
}
|