fleet/ee/tools/license/license.js
Tomas Touceda 6d2ae02efd
Rename core->free and basic->premium (#1870)
* Rename core->free and basic->premium

* Fix lint js

* Comment out portion of test that seems to timeout

* Rename tier  to premium if basic is still loaded
2021-09-03 13:05:23 -03:00

103 lines
2.4 KiB
JavaScript
Executable File

#!/usr/bin/env node
import fs from "fs";
import jwt from "jsonwebtoken";
import yargs from "yargs";
import { hideBin } from "yargs/helpers";
// Generate the JWT license key using the provided options.
const generate = (argv) => {
const {
privateKey: privateKeyPath,
keyPassphrase: keyPassphrasePath,
expiration,
customer,
devices,
note,
tier,
} = argv;
const unixExpiration = Math.floor(expiration / 1000);
const privateKey = fs.readFileSync(privateKeyPath);
const keyPassphrase = fs.readFileSync(keyPassphrasePath).toString().trim();
const licensePayload = {
iss: "Fleet Device Management Inc.",
exp: unixExpiration,
sub: customer,
devices,
note,
tier,
};
console.log(
jwt.sign(
licensePayload,
{ key: privateKey, passphrase: keyPassphrase },
{ algorithm: "ES256" }
)
);
};
// Like Date.parse but error if date cannot be parsed.
const coerceDate = (str) => {
const date = Date.parse(str);
if (isNaN(date)) {
throw new Error(`'${str}' cannot be parsed as date`);
}
return date;
};
yargs(hideBin(process.argv))
.command(
"generate",
"Generate a new license key",
(cmd) => {
cmd.option({
"private-key": {
description: "Path to private key for signing",
type: "string",
required: true,
},
"key-passphrase": {
description: "Path to file containing private key passphrase",
type: "string",
required: true,
},
expiration: {
description: "Expiration timestamp of license",
type: "string",
coerce: coerceDate,
required: true,
},
customer: {
description: "Name of customer",
type: "string",
required: true,
},
devices: {
description: "Licensed device count",
type: "number",
required: true,
},
note: {
description: "Additional note to add to license",
type: "string",
},
tier: {
description: "License tier",
default: "premium",
type: "string",
},
});
},
generate
)
.demandCommand(1, "Command must be provided") // Require a command
.strict() // Reject unknown flags
.version(false) // Disable version option
.help()
.alias("help", "h")
.parse();