@thefirstspine/certificate-authority 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,152 +1,156 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
- return new (P || (P = Promise))(function (resolve, reject) {
24
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
- step((generator = generator.apply(thisArg, _arguments || [])).next());
28
- });
29
- };
30
- var __importDefault = (this && this.__importDefault) || function (mod) {
31
- return (mod && mod.__esModule) ? mod : { "default": mod };
32
- };
33
- Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.GenerateCommand = void 0;
35
- const inquirer_1 = __importDefault(require("inquirer"));
36
- const chalk_1 = __importDefault(require("chalk"));
37
- const crypto = __importStar(require("crypto"));
38
- const fs = __importStar(require("fs"));
39
- const validator_service_1 = __importDefault(require("./../service/validator.service"));
40
- class GenerateCommand {
41
- constructor() {
42
- this.force = false;
43
- this.mode = 'ask';
44
- }
45
- start(args) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- console.log(chalk_1.default.blue(`Certification generation toolkit`));
48
- if (args.force) {
49
- console.log(chalk_1.default.yellowBright('Using `force` mode. Hope you know what you are doing.'));
50
- this.force = true;
51
- }
52
- this.mode = args.mode;
53
- if (this.mode === 'ask') {
54
- const menuResponses = yield inquirer_1.default.prompt([
55
- {
56
- type: 'list',
57
- name: 'menu',
58
- message: 'What do you want to do?',
59
- choices: [
60
- 'Generate a new pair',
61
- ],
62
- }
63
- ]);
64
- if (menuResponses.menu === 'Generate a new pair') {
65
- this.mode = 'pair';
66
- }
67
- else if (menuResponses.menu === 'Generate a new certificate from a private key') {
68
- }
69
- }
70
- const modesMap = {
71
- 'pair': this.privateKey.bind(this),
72
- };
73
- if (!modesMap[this.mode]) {
74
- console.log(chalk_1.default.redBright(`Unhandled mode "${this.mode}"`));
75
- process.exit(1);
76
- }
77
- modesMap[this.mode](args);
78
- });
79
- }
80
- privateKey(args) {
81
- return __awaiter(this, void 0, void 0, function* () {
82
- const key = yield this.promptForValue('Where should be located your PRIVATE key file?', args, 'key');
83
- if (fs.existsSync(key)) {
84
- const responses = this.force ? { overwrite: true } : yield inquirer_1.default.prompt([
85
- {
86
- type: 'confirm',
87
- name: 'overwrite',
88
- message: `${key} already exists. Overwrite?`,
89
- }
90
- ]);
91
- if (!responses.overwrite) {
92
- process.exit(1);
93
- }
94
- fs.unlinkSync(key);
95
- }
96
- const certificate = yield this.promptForValue('Where should be located your PUBLIC certificate file?', args, 'certificate');
97
- if (fs.existsSync(certificate)) {
98
- const responses = this.force ? { overwrite: true } : yield inquirer_1.default.prompt([
99
- {
100
- type: 'confirm',
101
- name: 'overwrite',
102
- message: `${certificate} already exists. Overwrite?`,
103
- }
104
- ]);
105
- if (!responses.overwrite) {
106
- process.exit(1);
107
- }
108
- fs.unlinkSync(certificate);
109
- }
110
- console.log(chalk_1.default.blueBright('Generating pair...'));
111
- const result = crypto.generateKeyPairSync('rsa', {
112
- modulusLength: 2048,
113
- publicKeyEncoding: {
114
- type: 'spki',
115
- format: 'pem',
116
- },
117
- privateKeyEncoding: {
118
- type: 'pkcs8',
119
- format: 'pem',
120
- }
121
- });
122
- console.log(chalk_1.default.blueBright('Testing pair...'));
123
- process.env.PRIVATE_KEY = result.privateKey;
124
- const challengeResult = validator_service_1.default.challenge(result.publicKey);
125
- if (!challengeResult) {
126
- console.log(chalk_1.default.redBright(`Challenge failed.`));
127
- process.exit(1);
128
- }
129
- console.log(chalk_1.default.greenBright('Challenge succeed.'));
130
- fs.writeFileSync(key, result.privateKey);
131
- console.log(chalk_1.default.greenBright(`Generated key in ${key}`));
132
- fs.writeFileSync(certificate, result.publicKey);
133
- console.log(chalk_1.default.greenBright(`Generated certificate in ${certificate}`));
134
- console.log(chalk_1.default.greenBright(`done.`));
135
- process.exit();
136
- });
137
- }
138
- promptForValue(message, args, key) {
139
- return __awaiter(this, void 0, void 0, function* () {
140
- const response = args[key] ? { [key]: args[key] } : yield inquirer_1.default.prompt([
141
- {
142
- type: 'input',
143
- name: key,
144
- message,
145
- }
146
- ]);
147
- return response[key];
148
- });
149
- }
150
- }
151
- exports.GenerateCommand = GenerateCommand;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.GenerateCommand = void 0;
39
+ const crypto = __importStar(require("crypto"));
40
+ const fs = __importStar(require("fs"));
41
+ const validator_service_1 = __importDefault(require("./../service/validator.service"));
42
+ class GenerateCommand {
43
+ constructor() {
44
+ this.force = false;
45
+ this.mode = 'ask';
46
+ }
47
+ start(args) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ this.chalk = yield Promise.resolve().then(() => __importStar(require("chalk")));
50
+ this.inquirer = yield Promise.resolve().then(() => __importStar(require("inquirer")));
51
+ console.log(this.chalk.blue(`Certification generation toolkit`));
52
+ if (args.force) {
53
+ console.log(this.chalk.yellowBright('Using `force` mode. Hope you know what you are doing.'));
54
+ this.force = true;
55
+ }
56
+ this.mode = args.mode;
57
+ if (this.mode === 'ask') {
58
+ const menuResponses = yield this.inquirer.prompt([
59
+ {
60
+ type: 'list',
61
+ name: 'menu',
62
+ message: 'What do you want to do?',
63
+ choices: [
64
+ 'Generate a new pair',
65
+ ],
66
+ }
67
+ ]);
68
+ if (menuResponses.menu === 'Generate a new pair') {
69
+ this.mode = 'pair';
70
+ }
71
+ else if (menuResponses.menu === 'Generate a new certificate from a private key') {
72
+ }
73
+ }
74
+ const modesMap = {
75
+ 'pair': this.generatePair.bind(this),
76
+ };
77
+ if (!modesMap[this.mode]) {
78
+ console.log(this.chalk.redBright(`Unhandled mode "${this.mode}"`));
79
+ process.exit(1);
80
+ }
81
+ modesMap[this.mode](args);
82
+ });
83
+ }
84
+ generatePair(args) {
85
+ return __awaiter(this, void 0, void 0, function* () {
86
+ const key = yield this.promptForValue('Where should be located your PRIVATE key file?', args, 'key');
87
+ if (fs.existsSync(key)) {
88
+ const responses = this.force ? { overwrite: true } : yield this.inquirer.prompt([
89
+ {
90
+ type: 'confirm',
91
+ name: 'overwrite',
92
+ message: `${key} already exists. Overwrite?`,
93
+ }
94
+ ]);
95
+ if (!responses.overwrite) {
96
+ process.exit(1);
97
+ }
98
+ fs.unlinkSync(key);
99
+ }
100
+ const certificate = yield this.promptForValue('Where should be located your PUBLIC certificate file?', args, 'certificate');
101
+ if (fs.existsSync(certificate)) {
102
+ const responses = this.force ? { overwrite: true } : yield this.inquirer.prompt([
103
+ {
104
+ type: 'confirm',
105
+ name: 'overwrite',
106
+ message: `${certificate} already exists. Overwrite?`,
107
+ }
108
+ ]);
109
+ if (!responses.overwrite) {
110
+ process.exit(1);
111
+ }
112
+ fs.unlinkSync(certificate);
113
+ }
114
+ console.log(this.chalk.blueBright('Generating pair...'));
115
+ const result = crypto.generateKeyPairSync('rsa', {
116
+ modulusLength: 2048,
117
+ publicKeyEncoding: {
118
+ type: 'spki',
119
+ format: 'pem',
120
+ },
121
+ privateKeyEncoding: {
122
+ type: 'pkcs8',
123
+ format: 'pem',
124
+ }
125
+ });
126
+ console.log(this.chalk.blueBright('Testing pair...'));
127
+ process.env.PRIVATE_KEY = result.privateKey;
128
+ const challengeResult = validator_service_1.default.challenge(result.publicKey);
129
+ if (!challengeResult) {
130
+ console.log(this.chalk.redBright(`Challenge failed.`));
131
+ process.exit(1);
132
+ }
133
+ console.log(this.chalk.greenBright('Challenge succeed.'));
134
+ fs.writeFileSync(key, result.privateKey);
135
+ console.log(this.chalk.greenBright(`Generated key in ${key}`));
136
+ fs.writeFileSync(certificate, result.publicKey);
137
+ console.log(this.chalk.greenBright(`Generated certificate in ${certificate}`));
138
+ console.log(this.chalk.greenBright(`done.`));
139
+ process.exit();
140
+ });
141
+ }
142
+ promptForValue(message, args, key) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ const response = args[key] ? { [key]: args[key] } : yield this.inquirer.prompt([
145
+ {
146
+ type: 'input',
147
+ name: key,
148
+ message,
149
+ }
150
+ ]);
151
+ return response[key];
152
+ });
153
+ }
154
+ }
155
+ exports.GenerateCommand = GenerateCommand;
152
156
  //# sourceMappingURL=generate.command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.command.js","sourceRoot":"","sources":["../../src/commands/generate.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.command.js","sourceRoot":"","sources":["../../src/commands/generate.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,uCAAyB;AACzB,uFAA8D;AAM9D,MAAa,eAAe;IAgB1B;QAXU,UAAK,GAAY,KAAK,CAAC;QAKvB,SAAI,GAAW,KAAK,CAAC;IAMhB,CAAC;IAMV,KAAK,CAAC,IAA+E;;YACzF,IAAI,CAAC,KAAK,GAAG,wDAAa,OAAO,GAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,wDAAa,UAAU,GAAC,CAAC;YAEzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAGjE,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,uDAAuD,CAAC,CAAC,CAAC;gBAC9F,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACnB;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAGtB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;gBACvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC/C;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,yBAAyB;wBAClC,OAAO,EAAE;4BACP,qBAAqB;yBACtB;qBACF;iBACF,CAAC,CAAC;gBACH,IAAI,aAAa,CAAC,IAAI,KAAK,qBAAqB,EAAE;oBAChD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;iBACpB;qBAAM,IAAI,aAAa,CAAC,IAAI,KAAK,+CAA+C,EAAE;iBAClF;aACF;YAGD,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;aACrC,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;YAED,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;KAAA;IAMK,YAAY,CAAC,IAA+B;;YAEhD,MAAM,GAAG,GAAW,MAAM,IAAI,CAAC,cAAc,CAAC,gDAAgD,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7G,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC5E;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,GAAG,GAAG,6BAA6B;qBAC7C;iBACF,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjB;gBACD,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACpB;YAGD,MAAM,WAAW,GAAW,MAAM,IAAI,CAAC,cAAc,CAAC,uDAAuD,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACpI,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;gBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC5E;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,GAAG,WAAW,6BAA6B;qBACrD;iBACF,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjB;gBACD,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;aAC5B;YAGD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CACvC,KAAK,EACL;gBACE,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE;oBACjB,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,KAAK;iBACd;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,KAAK;iBACd;aACF,CACF,CAAC;YAIF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;YAC5C,MAAM,eAAe,GAAG,2BAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,CAAC,eAAe,EAAE;gBACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAG1D,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/D,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC,CAAC;YAG/E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;KAAA;IAQe,cAAc,CAAC,OAAe,EAAE,IAAS,EAAE,GAAW;;YACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3E;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,GAAG;oBACT,OAAO;iBACR;aACF,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;KAAA;CAEF;AA9JD,0CA8JC"}
