UNPKG

2.15 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3// quickly registers users from CLI
4/* eslint-disable no-console */
5
6const is = require('is');
7const Promise = require('bluebird');
8const assert = require('assert');
9const AMQPTransport = require('@microfleet/transport-amqp');
10const getStdin = require('get-stdin');
11const omit = require('lodash/omit');
12const defaults = require('lodash/defaults');
13const gen = require('password-generator');
14const conf = require('../lib/config');
15const { CHALLENGE_TYPE_EMAIL } = require('../lib/constants');
16
17const config = conf.get('/', { env: process.env.NODE_ENV });
18const amqpConfig = omit(config.amqp.transport, ['queue', 'neck', 'listen', 'onComplete']);
19const audience = config.jwt.defaultAudience;
20const { prefix } = config.router.routes;
21
22/**
23 * Registers batch users from stdin
24 */
25function 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// read data from stdin
39getStdin()
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 });