1 | #!/usr/bin/env node
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | const is = require('is');
|
7 | const Promise = require('bluebird');
|
8 | const assert = require('assert');
|
9 | const AMQPTransport = require('@microfleet/transport-amqp');
|
10 | const getStdin = require('get-stdin');
|
11 | const omit = require('lodash/omit');
|
12 | const defaults = require('lodash/defaults');
|
13 | const gen = require('password-generator');
|
14 | const conf = require('../lib/config');
|
15 | const { CHALLENGE_TYPE_EMAIL } = require('../lib/constants');
|
16 |
|
17 | const config = conf.get('/', { env: process.env.NODE_ENV });
|
18 | const amqpConfig = omit(config.amqp.transport, ['queue', 'neck', 'listen', 'onComplete']);
|
19 | const audience = config.jwt.defaultAudience;
|
20 | const { prefix } = config.router.routes;
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | function registerUsers(users) {
|
26 | return AMQPTransport
|
27 | .connect({ ...amqpConfig, debug: false })
|
28 | .then((amqp) => (
|
29 | Promise
|
30 | .map(users, (user) => (
|
31 | amqp.publishAndWait(`${prefix}.register`, user, { timeout: 5000 })
|
32 | ))
|
33 | .finally(() => amqp.close())
|
34 | ))
|
35 | .return(users);
|
36 | }
|
37 |
|
38 |
|
39 | getStdin()
|
40 | .then((input) => JSON.parse(input))
|
41 | .then((info) => {
|
42 | assert.equal(typeof info.common, 'object');
|
43 | assert.ok(Array.isArray(info.users));
|
44 | assert.ok(info.users.length > 0);
|
45 |
|
46 | return info.users.map((user) => {
|
47 | const data = is.string(user)
|
48 | ? user.split(/\s/g)
|
49 | : user;
|
50 |
|
51 | const [firstName, lastName, username] = data;
|
52 |
|
53 | assert.ok(firstName);
|
54 | assert.ok(lastName);
|
55 | assert.ok(username);
|
56 |
|
57 | return {
|
58 | audience,
|
59 | username,
|
60 | password: gen(6),
|
61 | metadata: defaults({ firstName, lastName }, info.common),
|
62 | activate: true,
|
63 | challengeType: CHALLENGE_TYPE_EMAIL,
|
64 | skipPassword: false,
|
65 | };
|
66 | });
|
67 | })
|
68 | .then(registerUsers)
|
69 | .then((users) => (
|
70 | users.forEach((user) => (
|
71 | console.info('[%s] - %s', user.username, user.password)
|
72 | ))
|
73 | ))
|
74 | .then(() => {
|
75 | return process.exit();
|
76 | })
|
77 | .catch((err) => {
|
78 | console.info(err);
|
79 | setImmediate(() => { throw err; });
|
80 | });
|