@controlplane/cli
Version:
Control Plane Corporation CLI
49 lines • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.safeCplnName = exports.parseSaToken = exports.nextName = void 0;
const base64url_1 = require("base64url");
const crypto = require("crypto");
const base32Encode = require('base32-encode');
function nextName(prefix, length) {
if (!length || length < 8) {
length = 8;
}
if (prefix === undefined) {
const first = 'xbgjkmqacpez';
prefix = first[Math.floor(Math.random() * Math.floor(first.length))];
length -= 1;
}
const buf = crypto.randomBytes(length);
return prefix + base32Encode(buf, 'Crockford').toLowerCase().substring(0, length);
}
exports.nextName = nextName;
function parseSaToken(s) {
if (!s) {
return null;
}
if (s.startsWith('s')) {
// maybe a service account
let key = base64url_1.default.decode(s.split('.')[1] || '');
let parts = key.split('.');
if (parts.length != 3) {
return null;
}
return {
org: parts[0],
name: parts[1],
};
}
return null;
}
exports.parseSaToken = parseSaToken;
function safeCplnName(maxLength, ...components) {
var buf = crypto.createHash('sha1').update(components.join('-')).digest();
if (maxLength < 13) {
throw new Error(`maxLength must be >= 13`);
}
const maxHash = 8;
const hash = base32Encode(buf, 'Crockford').substring(0, maxHash).toLowerCase();
return components.join('-').substring(0, maxLength - maxHash - 1) + '-' + hash;
}
exports.safeCplnName = safeCplnName;
//# sourceMappingURL=names.js.map