diff --git a/server/ops b/server/ops new file mode 100755 index 0000000..88f3d90 --- /dev/null +++ b/server/ops @@ -0,0 +1,24 @@ +#!/bin/bash +script_dir=$(dirname $0) +script="${script_dir}/src/bin/$1" + +if [[ -z "$1" ]]; then + echo "usage: $(basename $0) " + echo "" + echo "Available scripts are" + ls -1 ${script_dir}/src/bin + exit -1 +fi + + +# For scripts that need config access +export NODE_CONFIG_DIR="${script_dir}/config" + +if [[ ! -e "${script}" ]]; then + echo error: Script ${script} does not exist + exit -1 +fi + +shift +# See https://stackoverflow.com/questions/448407/bash-script-to-receive-and-repass-quoted-parameters +babel-node -- "${script}" "$@" diff --git a/server/package-lock.json b/server/package-lock.json index ba6e316..215ff09 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -5434,6 +5434,11 @@ } } }, + "readline-sync": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz", + "integrity": "sha1-PtqOZfI80qF+YTAbHwADOWr17No=" + }, "redis": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", diff --git a/server/package.json b/server/package.json index 4250549..ea285fe 100644 --- a/server/package.json +++ b/server/package.json @@ -42,6 +42,7 @@ "passport-http-bearer": "^1.0.1", "pino": "^4.10.1", "pino-pretty-express": "^1.0.4", + "readline-sync": "^1.4.9", "redis": "^2.7.1", "redis-rstream": "^0.1.3", "regexp-pattern": "^1.0.4", diff --git a/server/src/DARServer.js b/server/src/ServerTool.js similarity index 99% rename from server/src/DARServer.js rename to server/src/ServerTool.js index a0612fa..ffd5f55 100644 --- a/server/src/DARServer.js +++ b/server/src/ServerTool.js @@ -3,7 +3,7 @@ import path from 'path' import timers from 'timers' import autoBind from 'auto-bind2' -export class DARServer { +export class ServerTool { constructor(toolName, log) { autoBind(this) this.toolName = toolName diff --git a/server/src/bin/addUser.js b/server/src/bin/addUser.js new file mode 100644 index 0000000..27daaa1 --- /dev/null +++ b/server/src/bin/addUser.js @@ -0,0 +1,37 @@ +import path from 'path' +import config from 'config' +import mongoose from 'mongoose' +import { DB } from '../database' +import credential from 'credential' +import readlineSync from 'readline-sync' +import crypto from 'crypto' +import urlSafeBase64 from 'urlsafe-base64' +import util from 'util' + +const mongoUri = config.get('uri.mongo') + +new DB().connect(mongoUri).then((db) => { + console.log(`Connected to MongoDB at ${mongoUri}`) + + const User = db.User + let user = new User({ + role: "administrator" + }) + user.firstName = readlineSync.question('First name? ') + user.lastName = readlineSync.question('Last name? ') + user.email = readlineSync.question('Email? ') + let password = readlineSync.question('Password? ', {hideEchoBack: true}) + let cr = credential() + + util.promisify(cr.hash)(password).then((json) => { + user.passwordHash = JSON.parse(json) + + return user.save() + }).then((savedUser) => { + console.log(`User is ${user}`) + process.exit(0) + }).catch((error) => { + console.log(`error: ${error.message}`) + process.exit(-1) + }) +}) diff --git a/server/src/dar-server.js b/server/src/server.js similarity index 84% rename from server/src/dar-server.js rename to server/src/server.js index 7936570..e6286f8 100644 --- a/server/src/dar-server.js +++ b/server/src/server.js @@ -1,5 +1,5 @@ #!/usr/bin/env node -import { DARServer } from './DARServer' +import { ServerTool } from './ServerTool' import pino from 'pino' import * as pinoExpress from 'pino-pretty-express' import path from 'path' @@ -18,7 +18,7 @@ if (isProduction) { log = pino({ name: serviceName }, pretty) } -const tool = new DARServer(path.basename(process.argv[1], '.js'), log) +const tool = new ServerTool(path.basename(process.argv[1], '.js'), log) tool.run(process.argv.slice(2)).then((exitCode) => { process.exitCode = exitCode