fase(17): licensing module with RSA validation
This commit is contained in:
65
dist/scripts/generate-license.js
vendored
Normal file
65
dist/scripts/generate-license.js
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env ts-node
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/**
|
||||
* ABE License Key Generator (internal tool)
|
||||
* Usage: ts-node src/scripts/generate-license.ts --plan pro --org "Acme Corp" --email admin@acme.com --expires 2027-01-01
|
||||
*/
|
||||
const crypto_1 = __importDefault(require("crypto"));
|
||||
const fs_1 = __importDefault(require("fs"));
|
||||
const path_1 = __importDefault(require("path"));
|
||||
function parseArgs() {
|
||||
const args = process.argv.slice(2);
|
||||
const get = (flag) => {
|
||||
const idx = args.indexOf(flag);
|
||||
return idx >= 0 ? args[idx + 1] : undefined;
|
||||
};
|
||||
const plan = (get('--plan') ?? 'pro');
|
||||
const org = get('--org') ?? 'Unknown Organization';
|
||||
const email = get('--email') ?? '';
|
||||
const expires = get('--expires') ?? null;
|
||||
const keyFile = get('--key') ?? path_1.default.join(process.cwd(), 'license-private.pem');
|
||||
return { plan, org, email, expires, keyFile };
|
||||
}
|
||||
function generateLicense(args) {
|
||||
if (!fs_1.default.existsSync(args.keyFile)) {
|
||||
throw new Error(`Private key not found at ${args.keyFile}.\n` +
|
||||
'Generate with: openssl genrsa -out license-private.pem 2048');
|
||||
}
|
||||
const privateKeyPem = fs_1.default.readFileSync(args.keyFile, 'utf-8');
|
||||
const privateKey = crypto_1.default.createPrivateKey(privateKeyPem);
|
||||
const payload = {
|
||||
plan: args.plan,
|
||||
organizationName: args.org,
|
||||
email: args.email,
|
||||
issuedAt: new Date().toISOString(),
|
||||
expiresAt: args.expires ? new Date(args.expires).toISOString() : null,
|
||||
};
|
||||
const payloadJson = JSON.stringify(payload);
|
||||
const payloadB64 = Buffer.from(payloadJson, 'utf-8').toString('base64');
|
||||
const signature = crypto_1.default.sign('sha256', Buffer.from(payloadJson, 'utf-8'), privateKey);
|
||||
const signatureB64 = signature.toString('base64');
|
||||
return `${payloadB64}.${signatureB64}`;
|
||||
}
|
||||
function main() {
|
||||
const args = parseArgs();
|
||||
try {
|
||||
const licenseKey = generateLicense(args);
|
||||
console.log('\n=== ABE License Key ===');
|
||||
console.log(licenseKey);
|
||||
console.log('\n=== Details ===');
|
||||
console.log(`Plan: ${args.plan}`);
|
||||
console.log(`Organization: ${args.org}`);
|
||||
console.log(`Email: ${args.email}`);
|
||||
console.log(`Expires: ${args.expires ?? 'Never'}`);
|
||||
console.log('===================\n');
|
||||
}
|
||||
catch (err) {
|
||||
console.error('Error generating license:', String(err));
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
main();
|
||||
Reference in New Issue
Block a user