Skip to content

Commit 8e2b651

Browse files
authored
Adds token refresh to HTTP example. (GoogleCloudPlatform#517)
* Adds token refresh to HTTP example. * Review feedback
1 parent 594525a commit 8e2b651

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

iot/http_example/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Options:
3434
Either RS256 (RSA) or ES256 (Eliptic Curve)
3535
--cloud_region [region] GCP cloud region
3636
--num_messages [num] Number of messages to publish.
37+
--token_exp_mins [num] Minutes to JWT token expiration.
3738
--http_bridge_address [address] HTTP bridge address.
3839
--message_type [events|state] The message type to publish.
3940

iot/http_example/cloudiot_http_example_nodejs.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ var argv = require(`yargs`)
6666
requiresArg: true,
6767
type: 'number'
6868
},
69+
token_exp_mins: {
70+
default: 20,
71+
description: 'Minutes to JWT token expiration.',
72+
requiresArg: true,
73+
type: 'number'
74+
},
6975
http_bridge_address: {
7076
default: 'cloudiot-device.googleapis.com',
7177
description: 'HTTP bridge address.',
@@ -145,6 +151,14 @@ function publishAsync (messageCount, numMessages) {
145151
// If we have published fewer than numMessage messages, publish payload
146152
// messageCount + 1.
147153
setTimeout(function () {
154+
let secsFromIssue = parseInt(Date.now() / 1000) - iatTime;
155+
if (secsFromIssue > argv.token_exp_mins * 60) {
156+
iatTime = parseInt(Date.now() / 1000);
157+
console.log(`\tRefreshing token after ${secsFromIssue} seconds.`);
158+
159+
authToken = createJwt(argv.project_id, argv.private_key_file, argv.algorithm);
160+
}
161+
148162
publishAsync(messageCount + 1, numMessages);
149163
}, delayMs);
150164
}
@@ -161,7 +175,8 @@ const devicePath = `projects/${argv.project_id}/locations/${argv.cloud_region}/r
161175
const pathSuffix = argv.message_type === 'events'
162176
? ':publishEvent' : ':setState';
163177
const url = `https://${argv.http_bridge_address}/v1beta1/${devicePath}${pathSuffix}`;
164-
const authToken = createJwt(argv.project_id, argv.private_key_file, argv.algorithm);
178+
let iatTime = parseInt(Date.now() / 1000);
179+
let authToken = createJwt(argv.project_id, argv.private_key_file, argv.algorithm);
165180

166181
// Publish messages.
167182
publishAsync(1, argv.num_messages);

0 commit comments

Comments
 (0)