"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GoogleCloudPlatformAuth = void 0; const tslib_1 = require("tslib"); const proc = tslib_1.__importStar(require("child_process")); const jsonpath = tslib_1.__importStar(require("jsonpath-plus")); class GoogleCloudPlatformAuth { isAuthProvider(user) { if (!user || !user.authProvider) { return false; } return user.authProvider.name === 'gcp'; } async applyAuthentication(user, opts) { const token = this.getToken(user); if (token) { opts.headers.Authorization = `Bearer ${token}`; } } getToken(user) { const config = user.authProvider.config; if (this.isExpired(config)) { this.updateAccessToken(config); } return config['access-token']; } isExpired(config) { const token = config['access-token']; const expiry = config.expiry; if (!token) { return true; } if (!expiry) { return false; } const expiration = Date.parse(expiry); if (expiration < Date.now()) { return true; } return false; } updateAccessToken(config) { let cmd = config['cmd-path']; if (!cmd) { throw new Error('Token is expired!'); } // Wrap cmd in quotes to make it cope with spaces in path cmd = `"${cmd}"`; const args = config['cmd-args']; if (args) { cmd = cmd + ' ' + args; } // TODO: Cache to file? // TODO: do this asynchronously let output; try { output = proc.execSync(cmd); } catch (err) { throw new Error('Failed to refresh token: ' + err.message); } const resultObj = JSON.parse(output); const tokenPathKeyInConfig = config['token-key']; const expiryPathKeyInConfig = config['expiry-key']; // Format in file is {}, so slice it out and add '$' const tokenPathKey = '$' + tokenPathKeyInConfig.slice(1, -1); const expiryPathKey = '$' + expiryPathKeyInConfig.slice(1, -1); config['access-token'] = jsonpath.JSONPath(tokenPathKey, resultObj); config.expiry = jsonpath.JSONPath(expiryPathKey, resultObj); } } exports.GoogleCloudPlatformAuth = GoogleCloudPlatformAuth; //# sourceMappingURL=gcp_auth.js.map