summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--README.md4
-rwxr-xr-xbin/manage_users89
-rw-r--r--package.json2
3 files changed, 93 insertions, 2 deletions
diff --git a/README.md b/README.md
index 8b8b584f..0d03324b 100644
--- a/README.md
+++ b/README.md
@@ -188,7 +188,7 @@ There are some configs you need to change in the files below
| HMD_IMGUR_CLIENTID | no example | Imgur API client id |
| HMD_EMAIL | `true` or `false` | set to allow email signin |
| HMD_ALLOW_PDF_EXPORT | `true` or `false` | Enable or disable PDF exports |
-| HMD_ALLOW_EMAIL_REGISTER | `true` or `false` | set to allow email register (only applied when email is set, default is `true`) |
+| HMD_ALLOW_EMAIL_REGISTER | `true` or `false` | set to allow email register (only applied when email is set, default is `true`. Note `bin/manage_users` might help you if registration is `false`.) |
| HMD_IMAGE_UPLOAD_TYPE | `imgur`, `s3`, `minio` or `filesystem` | Where to upload image. For S3, see our Image Upload Guides for [S3](docs/guides/s3-image-upload.md) or [Minio](docs/guides/minio-image-upload.md) |
| HMD_S3_ACCESS_KEY_ID | no example | AWS access key id |
| HMD_S3_SECRET_ACCESS_KEY | no example | AWS secret key |
@@ -246,7 +246,7 @@ There are some configs you need to change in the files below
| heartbeattimeout | `10000` | socket.io heartbeat timeout |
| documentmaxlength | `100000` | note max length |
| email | `true` or `false` | set to allow email signin |
-| allowemailregister | `true` or `false` | set to allow email register (only applied when email is set, default is `true`) |
+| allowemailregister | `true` or `false` | set to allow email register (only applied when email is set, default is `true`. Note `bin/manage_users` might help you if registration is `false`.) |
| imageuploadtype | `imgur`(default), `s3`, `minio` or `filesystem` | Where to upload image
| minio | `{ "accessKey": "YOUR_MINIO_ACCESS_KEY", "secretKey": "YOUR_MINIO_SECRET_KEY", "endpoint": "YOUR_MINIO_HOST", port: 9000, secure: true }` | When `imageuploadtype` is set to `minio`, you need to set this key. Also checkout our [Minio Image Upload Guide](docs/guides/minio-image-upload.md) |
| s3 | `{ "accessKeyId": "YOUR_S3_ACCESS_KEY_ID", "secretAccessKey": "YOUR_S3_ACCESS_KEY", "region": "YOUR_S3_REGION" }` | When `imageuploadtype` be set to `s3`, you would also need to setup this key, check our [S3 Image Upload Guide](docs/guides/s3-image-upload.md) |
diff --git a/bin/manage_users b/bin/manage_users
new file mode 100755
index 00000000..6bf8bc26
--- /dev/null
+++ b/bin/manage_users
@@ -0,0 +1,89 @@
+#!/usr/bin/env node
+
+// First configure the logger so it does not spam the console
+const logger = require("../lib/logger");
+logger.transports.console.level = "warning";
+
+const models = require("../lib/models/");
+const readline = require("readline-sync");
+const minimist = require("minimist");
+
+var usage = `
+
+Command-line utility to create users for email-signin.
+
+Usage: bin/manage_users [--pass password] (--add | --del) user-email
+ Options:
+ --add Add user with the specified user-email
+ --del Delete user with specified user-email
+ --pass Use password from cmdline rather than prompting
+`
+
+// Using an async function to be able to use await inside
+async function createUser(argv) {
+ var existing_user = await models.User.findOne({where: {email: argv["add"]}});
+ // Cannot create already-existing users
+ if(existing_user != undefined) {
+ console.log("User with e-mail "+existing_user.email+" already exists! Aborting ...");
+ process.exit(1);
+ }
+
+ // Find whether we use cmdline or prompt password
+ if(argv["pass"] == undefined) {
+ var pass = readline.question("Password for "+argv["add"]+":", {hideEchoBack: true});
+ } else {
+ console.log("Using password from commandline...");
+ var pass = argv["pass"];
+ }
+
+ // Lets try to create, and check success
+ var ref = await models.User.create({email: argv["add"], password: pass});
+ if(ref == undefined) {
+ console.log("Could not create user with email "+argv["add"]);
+ process.exit(1);
+ } else
+ console.log("Created user with email "+argv["add"]);
+}
+
+// Using an async function to be able to use await inside
+async function deleteUser(argv) {
+ // Cannot delete non-existing users
+ var existing_user = await models.User.findOne({where: {email: argv["del"]}});
+ if(existing_user == undefined) {
+ console.log("User with e-mail "+argv["del"]+" does not exist, cannot delete");
+ process.exit(1);
+ }
+
+ // Sadly .destroy() does not return any success value with all
+ // backends. See sequelize #4124
+ await existing_user.destroy();
+ console.log("Deleted user "+argv["del"]+" ...");
+}
+
+// Perform commandline-parsing
+var argv = minimist(process.argv.slice(2));
+
+// Check for add/delete missing
+if (argv["add"] == undefined && argv["del"] == undefined) {
+ console.log("You did not specify either --add or --del!");
+ console.log(usage);
+ process.exit(1);
+}
+
+// Check if both are specified
+if (argv["add"] != undefined && argv["del"] != undefined) {
+ console.log("You cannot add and delete at the same time!");
+ console.log(usage);
+ process.exit(1);
+}
+
+// Call respective processing functions
+if (argv["add"] != undefined) {
+ createUser(argv).then(function() {
+ process.exit(0);
+ });
+} else if (argv["del"] != undefined) {
+ deleteUser(argv).then(function() {
+ process.exit(0);
+ })
+}
diff --git a/package.json b/package.json
index 165fc7ee..9688434e 100644
--- a/package.json
+++ b/package.json
@@ -79,6 +79,7 @@
"mattermost": "^3.4.0",
"meta-marked": "^0.4.2",
"method-override": "^2.3.7",
+ "minimist": "^1.2.0",
"minio": "^3.1.3",
"moment": "^2.17.1",
"morgan": "^1.7.0",
@@ -103,6 +104,7 @@
"prismjs": "^1.6.0",
"randomcolor": "^0.4.4",
"raphael": "git+https://github.com/dmitrybaranovskiy/raphael",
+ "readline-sync": "^1.4.7",
"request": "^2.79.0",
"reveal.js": "~3.6.0",
"scrypt": "^6.0.3",