{"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  .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<inquirer.DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\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","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","inquiry","inquirer","prompt","confirm","err","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"mappings":"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"}