UNPKG

@bluejeans/flexdoc-backend

Version:

FlexDoc backend integration for NestJS and other frameworks

107 lines 3.94 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const crypto = __importStar(require("crypto")); const jwt = __importStar(require("jsonwebtoken")); const yargs_1 = __importDefault(require("yargs")); const helpers_1 = require("yargs/helpers"); function generatePassword(username, secret) { const hmac = crypto.createHmac('sha256', secret); hmac.update(username); const hash = hmac.digest('base64'); const basePassword = hash.substring(0, 12); let password = basePassword; if (!/[A-Z]/.test(password)) password += 'A'; if (!/[a-z]/.test(password)) password += 'a'; if (!/[0-9]/.test(password)) password += '1'; if (!/[^A-Za-z0-9]/.test(password)) password += '!'; return password; } function generateToken(expiry, secret) { const payload = { iss: 'flexdoc', iat: Math.floor(Date.now() / 1000), exp: Math.floor(Date.now() / 1000) + expiry * 24 * 60 * 60, }; return jwt.sign(payload, secret); } (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv)) .command('basic', 'Generate a password for basic authentication', { username: { description: 'Username to generate password for', demandOption: true, type: 'string', }, secret: { description: 'Secret key used for generation', demandOption: true, type: 'string', }, }, (argv) => { const password = generatePassword(argv.username, argv.secret); console.log(`\nCredentials for user "${argv.username}":`); console.log(`Username: ${argv.username}`); console.log(`Password: ${password}\n`); console.log(`These credentials can be used with Basic Authentication.\n`); }) .command('bearer', 'Generate a JWT token for bearer authentication', { expiry: { description: 'Token expiry in days', default: 30, type: 'number', }, secret: { description: 'Secret key used for signing', demandOption: true, type: 'string', }, }, (argv) => { const token = generateToken(argv.expiry, argv.secret); console.log(`\nBearer token (valid for ${argv.expiry} days):`); console.log(token); console.log(`\nUse this token with Bearer Authentication.\n`); }) .demandCommand(1, 'You must specify a command: basic or bearer') .help() .parse(); //# sourceMappingURL=generate-auth.js.map