Skip to content

Commit

Permalink
Adds JWT refresh to http example. (#906)
Browse files Browse the repository at this point in the history
  • Loading branch information
gguuss authored Nov 2, 2017
1 parent edaf105 commit 476565a
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ public static void main(String[] args) throws Exception {

// Create the corresponding JWT depending on the selected algorithm.
String token;
DateTime iat = new DateTime();
if (options.algorithm.equals("RS256")) {
token = createJwtRsa(options.projectId, options.privateKeyFile);
} else if (options.algorithm.equals("ES256")) {
Expand All @@ -154,15 +155,28 @@ public static void main(String[] args) throws Exception {
"Invalid algorithm " + options.algorithm + ". Should be one of 'RS256' or 'ES256'.");
}

String urlPath = String.format("%s/%s/", options.httpBridgeAddress, options.apiVersion);
System.out.format("Using URL: '%s'\n", urlPath);

// Publish numMessages messages to the HTTP bridge.
for (int i = 1; i <= options.numMessages; ++i) {
String payload = String.format("%s/%s-payload-%d", options.registryId, options.deviceId, i);
System.out.format(
"Publishing %s message %d/%d: '%s'\n",
options.messageType, i, options.numMessages, payload);

String urlPath = String.format("%s/%s/", options.httpBridgeAddress, options.apiVersion);
System.out.format("Using URL: '%s'\n", urlPath);
// Refresh the authentication token if the token has expired.
long secsSinceRefresh = ((new DateTime()).getMillis() - iat.getMillis()) / 1000;
if (secsSinceRefresh > (options.tokenExpMins * 60)) {
System.out.format("\tRefreshing token after: %d seconds\n", secsSinceRefresh);
iat = new DateTime();

if (options.algorithm.equals("RS256")) {
token = createJwtRsa(options.projectId, options.privateKeyFile);
} else if (options.algorithm.equals("ES256")) {
token = createJwtEs(options.projectId, options.privateKeyFile);
}
}

publishMessage(payload, urlPath, options.messageType, token, options.projectId,
options.cloudRegion, options.registryId, options.deviceId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class HttpExampleOptions {
String algorithm;
String cloudRegion = "us-central1";
int numMessages = 100;
int tokenExpMins = 20;
String httpBridgeAddress = "https://cloudiot-device.googleapis.com";
String apiVersion = "v1beta1";
String messageType = "event";
Expand Down Expand Up @@ -94,6 +95,13 @@ public static HttpExampleOptions fromFlags(String[] args) {
.hasArg()
.desc("Number of messages to publish.")
.build());
options.addOption(
Option.builder()
.type(Number.class)
.longOpt("token_exp_minutes")
.hasArg()
.desc("Minutes to JWT token refresh (token expiration time).")
.build());
options.addOption(
Option.builder()
.type(String.class)
Expand Down Expand Up @@ -133,6 +141,10 @@ public static HttpExampleOptions fromFlags(String[] args) {
if (commandLine.hasOption("num_messages")) {
res.numMessages = ((Number) commandLine.getParsedOptionValue("num_messages")).intValue();
}
if (commandLine.hasOption("token_exp_minutes")) {
res.tokenExpMins =
((Number) commandLine.getParsedOptionValue("token_exp_minutes")).intValue();
}
if (commandLine.hasOption("http_bridge_address")) {
res.httpBridgeAddress = commandLine.getOptionValue("http_bridge_address");
}
Expand Down

0 comments on commit 476565a

Please sign in to comment.