{"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 inquirer from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\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  .matches(/[a-z]/, 'Password must contain at least one lowercase character')\n  .matches(/[A-Z]/, 'Password must contain at least one uppercase character')\n  .matches(/\\d/, 'Password must contain at least one number');\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<inquirer.DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\n// eslint-disable-next-line rxjs/finnish\nconst promptQuestions: inquirer.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 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","matches","adminCreateSchema","object","shape","password","firstname","trim","required","lastname","promptQuestions","type","name","message","validate","value","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","inquiry","inquirer","prompt","confirm","err","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"mappings":"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"}