@bluejeans/flexdoc-backend
Version:
FlexDoc backend integration for NestJS and other frameworks
107 lines • 3.94 kB
JavaScript
;
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