Skip to content

Commit 1aeeae2

Browse files
committed
Implement own IAM Token retrieval
1 parent fefd686 commit 1aeeae2

File tree

4 files changed

+60
-28
lines changed

4 files changed

+60
-28
lines changed

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ Node-RED Watson Nodes for IBM Cloud
88
<a href="https://cla-assistant.io/watson-developer-cloud/node-red-node-watson"><img src="https://cla-assistant.io/readme/badge/watson-developer-cloud/node-red-node-watson" alt="CLA assistant" /></a>
99

1010
### New in version 0.7.0
11-
- Assistant, Discovery, Natural Language Understanding, Personality Insights,
11+
- In this release STT in Stream mode with IAM Keys does not work.
12+
- Assistant, Discovery, Language Identify, Language Translator,
13+
Natural Language Understanding, Personality Insights,
1214
Speech to Text, Text to Speech, Tone Analyzer nodes updated
13-
to allow for use of iam key for authentication.
15+
to allow for use of IAM key for authentication.
1416
- Migrated STT node off deprecated methods.
1517
- Fix to Tone Analyzer Node to preserve credentials on config reopen.
1618
- Fix to Tone Analyzer to allow json objects and arrays as payload.
1719
- Fix to STT where auto-connect was not being preserved when reopening configuration.
1820
- Bump to 2018-03-05 version date for Discovery service.
21+
- Move to V3 of Language Translator
1922
- Migrated Discovery Nodes off deprecated methods.
2023
- Remove Deprecated Retrieve and Rank Nodes
2124

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"temp": "^0.8.3",
1111
"qs": "6.x",
1212
"image-type": "^2.0.2",
13-
"watson-developer-cloud": "^3.4.5",
13+
"watson-developer-cloud": "^3.5.0",
1414
"kuromoji": "^0.1.1",
1515
"word-count": "^0.2.2",
1616
"is-docx": "^0.0.3",
@@ -40,9 +40,9 @@
4040
"watson-discovery-v1": "services/discovery/v1.js",
4141
"watson-discovery-v1-document-loader": "services/discovery/v1-document-loader.js",
4242
"watson-discovery-v1-query-builder": "services/discovery/v1-query-builder.js",
43-
"watson-language-translator-v2": "services/language_translator/v2.js",
44-
"watson-language-translator-identify-v2": "services/language_translator_identify/v2.js",
45-
"watson-language-translator-util-v2": "services/language_translator_util/v2.js",
43+
"watson-language-translator-v3": "services/language_translator/v3.js",
44+
"watson-language-translator-identify-v3": "services/language_translator_identify/v3.js",
45+
"watson-language-translator-util-v3": "services/language_translator_util/v3.js",
4646
"watson-natural-language-classifier-v1": "services/natural_language_classifier/v1.js",
4747
"watson-natural-language-understanding-v1": "services/natural_language_understanding/v1.js",
4848
"watson-personality-insights-v3": "services/personality_insights/v3.js",

