kui-shell
Version:
This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool
81 lines • 3.9 kB
JavaScript
;
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