overleaf/services/web/app/src/Features/Notifications/NotificationsBuilder.js
Eric Mc Sween 00bdc52fab Merge pull request #2840 from overleaf/jel-sso-redundant-subscription-notification
Redundant subscription notification if entitlement via SSO

GitOrigin-RevId: 8529204e78c3a43d87acbb375fea15c62cad48a3
2020-05-21 03:22:51 +00:00

206 lines
5.2 KiB
JavaScript

/* eslint-disable
camelcase,
max-len,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const NotificationsHandler = require('./NotificationsHandler')
const { promisifyAll } = require('../../util/promises')
const request = require('request')
const settings = require('settings-sharelatex')
function featuresUpgradedByAffiliation(affiliation, user) {
return {
key: `features-updated-by=${affiliation.institutionId}`,
create(callback) {
if (callback == null) {
callback = function() {}
}
const messageOpts = { institutionName: affiliation.institutionName }
return NotificationsHandler.createNotification(
user._id,
this.key,
'notification_features_upgraded_by_affiliation',
messageOpts,
null,
false,
callback
)
},
read(callback) {
if (callback == null) {
callback = function() {}
}
return NotificationsHandler.markAsReadByKeyOnly(this.key, callback)
}
}
}
function redundantPersonalSubscription(affiliation, user) {
return {
key: `redundant-personal-subscription-${affiliation.institutionId}`,
create(callback) {
if (callback == null) {
callback = function() {}
}
const messageOpts = { institutionName: affiliation.institutionName }
return NotificationsHandler.createNotification(
user._id,
this.key,
'notification_personal_subscription_not_required_due_to_affiliation',
messageOpts,
null,
false,
callback
)
},
read(callback) {
if (callback == null) {
callback = function() {}
}
return NotificationsHandler.markAsReadByKeyOnly(this.key, callback)
}
}
}
function projectInvite(invite, project, sendingUser, user) {
return {
key: `project-invite-${invite._id}`,
create(callback) {
if (callback == null) {
callback = function() {}
}
const messageOpts = {
userName: sendingUser.first_name,
projectName: project.name,
projectId: project._id.toString(),
token: invite.token
}
return NotificationsHandler.createNotification(
user._id,
this.key,
'notification_project_invite',
messageOpts,
invite.expires,
callback
)
},
read(callback) {
if (callback == null) {
callback = function() {}
}
return NotificationsHandler.markAsReadByKeyOnly(this.key, callback)
}
}
}
function ipMatcherAffiliation(userId) {
return {
create(ip, callback) {
if (callback == null) {
callback = function() {}
}
if (!settings.apis.v1.url) {
return null
} // service is not configured
return request(
{
method: 'GET',
url: `${settings.apis.v1.url}/api/v2/users/${userId}/ip_matcher`,
auth: { user: settings.apis.v1.user, pass: settings.apis.v1.pass },
body: { ip },
json: true,
timeout: 20 * 1000
},
function(error, response, body) {
if (error != null) {
return error
}
if (response.statusCode !== 200) {
return null
}
const key = `ip-matched-affiliation-${body.id}`
const messageOpts = {
university_name: body.name,
content: body.enrolment_ad_html
}
return NotificationsHandler.createNotification(
userId,
key,
'notification_ip_matched_affiliation',
messageOpts,
null,
false,
callback
)
}
)
},
read(university_id, callback) {
if (callback == null) {
callback = function() {}
}
const key = `ip-matched-affiliation-${university_id}`
return NotificationsHandler.markAsReadWithKey(userId, key, callback)
}
}
}
function tpdsFileLimit(user_id) {
return {
key: `tpdsFileLimit-${user_id}`,
create(projectName, callback) {
if (callback == null) {
callback = function() {}
}
const messageOpts = {
projectName: projectName
}
return NotificationsHandler.createNotification(
user_id,
this.key,
'notification_tpds_file_limit',
messageOpts,
null,
true,
callback
)
},
read(callback) {
if (callback == null) {
callback = function() {}
}
return NotificationsHandler.markAsReadByKeyOnly(this.key, callback)
}
}
}
const NotificationsBuilder = {
// Note: notification keys should be url-safe
featuresUpgradedByAffiliation,
redundantPersonalSubscription,
projectInvite,
ipMatcherAffiliation,
tpdsFileLimit
}
NotificationsBuilder.promises = {
redundantPersonalSubscription: function(affiliation, user) {
return promisifyAll(redundantPersonalSubscription(affiliation, user))
}
}
module.exports = NotificationsBuilder