Update actions to use Promises
diff --git a/.gitignore b/.gitignore
index 11cd881..f72542e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,5 @@
+# Gradle
+.gradle
+build/
tests/credentials.json
openwhisk
diff --git a/packages/actions/sendMessage.js b/packages/actions/sendMessage.js
index 798f30f..0343b8b 100644
--- a/packages/actions/sendMessage.js
+++ b/packages/actions/sendMessage.js
@@ -43,153 +43,154 @@
var https = require('https');
function main(params) {
- validateParams(params);
+ if (validateParams(params)) {
- var appId = params.appId;
- var appSecret = params.appSecret;
+ var appId = params.appId;
+ var appSecret = params.appSecret;
- // message section settings
- var messageUrl = params.url;
- var messageText = params.text;
+ // message section settings
+ var messageUrl = params.url;
+ var messageText = params.text;
- // target section settings -- each param should be an array of string
- var targetDeviceIds = params.deviceIds;
- var targetPlatforms = params.platforms;
- var targetTagNames = params.tagNames;
+ // target section settings -- each param should be an array of string
+ var targetDeviceIds = params.deviceIds;
+ var targetPlatforms = params.platforms;
+ var targetTagNames = params.tagNames;
- // apns settings
- var apnsBadge = params.apnsBadge; // should be an int
- var apnsCategory = params.apnsCategory;
- var apnsActionKeyTitle = params.apnsIosActionKey;
- var apnsSound = params.apnsSound;
- var apnsPayload = params.apnsPayload;
- var apnsType = params.apnsType;
+ // apns settings
+ var apnsBadge = params.apnsBadge; // should be an int
+ var apnsCategory = params.apnsCategory;
+ var apnsActionKeyTitle = params.apnsIosActionKey;
+ var apnsSound = params.apnsSound;
+ var apnsPayload = params.apnsPayload;
+ var apnsType = params.apnsType;
- // gcm settings
- var gcmCollapseKey = params.gcmCollapseKey;
- var gcmDelayWhileIdle = params.gcmDelayWhileIdle;
- var gcmPayload = params.gcmPayload;
- var gcmPriority = params.gcmPriority;
- var gcmSound = params.gcmSound;
- var timeToLive = params.gcmTimeToLive;
+ // gcm settings
+ var gcmCollapseKey = params.gcmCollapseKey;
+ var gcmDelayWhileIdle = params.gcmDelayWhileIdle;
+ var gcmPayload = params.gcmPayload;
+ var gcmPriority = params.gcmPriority;
+ var gcmSound = params.gcmSound;
+ var timeToLive = params.gcmTimeToLive;
- var sendMessage = {}
+ var sendMessage = {};
- // create message section
- var message = {}
- if (messageText) {
- message.alert = messageText;
- }
- if (messageUrl) {
- message.url = messageUrl;
- }
+ // create message section
+ var message = {};
+ if (messageText) {
+ message.alert = messageText;
+ }
+ if (messageUrl) {
+ message.url = messageUrl;
+ }
- if (isEmpty(message)) {
- whisk.error("No message to send");
- return {message: "IBM Push Notifications action: no message body text or url"};
- } else {
- sendMessage.message = message;
- }
+ if (isEmpty(message)) {
+ whisk.error("No message to send");
+ return {message: "IBM Push Notifications action: no message body text or url"};
+ } else {
+ sendMessage.message = message;
+ }
- // create target section
- var target = {};
- if (targetDeviceIds) {
- target.deviceIds = targetDeviceIds;
- }
- if (targetPlatforms) {
- target.platforms = targetPlatforms;
- }
- if (targetTagNames) {
- target.tagNames = targetTagNames;
- }
+ // create target section
+ var target = {};
+ if (targetDeviceIds) {
+ target.deviceIds = targetDeviceIds;
+ }
+ if (targetPlatforms) {
+ target.platforms = targetPlatforms;
+ }
+ if (targetTagNames) {
+ target.tagNames = targetTagNames;
+ }
- if (isEmpty(target)) {
- console.log("No target set, broadcasting message to all registered devices");
- } else {
- sendMessage.target = target;
- }
+ if (isEmpty(target)) {
+ console.log("No target set, broadcasting message to all registered devices");
+ } else {
+ sendMessage.target = target;
+ }
- // create apns settings section
- var apns = {};
- if (apnsBadge) {
- apns.badge = apnsBadge;
- }
- if (apnsCategory) {
- apns.category = apnsCategory;
- }
- if (apnsActionKeyTitle) {
- apns.iosActionKey = apnsActionKeyTitle;
- }
- if (apnsSound) {
- apns.sound = apnsSound;
- }
- if (apnsType) {
- apns.type = apnsType;
- }
- if (apnsPayload) {
- apns.payload = apnsPayload;
- }
+ // create apns settings section
+ var apns = {};
+ if (apnsBadge) {
+ apns.badge = apnsBadge;
+ }
+ if (apnsCategory) {
+ apns.category = apnsCategory;
+ }
+ if (apnsActionKeyTitle) {
+ apns.iosActionKey = apnsActionKeyTitle;
+ }
+ if (apnsSound) {
+ apns.sound = apnsSound;
+ }
+ if (apnsType) {
+ apns.type = apnsType;
+ }
+ if (apnsPayload) {
+ apns.payload = apnsPayload;
+ }
- if (!isEmpty(apns)) {
- sendMessage.settings = {};
- sendMessage.settings.apns = apns;
- }
-
- // create gcm settings section
- var gcm = {};
- if (gcmCollapseKey) {
- gcm.collapseKey = gcmCollapseKey;
- }
- if (gcmDelayWhileIdle) {
- gcm.delayWhileIdle = gcmDelayWhileIdle;
- }
- if (gcmPayload) {
- gcm.payload = gcmPayload;
- }
- if (gcmPriority ) {
- gcm.priority = gcmPriority;
- }
- if (gcmSound) {
- gcm.sound = gcmSound;
- }
- if (timeToLive) {
- gcm.timeToLive = timeToLive;
- }
-
- if (!isEmpty(gcm)) {
- if (!sendMessage.settings) {
+ if (!isEmpty(apns)) {
sendMessage.settings = {};
+ sendMessage.settings.apns = apns;
}
- sendMessage.settings.gcm = gcm;
+
+ // create gcm settings section
+ var gcm = {};
+ if (gcmCollapseKey) {
+ gcm.collapseKey = gcmCollapseKey;
+ }
+ if (gcmDelayWhileIdle) {
+ gcm.delayWhileIdle = gcmDelayWhileIdle;
+ }
+ if (gcmPayload) {
+ gcm.payload = gcmPayload;
+ }
+ if (gcmPriority) {
+ gcm.priority = gcmPriority;
+ }
+ if (gcmSound) {
+ gcm.sound = gcmSound;
+ }
+ if (timeToLive) {
+ gcm.timeToLive = timeToLive;
+ }
+
+ if (!isEmpty(gcm)) {
+ if (!sendMessage.settings) {
+ sendMessage.settings = {};
+ }
+ sendMessage.settings.gcm = gcm;
+ }
+
+ var bodyData = JSON.stringify(sendMessage);
+ var request = require('request');
+ var promise = new Promise(function (resolve, reject) {
+ request({
+ method: 'post',
+ uri: 'https://mobile.ng.bluemix.net/imfpush/v1/apps/' + appId + '/messages',
+ headers: {
+ 'appSecret': appSecret,
+ 'Accept': 'application/json',
+ 'Accept-Language': 'en-US',
+ 'Content-Type': 'application/json',
+ 'Content-Length': bodyData.length
+ },
+ body: bodyData
+ }, function (error, response, body) {
+ if (error) {
+ reject(error);
+ }
+ var j = JSON.parse(body);
+ resolve(j);
+ });
+ });
+ return promise;
}
-
- var bodyData = JSON.stringify(sendMessage);
- var request = require('request');
- request({
- method: 'post',
- uri: 'https://mobile.ng.bluemix.net/imfpush/v1/apps/'+appId+'/messages',
- headers :{
- 'appSecret': appSecret,
- 'Accept': 'application/json',
- 'Accept-Language': 'en-US',
- 'Content-Type': 'application/json',
- 'Content-Length': bodyData.length
- },
- body:bodyData
- }, function(error, response, body) {
-
- if(error){
- return whisk.error();
- }
- var j = JSON.parse(body)
- return whisk.done(j);
- // return whisk.done({pushResponse: JSON.stringify(body, undefined, 4)});
- });
- return whisk.async();
}
function isEmpty(obj) {
- if (obj == null) return true;
+ if (obj === null) return true;
if (obj.length > 0) return false;
if (obj.length === 0) return true;
for (var key in obj) {
@@ -202,10 +203,11 @@
function validateParams(params) {
if (!params.appId) {
whisk.error('appId / appGUID of the application is required.');
- return;
+ return false;
}
if (!params.appSecret) {
whisk.error('appSecret of the application is required.');
- return;
+ return false;
}
+ return true;
}
diff --git a/packages/feeds/webhook.js b/packages/feeds/webhook.js
index 8f5819c..e066f04 100644
--- a/packages/feeds/webhook.js
+++ b/packages/feeds/webhook.js
@@ -55,14 +55,17 @@
'Content-Type': 'application/json'
}
};
- request(options, function(error, response, body){
- if (error) {
- return whisk.error();
- }
- return whisk.done({response: body});
+ var promise = new Promise(function(resolve, reject) {
+ request(options, function (error, response, body) {
+ if (error) {
+ reject(error);
+ }
+ resolve({response: body});
+ });
});
- }
- if (lifecycleEvent === 'DELETE') {
+
+ return promise;
+ } else if (lifecycleEvent === 'DELETE') {
var options = {
method: 'DELETE',
url: registrationEndpoint,
@@ -70,14 +73,17 @@
'appSecret': appSecret
}
};
- request(options, function(error, response, body) {
- if (error) {
- return whisk.error();
- }
- return whisk.done({response: body});
+ var promise = new Promise(function(resolve, reject) {
+ request(options, function (error, response, body) {
+ if (error) {
+ reject(error);
+ }
+ resolve({response: body});
+ });
});
+
+ return promise;
}
- return whisk.async();
}
function parseQName(qname) {
diff --git a/tools/travis/build.sh b/tools/travis/build.sh
index 2233ade..4ca9ba4 100755
--- a/tools/travis/build.sh
+++ b/tools/travis/build.sh
@@ -25,7 +25,6 @@
$ANSIBLE_CMD wipe.yml
$ANSIBLE_CMD openwhisk.yml
-$ANSIBLE_CMD postdeploy.yml
cd $WHISKDIR
@@ -41,6 +40,9 @@
EDGE_HOST=$(grep '^edge.host=' $WHISKPROPS_FILE | cut -d'=' -f2)
WSK_NAMESPACE=/whisk.system
+# Set Environment
+export OPENWHISK_HOME=$WHISKDIR
+
# Install the package
source $ROOTDIR/packages/installCatalog.sh $AUTH_KEY $EDGE_HOST $WSK_NAMESPACE $WSK_CLI