UNPKG

kui-shell

Version:

This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool

81 lines 3.9 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const debug_1 = require("debug"); const auth_1 = require("../model/auth"); const debug = debug_1.default('k8s/controller/auth'); const usage = { add: { command: 'kubectl auth add', strict: 'kubectl auth add', docs: 'Add a cluster config', example: 'kubectl auth add' } }; const add = ({ block, nextBlock, tab }) => __awaiter(void 0, void 0, void 0, function* () { const { UI } = yield Promise.resolve().then(() => require('@kui-shell/core')); return UI.LowLevel.prompt('kubectl auth add', block, nextBlock, tab, { placeholder: 'Paste the contents of your kubeconfig: cat $KUBECONFIG', onpaste: 'capture' }, ({ field: kubeconfigString }) => { if (kubeconfigString.length === 0) { return Promise.reject(new Error('Operation cancelled')); } else { debug('got kubeconfig', kubeconfigString); try { const { safeLoad: parseYAML } = require('js-yaml'); const kubeconfig = parseYAML(kubeconfigString); debug('kubeconfig', kubeconfig); if (!kubeconfig.apiVersion && kubeconfig.kind !== 'Config') { return Promise.reject(new Error('This does not look like a kubeconfig')); } else if (!kubeconfig.clusters || kubeconfig.clusters.length === 0) { return Promise.reject(new Error('Could not find a cluster config')); } else { const cafile = kubeconfig.clusters[0].cluster['certificate-authority']; if (!cafile) { return Promise.reject(new Error('Could not find a certificate-authority')); } else { return { reprompt: true, placeholder: `Paste the contents of your certificate-authority: cat $(dirname $KUBECONFIG})/${cafile}`, onpaste: 'capture', completion: ({ field: ca }) => __awaiter(void 0, void 0, void 0, function* () { debug('got ca', ca); const certPattern = /^\s*-----BEGIN CERTIFICATE-----[^-]+-----END CERTIFICATE-----\s*$/; if (!ca.match(certPattern)) { return Promise.reject(new Error('This does not look like a kubernetes certificate')); } else { auth_1.setAuth(kubeconfigString, ca, cafile); return true; } }) }; } } } catch (err) { return Promise.reject(err); } } }); }); exports.default = (commandTree) => { commandTree.listen('/auth/add', add, { usage: usage.add, inBrowserOk: true }); }; //# sourceMappingURL=auth.js.map