@@ -1,3 +1,3 @@
1
- #!/usr/bin/env node
2
- export {};
1
+ #!/usr/bin/env node
2
+ export {};
3
3
  //# sourceMappingURL=generate.d.ts.map
@@ -1,47 +1,47 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const generate_command_1 = require("./generate.command");
8
- const yargs_1 = __importDefault(require("yargs"));
9
- const clear = require('clear');
10
- clear();
11
- yargs_1.default
12
- .command('', 'Generates files to be validated in the services.')
13
- .options({
14
- force: {
15
- alias: 'f',
16
- type: 'boolean',
17
- description: 'Once provided, the confirmation prompt will be ignored.',
18
- default: false,
19
- },
20
- mode: {
21
- alias: 'm',
22
- type: 'string',
23
- description: 'Defines wha\'s to be generated. `"ask"` or `"pair"`. If not provided, a prompt will be displayed.',
24
- default: 'ask',
25
- },
26
- key: {
27
- alias: 'k',
28
- type: 'string',
29
- description: 'The private key path. If not provided, a prompt will be displayed. If the file already exists, a confirmation will be asked',
30
- default: false,
31
- },
32
- certificate: {
33
- alias: 'c',
34
- type: 'string',
35
- description: 'The public certificate path. If not provided, a prompt will be displayed. If the file already exists, a confirmation will be asked',
36
- default: false,
37
- },
38
- });
39
- const command = new generate_command_1.GenerateCommand();
40
- const args = yargs_1.default.parse();
41
- command.start({
42
- force: args.force,
43
- mode: args.mode,
44
- key: args.key,
45
- certificate: args.certificate,
46
- });
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const generate_command_1 = require("./generate.command");
8
+ const yargs_1 = __importDefault(require("yargs"));
9
+ const clear = require('clear');
10
+ clear();
11
+ yargs_1.default
12
+ .command('', 'Generates files to be validated in the services.')
13
+ .options({
14
+ force: {
15
+ alias: 'f',
16
+ type: 'boolean',
17
+ description: 'Once provided, the confirmation prompt will be ignored.',
18
+ default: false,
19
+ },
20
+ mode: {
21
+ alias: 'm',
22
+ type: 'string',
23
+ description: 'Defines wha\'s to be generated. `"ask"` or `"pair"`. If not provided, a prompt will be displayed.',
24
+ default: 'ask',
25
+ },
26
+ key: {
27
+ alias: 'k',
28
+ type: 'string',
29
+ description: 'The private key path. If not provided, a prompt will be displayed. If the file already exists, a confirmation will be asked',
30
+ default: false,
31
+ },
32
+ certificate: {
33
+ alias: 'c',
34
+ type: 'string',
35
+ description: 'The public certificate path. If not provided, a prompt will be displayed. If the file already exists, a confirmation will be asked',
36
+ default: false,
37
+ },
38
+ });
39
+ const command = new generate_command_1.GenerateCommand();
40
+ const args = yargs_1.default.parse();
41
+ command.start({
42
+ force: args['force'],
43
+ mode: args['mode'],
44
+ key: args['key'],
45
+ certificate: args['certificate'],
46
+ });
47
47
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":";;;;;;AAEA,yDAAqD;AACrD,kDAA0B;AAG1B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/B,KAAK,EAAE,CAAC;AAER,eAAK;KACF,OAAO,CAAC,EAAE,EAAE,kDAAkD,CAAC;KAC/D,OAAO,CAAC;IACP,KAAK,EAAE;QACL,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yDAAyD;QACtE,OAAO,EAAE,KAAK;KACf;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mGAAmG;QAChH,OAAO,EAAE,KAAK;KACf;IACD,GAAG,EAAE;QACH,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6HAA6H;QAC1I,OAAO,EAAE,KAAK;KACf;IACD,WAAW,EAAE;QACX,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oIAAoI;QACjJ,OAAO,EAAE,KAAK;KACf;CACF,CAAC,CAAC;AAGL,MAAM,OAAO,GAAoB,IAAI,kCAAe,EAAE,CAAC;AACvD,MAAM,IAAI,GAAG,eAAK,CAAC,KAAK,EAAE,CAAC;AAC3B,OAAO,CAAC,KAAK,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC,KAAgB;IAC5B,IAAI,EAAE,IAAI,CAAC,IAAc;IACzB,GAAG,EAAE,IAAI,CAAC,GAAa;IACvB,WAAW,EAAE,IAAI,CAAC,WAAqB;CACxC,CAAC,CAAC"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":";;;;;;AAEA,yDAAqD;AACrD,kDAA0B;AAG1B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/B,KAAK,EAAE,CAAC;AAER,eAAK;KACF,OAAO,CAAC,EAAE,EAAE,kDAAkD,CAAC;KAC/D,OAAO,CAAC;IACP,KAAK,EAAE;QACL,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yDAAyD;QACtE,OAAO,EAAE,KAAK;KACf;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mGAAmG;QAChH,OAAO,EAAE,KAAK;KACf;IACD,GAAG,EAAE;QACH,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6HAA6H;QAC1I,OAAO,EAAE,KAAK;KACf;IACD,WAAW,EAAE;QACX,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oIAAoI;QACjJ,OAAO,EAAE,KAAK;KACf;CACF,CAAC,CAAC;AAGL,MAAM,OAAO,GAAoB,IAAI,kCAAe,EAAE,CAAC;AACvD,MAAM,IAAI,GAAG,eAAK,CAAC,KAAK,EAAE,CAAC;AAC3B,OAAO,CAAC,KAAK,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC,OAAO,CAAY;IAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAW;IAC5B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAW;IAC1B,WAAW,EAAE,IAAI,CAAC,aAAa,CAAW;CAC3C,CAAC,CAAC"}
package/lib/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './service/validator.service';
1
+ export * from './service/validator.service';
2
2
  //# sourceMappingURL=index.d.ts.map
