From dd696d49ac8ee8a38fe70e1c93430c411c4d12d7 Mon Sep 17 00:00:00 2001
From: Andreas Teuber
Date: Tue, 23 Oct 2018 15:51:54 +0200
Subject: [PATCH 1/2] Added API call to change the email address of an existing
list subscriber
---
routes/api.js | 107 ++++++++++++++++++++++++++++++++++++++++++++
views/users/api.hbs | 30 ++++++++++++-
2 files changed, 136 insertions(+), 1 deletion(-)
diff --git a/routes/api.js b/routes/api.js
index 1e4fb70d..1f13ba1f 100644
--- a/routes/api.js
+++ b/routes/api.js
@@ -524,4 +524,111 @@ router.get('/blacklist/get', (req, res) => {
});
});
+router.post('/changeemail/:listId', (req, res) => {
+ let input = {};
+ Object.keys(req.body).forEach(key => {
+ input[(key || '').toString().trim().toUpperCase()] = (req.body[key] || '').toString().trim();
+ });
+ if (!(input.EMAILOLD) || (input.EMAILOLD === '')) {
+ res.status(500);
+ return res.json({
+ error: 'EMAILOLD argument is required',
+ data: []
+ });
+ }
+ if (!(input.EMAILNEW) || (input.EMAILNEW === '')) {
+ res.status(500);
+ return res.json({
+ error: 'EMAILNEW argument is required',
+ data: []
+ });
+ }
+ lists.getByCid(req.params.listId, (err, list) => {
+ if (err) {
+ log.error('API', err);
+ res.status(500);
+ return res.json({
+ error: err.message || err,
+ data: []
+ });
+ }
+ if (!list) {
+ res.status(404);
+ return res.json({
+ error: 'Selected listId not found',
+ data: []
+ });
+ }
+ blacklist.isblacklisted(input.EMAILNEW, (err, blacklisted) =>{
+ if (err) {
+ res.status(500);
+ return res.json({
+ error: err.message || err,
+ data: []
+ });
+ }
+ if (blacklisted) {
+ res.status(500);
+ return res.json({
+ error: 'New email is blacklisted',
+ data: []
+ });
+ }
+
+ subscriptions.getByEmail(list.id, input.EMAILOLD, (err, subscription) => {
+ if (err) {
+ res.status(500);
+ return res.json({
+ error: err.message || err,
+ data: []
+ });
+ }
+
+ if (!subscription) {
+ res.status(404);
+ return res.json({
+ error: 'Subscription with given old email not found',
+ data: []
+ });
+ }
+
+ subscriptions.updateAddressCheck(list, subscription.cid, input.EMAILNEW, null, (err, old, valid) => {
+ if (err) {
+ res.status(500);
+ return res.json({
+ error: err.message || err,
+ data: []
+ });
+ }
+
+ if (!valid) {
+ res.status(500);
+ return res.json({
+ error: 'New email not valid',
+ data: []
+ });
+ }
+
+ subscriptions.updateAddress(list.id, subscription.id, input.EMAILNEW, (err) => {
+ if (err) {
+ res.status(500);
+ return res.json({
+ error: err.message || err,
+ data: []
+ });
+ }
+ res.status(200);
+ res.json({
+ data: {
+ id: subscription.id,
+ changedemail: true
+ }
+ });
+ });
+ });
+ });
+ });
+ });
+});
+
module.exports = router;
diff --git a/views/users/api.hbs b/views/users/api.hbs
index db51df39..bd025a80 100644
--- a/views/users/api.hbs
+++ b/views/users/api.hbs
@@ -333,4 +333,32 @@
{{#translate}}Example{{/translate}}
-curl -XGET '{{serviceUrl}}api/list/1?access_token={{accessToken}}'
\ No newline at end of file
+curl -XGET '{{serviceUrl}}api/list/1?access_token={{accessToken}}'
+
+POST /api/changeemail/:listId – {{#translate}}Change email of existing list subscriber{{/translate}}
+
+
+ {{#translate}}This API call changes the email address of an existing list subscriber.{{/translate}}
+
+
+
+ GET {{#translate}}arguments{{/translate}}
+
+
+ - access_token – {{#translate}}your personal access token{{/translate}}
+
+
+
+ POST {{#translate}}arguments{{/translate}}
+
+
+ - EMAILOLD – {{#translate}}subscriber's old email address{{/translate}} ({{#translate}}required{{/translate}})
+
- EMAILNEW – {{#translate}}subscriber's new email address{{/translate}} ({{#translate}}required{{/translate}})
+
+
+
+ {{#translate}}Example{{/translate}}
+
+
+curl -XPOST {{serviceUrl}}api/changeemail/B16uVTdW?access_token={{accessToken}} \
+--data 'EMAILOLD=test@example.com&EMAILNEW=foo@bar.com'
From d5ce6a5d33da229f793f04621515b894052484d4 Mon Sep 17 00:00:00 2001
From: Andreas Teuber
Date: Tue, 23 Oct 2018 17:01:08 +0200
Subject: [PATCH 2/2] Fix Travis
---
lib/models/segments.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/models/segments.js b/lib/models/segments.js
index 209f12e7..a2e891f9 100644
--- a/lib/models/segments.js
+++ b/lib/models/segments.js
@@ -574,11 +574,12 @@ module.exports.getQuery = (id, prefix, callback) => {
segment.rules.forEach(rule => {
switch (rule.columnType.type) {
- case 'string':
+ case 'string': {
let condition = rule.value.negate ? 'NOT LIKE' : 'LIKE';
query.push(prefix + '`' + rule.columnType.column + '` ' + condition + ' ?');
values.push(rule.value.value);
break;
+ }
case 'boolean':
query.push(prefix + '`' + rule.columnType.column + '` = ?');
values.push(rule.value.value);