Merge branch 'master' into DepauMD
This commit is contained in:
commit
af995b048d
2 changed files with 69 additions and 39 deletions
106
bin/manage_users
106
bin/manage_users
|
@ -8,7 +8,8 @@ const models = require("../lib/models/");
|
||||||
const readline = require("readline-sync");
|
const readline = require("readline-sync");
|
||||||
const minimist = require("minimist");
|
const minimist = require("minimist");
|
||||||
|
|
||||||
var usage = `
|
function showUsage(tips) {
|
||||||
|
console.log(`${tips}
|
||||||
|
|
||||||
Command-line utility to create users for email-signin.
|
Command-line utility to create users for email-signin.
|
||||||
|
|
||||||
|
@ -16,74 +17,103 @@ Usage: bin/manage_users [--pass password] (--add | --del) user-email
|
||||||
Options:
|
Options:
|
||||||
--add Add user with the specified user-email
|
--add Add user with the specified user-email
|
||||||
--del Delete user with specified user-email
|
--del Delete user with specified user-email
|
||||||
|
--reset Reset user password with specified user-email
|
||||||
--pass Use password from cmdline rather than prompting
|
--pass Use password from cmdline rather than prompting
|
||||||
`
|
`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPass(argv, action) {
|
||||||
|
// Find whether we use cmdline or prompt password
|
||||||
|
if(typeof argv["pass"] !== 'string') {
|
||||||
|
return readline.question(`Password for ${argv[action]}:`, {hideEchoBack: true});
|
||||||
|
}
|
||||||
|
console.log("Using password from commandline...");
|
||||||
|
return argv["pass"];
|
||||||
|
}
|
||||||
|
|
||||||
// Using an async function to be able to use await inside
|
// Using an async function to be able to use await inside
|
||||||
async function createUser(argv) {
|
async function createUser(argv) {
|
||||||
var existing_user = await models.User.findOne({where: {email: argv["add"]}});
|
const existing_user = await models.User.findOne({where: {email: argv["add"]}});
|
||||||
// Cannot create already-existing users
|
// Cannot create already-existing users
|
||||||
if(existing_user != undefined) {
|
if(existing_user != undefined) {
|
||||||
console.log("User with e-mail "+existing_user.email+" already exists! Aborting ...");
|
console.log(`User with e-mail ${existing_user.email} already exists! Aborting ...`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find whether we use cmdline or prompt password
|
const pass = getPass(argv, "add");
|
||||||
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
|
// Lets try to create, and check success
|
||||||
var ref = await models.User.create({email: argv["add"], password: pass});
|
const ref = await models.User.create({email: argv["add"], password: pass});
|
||||||
if(ref == undefined) {
|
if(ref == undefined) {
|
||||||
console.log("Could not create user with email "+argv["add"]);
|
console.log(`Could not create user with email ${argv["add"]}`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
} else
|
} else
|
||||||
console.log("Created user with email "+argv["add"]);
|
console.log(`Created user with email ${argv["add"]}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Using an async function to be able to use await inside
|
// Using an async function to be able to use await inside
|
||||||
async function deleteUser(argv) {
|
async function deleteUser(argv) {
|
||||||
// Cannot delete non-existing users
|
// Cannot delete non-existing users
|
||||||
var existing_user = await models.User.findOne({where: {email: argv["del"]}});
|
const existing_user = await models.User.findOne({where: {email: argv["del"]}});
|
||||||
if(existing_user == undefined) {
|
if(existing_user === undefined) {
|
||||||
console.log("User with e-mail "+argv["del"]+" does not exist, cannot delete");
|
console.log(`User with e-mail ${argv["del"]} does not exist, cannot delete`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sadly .destroy() does not return any success value with all
|
// Sadly .destroy() does not return any success value with all
|
||||||
// backends. See sequelize #4124
|
// backends. See sequelize #4124
|
||||||
await existing_user.destroy();
|
await existing_user.destroy();
|
||||||
console.log("Deleted user "+argv["del"]+" ...");
|
console.log(`Deleted user ${argv["del"]} ...`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Perform commandline-parsing
|
|
||||||
var argv = minimist(process.argv.slice(2));
|
|
||||||
|
|
||||||
// Check for add/delete missing
|
// Using an async function to be able to use await inside
|
||||||
if (argv["add"] == undefined && argv["del"] == undefined) {
|
async function resetUser(argv) {
|
||||||
console.log("You did not specify either --add or --del!");
|
const existing_user = await models.User.findOne({where: {email: argv["reset"]}});
|
||||||
console.log(usage);
|
// Cannot reset non-existing users
|
||||||
process.exit(1);
|
if(existing_user == undefined) {
|
||||||
|
console.log(`User with e-mail ${argv["reset"]} does not exist, cannot reset`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const pass = getPass(argv, "reset");
|
||||||
|
|
||||||
|
// set password and save
|
||||||
|
existing_user.password = pass;
|
||||||
|
await existing_user.save();
|
||||||
|
console.log(`User with email ${argv["reset"]} password has been reset`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
add: createUser,
|
||||||
|
del: deleteUser,
|
||||||
|
reset: resetUser,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Perform commandline-parsing
|
||||||
|
const argv = minimist(process.argv.slice(2));
|
||||||
|
|
||||||
|
const keys = Object.keys(options);
|
||||||
|
const opts = keys.filter((key) => argv[key] !== undefined);
|
||||||
|
const action = opts[0];
|
||||||
|
|
||||||
|
// Check for options missing
|
||||||
|
if (opts.length === 0) {
|
||||||
|
showUsage(`You did not specify either ${keys.map((key) => `--${key}`).join(' or ')}!`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if both are specified
|
// Check if both are specified
|
||||||
if (argv["add"] != undefined && argv["del"] != undefined) {
|
if (opts.length > 1) {
|
||||||
console.log("You cannot add and delete at the same time!");
|
showUsage(`You cannot ${action.join(' and ')} at the same time!`);
|
||||||
console.log(usage);
|
}
|
||||||
process.exit(1);
|
// Check if not string
|
||||||
|
if (typeof argv[action] !== 'string') {
|
||||||
|
showUsage(`You must follow an email after --${action}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call respective processing functions
|
// Call respective processing functions
|
||||||
if (argv["add"] != undefined) {
|
options[action](argv).then(function() {
|
||||||
createUser(argv).then(function() {
|
process.exit(0);
|
||||||
process.exit(0);
|
});
|
||||||
});
|
|
||||||
} else if (argv["del"] != undefined) {
|
|
||||||
deleteUser(argv).then(function() {
|
|
||||||
process.exit(0);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
@ -1147,7 +1147,7 @@ const pdfPlugin = new Plugin(
|
||||||
|
|
||||||
const emojijsPlugin = new Plugin(
|
const emojijsPlugin = new Plugin(
|
||||||
// regexp to match emoji shortcodes :something:
|
// regexp to match emoji shortcodes :something:
|
||||||
/:([\d\D]*):/,
|
/:([^\s:]+):/,
|
||||||
|
|
||||||
(match, utils) => {
|
(match, utils) => {
|
||||||
const emoji = match[1] ? match[1].toLowerCase() : undefined
|
const emoji = match[1] ? match[1].toLowerCase() : undefined
|
||||||
|
|
Loading…
Reference in a new issue