{"version":3,"file":"role.mjs","sources":["../../../server/controllers/role.js"],"sourcesContent":["'use strict';\n\nconst _ = require('lodash');\nconst { async, errors } = require('@strapi/utils');\nconst { getService } = require('../utils');\nconst { validateDeleteRoleBody } = require('./validation/user');\n\nconst { ApplicationError, ValidationError } = errors;\n\nconst sanitizeOutput = async (role) => {\n  const { sanitizeLocalizationFields } = strapi.plugin('i18n').service('sanitize');\n  const schema = strapi.getModel('plugin::users-permissions.role');\n\n  return async.pipe(sanitizeLocalizationFields(schema))(role);\n};\n\nmodule.exports = {\n  /**\n   * Default action.\n   *\n   * @return {Object}\n   */\n  async createRole(ctx) {\n    if (_.isEmpty(ctx.request.body)) {\n      throw new ValidationError('Request body cannot be empty');\n    }\n\n    await getService('role').createRole(ctx.request.body);\n\n    ctx.send({ ok: true });\n  },\n\n  async findOne(ctx) {\n    const { id } = ctx.params;\n\n    const role = await getService('role').findOne(id);\n\n    if (!role) {\n      return ctx.notFound();\n    }\n\n    const safeRole = await sanitizeOutput(role);\n\n    ctx.send({ role: safeRole });\n  },\n\n  async find(ctx) {\n    const roles = await getService('role').find();\n\n    const safeRoles = await Promise.all(roles.map(sanitizeOutput));\n\n    ctx.send({ roles: safeRoles });\n  },\n\n  async updateRole(ctx) {\n    const roleID = ctx.params.role;\n\n    if (_.isEmpty(ctx.request.body)) {\n      throw new ValidationError('Request body cannot be empty');\n    }\n\n    await getService('role').updateRole(roleID, ctx.request.body);\n\n    ctx.send({ ok: true });\n  },\n\n  async deleteRole(ctx) {\n    const roleID = ctx.params.role;\n\n    if (!roleID) {\n      await validateDeleteRoleBody(ctx.params);\n    }\n\n    // Fetch public role.\n    const publicRole = await strapi.db\n      .query('plugin::users-permissions.role')\n      .findOne({ where: { type: 'public' } });\n\n    const publicRoleID = publicRole.id;\n\n    // Prevent from removing the public role.\n    if (roleID.toString() === publicRoleID.toString()) {\n      throw new ApplicationError('Cannot delete public role');\n    }\n\n    await getService('role').deleteRole(roleID, publicRoleID);\n\n    ctx.send({ ok: true });\n  },\n};\n"],"names":["_","require$$0","async","errors","require$$1","getService","require$$2","validateDeleteRoleBody","require$$3","ApplicationError","ValidationError","sanitizeOutput","role","sanitizeLocalizationFields","strapi","plugin","service","schema","getModel","pipe","createRole","ctx","isEmpty","request","body","send","ok","findOne","id","params","notFound","safeRole","find","roles","safeRoles","Promise","all","map","updateRole","roleID","deleteRole","publicRole","db","query","where","type","publicRoleID","toString"],"mappings":"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"}