UNPKG

@forzalabs/remora

Version:

A powerful CLI tool for seamless data translation.

65 lines (64 loc) 3.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const crypto_1 = __importDefault(require("crypto")); const PUBLICK_KEY = `-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7BWugM83YKGzTyZ6kJyy M01JoGYBQYn/9H9utQQyC/uugV4g9d7vv87I2yUfqiHtx7BQj0mOGctqnK7vuRcg py7fghTjsUj0MDhs8cEpc+47m0xdsU9MQQ8Xze8B3FcdvCc4xtT5nruTAUWMGIAM WLHG8lWxkHjTSZn4S0RdpRBB7fw4jyVkc+vXCTtVtYQwMWjcErNFrdCenvci4Vus nKlyfKS6ccLQphOc/I2w6zllFwD/l90vQeQ6kDO01aJLOmJPzvlU/TSP/lcxCYTA TgQJQxd5UdnTSDjNw+Uu/jzZ5mVlCbtYH1RoJ6cGNglzN8Q50mVk/iVyoZCZ94b4 bwIDAQAB -----END PUBLIC KEY-----`; class LicenceManagerClass { constructor() { this.generate = (customer, expirationDays, features, privateKey) => { const now = new Date(); const expirationDate = new Date(now.getTime() + expirationDays * 24 * 60 * 60 * 1000); const licenceData = { customer, features, issued: now.toISOString(), expires: expirationDate.toISOString() }; const licenceString = JSON.stringify(licenceData); const sign = crypto_1.default.createSign('SHA256'); sign.update(licenceString); sign.end(); const signature = sign.sign(privateKey, 'base64'); const licence = { data: licenceData, signature }; return Buffer.from(JSON.stringify(licence)).toString('base64'); }; this.validate = (licence) => { try { const licenceJSON = Buffer.from(licence, 'base64').toString(); const licenceData = JSON.parse(licenceJSON); const { data, signature } = licenceData; const now = new Date(); const expirationDate = new Date(data.expires); if (now > expirationDate) return { valid: false, reason: 'License expired', expiryDate: expirationDate }; const verify = crypto_1.default.createVerify('SHA256'); verify.update(JSON.stringify(data)); const isSignatureValid = verify.verify(PUBLICK_KEY, signature, 'base64'); if (!isSignatureValid) return { valid: false, reason: 'Invalid license signature' }; return { valid: true, expiryDate: expirationDate, daysRemaining: Math.ceil((expirationDate.getTime() - now.getTime()) / (24 * 60 * 60 * 1000)), features: data.features, customer: data.customer }; } catch (error) { return { valid: false, reason: 'License parsing error', details: error.message }; } }; } } const LicenceManager = new LicenceManagerClass(); exports.default = LicenceManager;