{"version":3,"file":"index.mjs","sources":["../../../server/bootstrap/index.js"],"sourcesContent":["'use strict';\n\n/**\n * An asynchronous bootstrap function that runs before\n * your application gets started.\n *\n * This gives you an opportunity to set up your data model,\n * run jobs, or perform some special logic.\n */\nconst crypto = require('crypto');\nconst _ = require('lodash');\nconst { getService } = require('../utils');\nconst usersPermissionsActions = require('./users-permissions-actions');\nconst {\n  DEFAULT_ACCESS_TOKEN_LIFESPAN,\n  DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN,\n  DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN,\n  DEFAULT_MAX_SESSION_LIFESPAN,\n  DEFAULT_IDLE_SESSION_LIFESPAN,\n} = require('../services/constants');\n\nconst getSessionManager = () => {\n  const manager = strapi.sessionManager;\n  return manager ?? null;\n};\n\nconst initGrant = async (pluginStore) => {\n  const allProviders = getService('providers-registry').getAll();\n\n  const grantConfig = Object.entries(allProviders).reduce((acc, [name, provider]) => {\n    const { icon, enabled, grantConfig } = provider;\n\n    acc[name] = {\n      icon,\n      enabled,\n      ...grantConfig,\n    };\n    return acc;\n  }, {});\n\n  const prevGrantConfig = (await pluginStore.get({ key: 'grant' })) || {};\n\n  if (!prevGrantConfig || !_.isEqual(prevGrantConfig, grantConfig)) {\n    // merge with the previous provider config.\n    _.keys(grantConfig).forEach((key) => {\n      if (key in prevGrantConfig) {\n        grantConfig[key] = _.merge(grantConfig[key], prevGrantConfig[key]);\n      }\n    });\n    await pluginStore.set({ key: 'grant', value: grantConfig });\n  }\n};\n\nconst initEmails = async (pluginStore) => {\n  if (!(await pluginStore.get({ key: 'email' }))) {\n    const value = {\n      reset_password: {\n        display: 'Email.template.reset_password',\n        icon: 'sync',\n        options: {\n          from: {\n            name: 'Administration Panel',\n            email: 'no-reply@strapi.io',\n          },\n          response_email: '',\n          object: 'Reset password',\n          message: `<p>We heard that you lost your password. Sorry about that!</p>\n\n<p>But don’t worry! You can use the following link to reset your password:</p>\n<p><%= URL %>?code=<%= TOKEN %></p>\n\n<p>Thanks.</p>`,\n        },\n      },\n      email_confirmation: {\n        display: 'Email.template.email_confirmation',\n        icon: 'check-square',\n        options: {\n          from: {\n            name: 'Administration Panel',\n            email: 'no-reply@strapi.io',\n          },\n          response_email: '',\n          object: 'Account confirmation',\n          message: `<p>Thank you for registering!</p>\n\n<p>You have to confirm your email address. Please click on the link below.</p>\n\n<p><%= URL %>?confirmation=<%= CODE %></p>\n\n<p>Thanks.</p>`,\n        },\n      },\n    };\n\n    await pluginStore.set({ key: 'email', value });\n  }\n};\n\nconst initAdvancedOptions = async (pluginStore) => {\n  if (!(await pluginStore.get({ key: 'advanced' }))) {\n    const value = {\n      unique_email: true,\n      allow_register: true,\n      email_confirmation: false,\n      email_reset_password: null,\n      email_confirmation_redirection: null,\n      default_role: 'authenticated',\n    };\n\n    await pluginStore.set({ key: 'advanced', value });\n  }\n};\n\nmodule.exports = async ({ strapi }) => {\n  const pluginStore = strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n  await initGrant(pluginStore);\n  await initEmails(pluginStore);\n  await initAdvancedOptions(pluginStore);\n\n  await strapi\n    .service('admin::permission')\n    .actionProvider.registerMany(usersPermissionsActions.actions);\n\n  await getService('users-permissions').initialize();\n\n  // Define users-permissions origin configuration for sessionManager\n  const upConfig = strapi.config.get('plugin::users-permissions');\n  const sessionManager = getSessionManager();\n\n  if (sessionManager) {\n    sessionManager.defineOrigin('users-permissions', {\n      jwtSecret: upConfig.jwtSecret || strapi.config.get('admin.auth.secret'),\n      accessTokenLifespan: upConfig.sessions?.accessTokenLifespan || DEFAULT_ACCESS_TOKEN_LIFESPAN,\n      maxRefreshTokenLifespan:\n        upConfig.sessions?.maxRefreshTokenLifespan || DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN,\n      idleRefreshTokenLifespan:\n        upConfig.sessions?.idleRefreshTokenLifespan || DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN,\n      maxSessionLifespan: upConfig.sessions?.maxSessionLifespan || DEFAULT_MAX_SESSION_LIFESPAN,\n      idleSessionLifespan: upConfig.sessions?.idleSessionLifespan || DEFAULT_IDLE_SESSION_LIFESPAN,\n      algorithm: upConfig.jwt?.algorithm,\n      jwtOptions: upConfig.jwt || {},\n    });\n  }\n\n  if (!strapi.config.get('plugin::users-permissions.jwtSecret')) {\n    if (process.env.NODE_ENV !== 'development') {\n      throw new Error(\n        `Missing jwtSecret. Please, set configuration variable \"jwtSecret\" for the users-permissions plugin in config/plugins.js (ex: you can generate one using Node with \\`crypto.randomBytes(16).toString('base64')\\`).\nFor security reasons, prefer storing the secret in an environment variable and read it in config/plugins.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`\n      );\n    }\n\n    const jwtSecret = crypto.randomBytes(16).toString('base64');\n\n    strapi.config.set('plugin::users-permissions.jwtSecret', jwtSecret);\n\n    if (!process.env.JWT_SECRET) {\n      const envPath = process.env.ENV_PATH || '.env';\n      strapi.fs.appendFile(envPath, `JWT_SECRET=${jwtSecret}\\n`);\n      strapi.log.info(\n        `The Users & Permissions plugin automatically generated a jwt secret and stored it in ${envPath} under the name JWT_SECRET.`\n      );\n    }\n  }\n};\n"],"names":["crypto","require$$0","_","require$$1","getService","require$$2","usersPermissionsActions","require$$3","DEFAULT_ACCESS_TOKEN_LIFESPAN","DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN","DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN","DEFAULT_MAX_SESSION_LIFESPAN","DEFAULT_IDLE_SESSION_LIFESPAN","require$$4","getSessionManager","manager","strapi","sessionManager","initGrant","pluginStore","allProviders","getAll","grantConfig","Object","entries","reduce","acc","name","provider","icon","enabled","prevGrantConfig","get","key","isEqual","keys","forEach","merge","set","value","initEmails","reset_password","display","options","from","email","response_email","object","message","email_confirmation","initAdvancedOptions","unique_email","allow_register","email_reset_password","email_confirmation_redirection","default_role","bootstrap","store","type","service","actionProvider","registerMany","actions","initialize","upConfig","config","defineOrigin","jwtSecret","accessTokenLifespan","sessions","maxRefreshTokenLifespan","idleRefreshTokenLifespan","maxSessionLifespan","idleSessionLifespan","algorithm","jwt","jwtOptions","process","env","NODE_ENV","Error","randomBytes","toString","JWT_SECRET","envPath","ENV_PATH","fs","appendFile","log","info"],"mappings":"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"}