UNPKG

@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

1 lines 9.48 kB
{"version":3,"file":"create-user.mjs","sources":["../../../../../src/cli/commands/admin/create-user.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport type { QuestionCollection } from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n firstname?: string;\n lastname?: string;\n}\n\nconst emailValidator = yup.string().email('Invalid email address').lowercase();\n\nconst passwordValidator = yup\n .string()\n .min(8, 'Password must be at least 8 characters long')\n .test('lowercase', 'Password must contain at least one lowercase character', (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n })\n .test('uppercase', 'Password must contain at least one uppercase character', (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n })\n .test('number', 'Password must contain at least one number', (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n });\n\nconst adminCreateSchema = yup.object().shape({\n email: emailValidator,\n password: passwordValidator,\n firstname: yup.string().trim().required('First name is required'),\n lastname: yup.string(),\n});\n\ninterface Answers {\n email: string;\n password: string;\n firstname: string;\n lastname: string;\n confirm: boolean;\n}\n\n/**\n * It's not an observable, in reality this is\n * `ReadOnlyArray<DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\nconst promptQuestions: QuestionCollection<Answers> = [\n {\n type: 'input',\n name: 'email',\n message: 'Admin email?',\n async validate(value: string) {\n const validEmail = await emailValidator.validate(value);\n return validEmail === value || validEmail;\n },\n },\n {\n type: 'password',\n name: 'password',\n message: 'Admin password?',\n async validate(value: string) {\n const validPassword = await passwordValidator.validate(value);\n return validPassword === value || validPassword;\n },\n },\n { type: 'input', name: 'firstname', message: 'First name?' },\n { type: 'input', name: 'lastname', message: 'Last name?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Do you really want to create a new admin?',\n },\n];\n\nasync function createAdmin({ email, password, firstname, lastname }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const user = await app.admin!.services.user.exists({ email });\n\n if (user) {\n console.error(`User with email \"${email}\" already exists`);\n process.exit(1);\n }\n\n const superAdminRole = await app.admin!.services.role.getSuperAdmin();\n\n await app.admin!.services.user.create({\n email,\n firstname,\n lastname,\n isActive: true,\n roles: [superAdminRole.id],\n ...(password && { password, registrationToken: null }),\n });\n\n console.log(`Successfully created new admin`);\n process.exit(0);\n}\n\n/**\n * Create new admin user\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n let { email, password, firstname, lastname } = cmdOptions;\n\n if (\n _.isEmpty(email) &&\n _.isEmpty(password) &&\n _.isEmpty(firstname) &&\n _.isEmpty(lastname) &&\n process.stdin.isTTY\n ) {\n const inquirer = await getInquirer();\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n ({ email, password, firstname, lastname } = inquiry);\n }\n\n try {\n await adminCreateSchema.validate({ email, password, firstname, lastname });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n console.error(err.errors[0]);\n }\n\n process.exit(1);\n }\n\n return createAdmin({ email, password, firstname, lastname });\n};\n\n/**\n * `$ strapi admin:create-user`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:create-user')\n .alias('admin:create')\n .description('Create a new admin')\n .option('-e, --email <email>', 'Email of the new admin')\n .option('-p, --password <password>', 'Password of the new admin')\n .option('-f, --firstname <first name>', 'First name of the new admin')\n .option('-l, --lastname <last name>', 'Last name of the new admin')\n .action(runAction('admin:create-user', action));\n};\n\nexport { action, command };\n"],"names":["emailValidator","yup","string","email","lowercase","passwordValidator","min","test","value","adminCreateSchema","object","shape","password","firstname","trim","required","lastname","promptQuestions","type","name","message","validate","validEmail","validPassword","createAdmin","appContext","compileStrapi","app","createStrapi","load","user","admin","services","exists","console","error","process","exit","superAdminRole","role","getSuperAdmin","create","isActive","roles","id","registrationToken","log","action","cmdOptions","_","isEmpty","stdin","isTTY","inquirer","getInquirer","inquiry","prompt","confirm","err","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"mappings":"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"}