3 const argon2
= require('argon2');
4 const readline
= require('readline');
5 const stream
= require('stream');
6 const DB
= require('../src/db');
7 const Logger
= require('../src/logger');
8 const Config
= require('../config');
9 const config
= new Config(process
.env
.NODE_ENV
);
11 const logger
= new Logger(config
);
12 const db
= new DB(logger
, config
);
17 if (process
.argv
.includes('-P')) {
19 process
.argv
.splice(process
.argv
.indexOf('-P'), 1);
22 const identifier
= process
.argv
[2];
25 console
.log('missing user to add');
26 throw new Error('missing argument');
29 async
function readPassword(prompt
) {
30 const input
= process
.stdin
;
31 const output
= new stream
.Writable({
32 write: function (chunk
, encoding
, callback
) {
34 process
.stdout
.write(chunk
, encoding
);
39 const rl
= readline
.createInterface({ input
, output
, terminal: !!process
.stdin
.isTTY
});
44 return new Promise((resolve
) => {
45 rl
.question('', (answer
) => {
55 await db
.initialize();
60 const password
= await
readPassword('password: ');
61 credential
= await argon2
.hash(password
, { type: argon2
.argon2id
});
63 console
.log(`\t${identifier}:${credential}`);
64 await db
.context(async (dbCtx
) => {
65 const result
= await db
.authenticationUpsert(dbCtx
, identifier
, credential
);
69 await db
._closeConnection();