services/speech_to_text/v1.js

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -272,17 +272,21 @@ module.exports = function (RED) {
272272
function getService() {
273273
var p = new Promise(function resolver(resolve, reject){
274274
let sttService = determineService();
275-
if (apikey) {
276-
sttService.preAuthenticate((ready) => {
277-
if (!ready) {
278-
reject('Service is not ready');
279-
} else {
280-
resolve(sttService);
281-
}
282-
});
283-
} else {
284-
resolve(sttService);
285-
}
275+
// preAuthenticate was a temp fix, but now that we are
276+
// processing IAM Keys directly, no need for this, but
277+
// we will keep the commented out code for now, as we
278+
// may come back to this.
279+
// if (apikey) {
280+
// sttService.preAuthenticate((ready) => {
281+
// if (!ready) {
282+
// reject('Service is not ready');
283+
// } else {
284+
// resolve(sttService);
285+
// }
286+
// });
287+
// } else {
288+
resolve(sttService);
289+
// }
286290
});
287291
return p;
288292
}
@@ -298,7 +302,9 @@ module.exports = function (RED) {
298302
// creds.iamApikey = apikey;
299303
// console.log('Creating token with endpoint ', endpoint);
300304
// tokenService = new AuthIAMV1.IamTokenManagerV1({iamApikey : apikey, iamUrl: endpoint});
305+
301306
tokenService = new AuthIAMV1.IamTokenManagerV1({iamApikey : apikey});
307+
//tokenService = new iamutils(apikey);
302308

303309
} else {
304310
// console.log('Standard Key');
@@ -336,7 +342,7 @@ module.exports = function (RED) {
336342
let requestSettings = {
337343
qs : cloneQS(params),
338344
method : 'POST',
339-
uri : endpoint + '/recognize',
345+
uri : endpoint + '/v1/recognize',
340346
headers : {
341347
//Authorization: "Bearer " + t,
342348
'Content-Type': params.content_type,
@@ -356,7 +362,7 @@ module.exports = function (RED) {
356362
function executePostRequest(requestSettings) {
357363
var p = new Promise(function resolver(resolve, reject){
358364
request(requestSettings, (error, response, body) => {
359-
console.log('--------- request has been executed ---------------');
365+
//console.log('--------- request has been executed ---------------');
360366

361367
if (!error && response.statusCode == 200) {
362368
data = JSON.parse(body);
@@ -371,6 +377,8 @@ module.exports = function (RED) {
371377
errordata.errors.length &&
372378
errordata.errors[0].message) {
373379
reject('Error ' + response.statusCode + ' ' + errordata.errors[0].message);
380+
} else if (errordata.error) {
381+
reject('Error performing request ' + errordata.error);
374382
} else {
375383
reject('Error performing request ' + response.statusCode);
376384
}
@@ -392,7 +400,6 @@ module.exports = function (RED) {
392400
return buildRequestSettings(params, t);
393401
})
394402
.then((requestSettings) => {
395-
//console.log('Request parameters look like ', requestSettings);
396403
return executePostRequest(requestSettings);
397404
})
398405
.then((data) => {
@@ -430,13 +437,23 @@ module.exports = function (RED) {
430437
}
431438

432439
// Everything is now in place to invoke the service
433-
speech_to_text.recognize(params, function (err, res) {
434-
if (err) {
440+
if (apikey) {
441+
iamRecognize(params)
442+
.then((data) => {
443+
resolve(data);
444+
})
445+
.catch((err) => {
435446
reject(err);
436-
} else {
437-
resolve(res);
438-
}
447+
})
448+
} else {
449+
speech_to_text.recognize(params, function (err, res) {
450+
if (err) {
451+
reject(err);
452+
} else {
453+
resolve(res);
454+
}
439455
});
456+
}
440457

441458
});
442459
return p;
@@ -466,7 +483,7 @@ module.exports = function (RED) {
466483
tokenPending = false;
467484
tokenTime = now;
468485
token = res;
469-
// console.log('We have the token ', token);
486+
//console.log('We have the token ', token);
470487
resolve();
471488
}
472489
});
@@ -495,7 +512,7 @@ module.exports = function (RED) {
495512
+ '?watson-token=' + token + '&model=' + model;
496513
}
497514

498-
// console.log('wsURI is : ', wsURI);
515+
//console.log('wsURI is : ', wsURI);
499516

500517
if (!websocket && !socketCreationInProcess) {
501518
socketCreationInProcess = true;

utilities/iam-utils.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,18 @@ const request = require('request');
2323

2424
class IAMUtils {
2525

26-
constructor() {
26+
constructor(key) {
27+
this._key = key;
28+
}
29+
30+
getToken(cb) {
31+
IAMUtils.getIAMToken(this._key)
32+
.then((token) => {
33+
cb(null, token);
34+
})
35+
.catch((err) => {
36+
cb(err, null);
37+
});
2738
}
2839

2940
static stashToken(key, tokenInfo) {
@@ -97,6 +108,7 @@ class IAMUtils {
97108
return p;
98109
}
99110

111+
100112
static getIAMToken(key) {
101113
var p = new Promise(function resolver(resolve, reject){
102114
IAMUtils.lookInStash(key)

0 commit comments

Comments
 (0)