UNPKG

node-nlp

Version:

Library for NLU (Natural Language Understanding) done in Node.js

95 lines 3.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * @module botbuilder */ /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ const request = require("request"); // tslint:disable-next-line:no-var-requires no-require-imports const getPem = require('rsa-pem-from-mod-exp'); // tslint:disable-next-line:no-var-requires no-require-imports const base64url = require('base64url'); class OpenIdMetadata { constructor(url) { this.lastUpdated = 0; this.url = url; } getKey(keyId) { return new Promise((resolve, reject) => { // If keys are more than 5 days old, refresh them const now = new Date().getTime(); if (this.lastUpdated < (now - 1000 * 60 * 60 * 24 * 5)) { this.refreshCache((err) => { if (err) { //logger.error('Error retrieving OpenId metadata at ' + this.url + ', error: ' + err.toString()); // fall through and return cached key on error reject(err); } // Search the cache even if we failed to refresh const key = this.findKey(keyId); resolve(key); }); } else { // Otherwise read from cache const key = this.findKey(keyId); resolve(key); } }); } refreshCache(cb) { const options = { method: 'GET', url: this.url, json: true }; request(options, (err, response, body) => { if (!err && (response.statusCode && response.statusCode >= 400 || !body)) { err = new Error(`Failed to load openID config: ${response.statusCode}`); } if (err) { cb(err); } else { const openIdConfig = body; const get_key_options = { method: 'GET', url: openIdConfig.jwks_uri, json: true }; request(get_key_options, (get_key_error, get_key_response, get_key_body) => { if (!get_key_error && (get_key_response.statusCode && get_key_response.statusCode >= 400 || !get_key_body)) { get_key_error = new Error(`Failed to load Keys: ${get_key_response.statusCode}`); } if (!get_key_error) { this.lastUpdated = new Date().getTime(); this.keys = get_key_body.keys; } cb(get_key_error); }); } }); } findKey(keyId) { if (!this.keys) { return null; } for (const key of this.keys) { if (key.kid === keyId) { if (!key.n || !key.e) { // Return null for non-RSA keys return null; } const modulus = base64url.toBase64(key.n); const exponent = key.e; return { key: getPem(modulus, exponent), endorsements: key.endorsements }; } } return null; } } exports.OpenIdMetadata = OpenIdMetadata; //# sourceMappingURL=openIdMetadata.js.map