guestissuer
Version:
CLI to create JWT tokens and Webex API access tokens for 'Permanent Guest'
84 lines (68 loc) • 2.71 kB
JavaScript
//
// Copyright (c) 2017 Cisco Systems
// Licensed under the MIT License
//
const debug = require('debug')('guest:util');
//
// Builds a Guest Token from the specifed user info
//
module.exports.createGuestToken = function (issuer, secret, userid, username, expiresInSeconds) {
debug(`generating Guest token for user with id: ${userid}, name: ${username}, in Guest Issuer: ${issuer}`);
try {
// sign with HMAC SHA256
const jwt = require('jsonwebtoken');
const payload = {
"sub": userid,
"name": username,
"iss": issuer,
"exp": expiresInSeconds
};
const decoded = Buffer.from(secret, 'base64');
const guestToken = jwt.sign(payload, decoded, { algorithm: 'HS256', noTimestamp: true });
debug("successfully built Guest token: " + guestToken.substring(0,30));
return guestToken;
}
catch (err) {
console.error("failed to generate a Guest token, exiting...");
debug("err: " + err.message);
process.exit(1);
}
}
//
// Request an access token for the specified Guest User's Issuer Token
//
module.exports.fetchToken = function (guestToken) {
debug("requesting new access token");
debug('contacting Webex API endpoint: /jwt/login');
const axios = require('axios');
axios.post('https://api.ciscospark.com/v1/jwt/login', '',
{ headers: { 'Authorization': 'Bearer ' + guestToken } })
.then(response => {
if (!response.data || !response.data.token) {
debug("no token found in response: " + response);
console.log("failed to generate an access token: bad response");
console.log("exiting...");
process.exit(1);
}
let accessToken = response.data.token;
console.log(`Here is an access token, valid for: ${response.data.expiresIn} seconds`);
console.log(accessToken);
})
.catch(err => {
switch (err.code) {
case 'ENOTFOUND':
debug("could not contact the Webex API");
break
default:
debug("error accessing /jwt/login, err: " + err.message);
if (err.response && (err.response.status >= 400) && (err.response.status < 500)) {
console.log(`Invalid Guest token: ${err.response.data.message}`);
process.exit(1);
}
break;
}
console.log("failed to generate an access token");
console.log("exiting...");
process.exit(1);
})
}