@strapi/strapi
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
86 lines (83 loc) • 2.68 kB
JavaScript
import { createCommand } from 'commander';
import { yup } from '@strapi/utils';
import _ from 'lodash';
import { compileStrapi, createStrapi } from '@strapi/core';
import { runAction } from '../../utils/helpers.mjs';
import { getInquirer } from '../../utils/get-inquirer.mjs';
const emailValidator = yup.string().email('Invalid email address').lowercase();
const adminDeleteSchema = yup.object().shape({
email: emailValidator
});
/**
* Same as create-user: `QuestionCollection` so async `validate` matches Inquirer typings
* (not `ReadonlyArray<DistinctQuestion<Answers>>`).
*/ const promptQuestions = [
{
type: 'input',
name: 'email',
message: 'Admin email?',
async validate (value) {
const validEmail = await emailValidator.validate(value);
return validEmail === value || validEmail;
}
},
{
type: 'confirm',
name: 'confirm',
message: 'Do you really want to delete this admin?'
}
];
async function deleteAdmin({ email }) {
const appContext = await compileStrapi();
const app = await createStrapi(appContext).load();
const user = await app.admin.services.user.findOneByEmail(email);
if (!user) {
console.error(`User with email "${email}" does not exist`);
process.exit(1);
}
try {
await app.admin.services.user.deleteById(user.id);
} catch (err) {
console.error(err.message);
process.exit(1);
}
console.log(`Successfully deleted admin`);
process.exit(0);
}
/**
* Delete an admin user
*/ const action = async (cmdOptions = {})=>{
let { email } = cmdOptions;
if (_.isEmpty(email) && process.stdin.isTTY) {
const inquirer = await getInquirer();
const inquiry = await inquirer.prompt(promptQuestions);
if (!inquiry.confirm) {
process.exit(0);
}
({ email } = inquiry);
}
if (_.isEmpty(email)) {
console.error('Missing required option `email`');
process.exit(1);
}
try {
await adminDeleteSchema.validate({
email
});
} catch (err) {
if (err instanceof yup.ValidationError) {
console.error(err.errors[0]);
}
process.exit(1);
}
return deleteAdmin({
email
});
};
/**
* `$ strapi admin:delete-user`
*/ const command = ()=>{
return createCommand('admin:delete-user').alias('admin:delete').description('Delete an existing admin').option('-e, --email <email>', 'Email of the current admin').action(runAction('admin:delete-user', action));
};
export { action, command };
//# sourceMappingURL=delete-user.mjs.map