fase(17): licensing module with RSA validation

This commit is contained in:
debian
2026-03-08 05:20:54 -04:00
parent 1f1678af17
commit 5a28270dc9
45 changed files with 1789 additions and 48 deletions

65
dist/scripts/generate-license.js vendored Normal file
View 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();