package/lib/index.js CHANGED
@@ -1,14 +1,18 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./service/validator.service"), exports);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./service/validator.service"), exports);
14
18
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAKA,8DAA4C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAKA,8DAA4C"}
@@ -1,6 +1,6 @@
1
- export declare class ValidatorService {
2
- challenge(certificate: string): boolean;
3
- }
4
- declare const _default: ValidatorService;
5
- export default _default;
1
+ export declare class ValidatorService {
2
+ challenge(certificate: string): boolean;
3
+ }
4
+ declare const _default: ValidatorService;
5
+ export default _default;
6
6
  //# sourceMappingURL=validator.service.d.ts.map
@@ -1,40 +1,44 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.ValidatorService = void 0;
23
- const crypto = __importStar(require("crypto"));
24
- class ValidatorService {
25
- challenge(certificate) {
26
- const publicKeyStr = certificate.replace(/\\n/gm, '\n');
27
- const privateKeyStr = process.env.PRIVATE_KEY.replace(/\\n/gm, '\n');
28
- try {
29
- const challenge = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(10);
30
- const encryptedBuffer = crypto.publicEncrypt(publicKeyStr, new Buffer(challenge));
31
- const decryptedBuffer = crypto.privateDecrypt(privateKeyStr, encryptedBuffer);
32
- return decryptedBuffer.toString() === challenge;
33
- }
34
- catch (exception) { }
35
- return false;
36
- }
37
- }
38
- exports.ValidatorService = ValidatorService;
39
- exports.default = new ValidatorService();
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ValidatorService = void 0;
27
+ const crypto = __importStar(require("crypto"));
28
+ class ValidatorService {
29
+ challenge(certificate) {
30
+ const publicKeyStr = certificate.replace(/\\n/gm, '\n');
31
+ const privateKeyStr = process.env.PRIVATE_KEY.replace(/\\n/gm, '\n');
32
+ try {
33
+ const challenge = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(10);
34
+ const encryptedBuffer = crypto.publicEncrypt(publicKeyStr, new Buffer(challenge));
35
+ const decryptedBuffer = crypto.privateDecrypt(privateKeyStr, encryptedBuffer);
36
+ return decryptedBuffer.toString() === challenge;
37
+ }
38
+ catch (exception) { }
39
+ return false;
40
+ }
41
+ }
42
+ exports.ValidatorService = ValidatorService;
43
+ exports.default = new ValidatorService();
40
44
  //# sourceMappingURL=validator.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validator.service.js","sourceRoot":"","sources":["../../src/service/validator.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAMjC,MAAa,gBAAgB;IAM3B,SAAS,CAAC,WAAmB;QAE3B,MAAM,YAAY,GAAW,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChE,MAAM,aAAa,GAAW,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE7E,IAAI;YAEF,MAAM,SAAS,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAG3F,MAAM,eAAe,GAAW,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1F,MAAM,eAAe,GAAW,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;YAGtF,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC;SACjD;QAAC,OAAO,SAAS,EAAE,GAAE;QAEtB,OAAO,KAAK,CAAC;IACf,CAAC;CAEF;AA1BD,4CA0BC;AAED,kBAAe,IAAI,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"validator.service.js","sourceRoot":"","sources":["../../src/service/validator.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAMjC,MAAa,gBAAgB;IAM3B,SAAS,CAAC,WAAmB;QAE3B,MAAM,YAAY,GAAW,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChE,MAAM,aAAa,GAAW,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE7E,IAAI;YAEF,MAAM,SAAS,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAG3F,MAAM,eAAe,GAAW,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1F,MAAM,eAAe,GAAW,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;YAGtF,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC;SACjD;QAAC,OAAO,SAAS,EAAE,GAAE;QAEtB,OAAO,KAAK,CAAC;IACf,CAAC;CAEF;AA1BD,4CA0BC;AAED,kBAAe,IAAI,gBAAgB,EAAE,CAAC"}