Blame view

src/extensions/users-permissions/strapi-server.js 4.17 KB
1 2 3 4
const utils = require("@strapi/utils");

const _ = require("lodash");
const { sanitize } = utils;
5
const { ApplicationError, ValidationError } = utils.errors;
6 7 8
const {
  validateRegisterBody,
} = require("@strapi/plugin-users-permissions/server/controllers/validation/auth");
9
const { getService } = require("@strapi/plugin-users-permissions/server/utils");
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

const sanitizeUser = (user, ctx) => {
  const { auth } = ctx.state;
  const userSchema = strapi.getModel("plugin::users-permissions.user");

  return sanitize.contentAPI.output(user, userSchema, { auth });
};

const userPermissionExtension = (plugin) => {
  /** Example of overriding and adding a new endpoint, check the section where we have registered this as a route below. */
  plugin.controllers.user.updateMe = (ctx) => {
    ctx.params.id = ctx.state.user.id;
    return plugin.controllers.user.update(ctx);
  };

  /** Example of overriding an existing route. */
  plugin.controllers.auth.register = async (ctx) => {
jay committed
27
    // console.log(ctx.request.body);
28 29 30 31 32
    const pluginStore = await strapi.store({
      type: "plugin",
      name: "users-permissions",
    });
    const settings = await pluginStore.get({ key: "advanced" });
jay committed
33
    // console.log("settings", settings);
34 35 36
    if (!settings.allow_register) {
      throw new ApplicationError("Register action is currently disabled");
    }
jay committed
37
    // console.log("here");
38 39 40 41 42 43 44 45 46
    const params = {
      ..._.omit(ctx.request.body, [
        "confirmed",
        "blocked",
        "resetPasswordToken",
        "provider",
      ]),
      provider: "local",
    };
jay committed
47
    // console.log("email", params);
48

.  
jay committed
49 50 51 52
    await validateRegisterBody(params);
    console.log("params", params);
    console.log("ctx.request.body", ctx.request.body);
    const newUserRole = params?.role ? params?.role : settings.default_role;
53 54 55
    const role = await strapi
      .query("plugin::users-permissions.role")
      .findOne({ where: { name: newUserRole } });
jay committed
56
    // console.log("role vendor", role);
57
    if (!role) {
jay committed
58
      throw new ApplicationError("Please find a valid user role.");
59 60
    }

jay committed
61
    const { email, username, provider, phone } = params;
62 63
    const identifierFilter = {
      $or: [
jay committed
64 65
        { email: email },
        { username: email },
66
        { username },
jay committed
67
        { email: username },
jay committed
68
        {phone: phone}
69 70 71 72 73 74 75
      ],
    };
    const conflictingUserCount = await strapi
      .query("plugin::users-permissions.user")
      .count({
        where: { ...identifierFilter, provider },
      });
jay committed
76

.  
jay committed
77
    if (conflictingUserCount > 0) {
.  
jay committed
78 79 80 81
      return ctx.send({
        status: "fail",
        message: "Email or phone number already taken.",
      });
.  
jay committed
82
    }
83

jay committed
84 85 86 87 88 89
    if (settings.unique_email) {
      const conflictingUserCount = await strapi
        .query("plugin::users-permissions.user")
        .count({
          where: { ...identifierFilter },
        });
90

jay committed
91
      if (conflictingUserCount > 0) {
.  
jay committed
92 93 94 95
        return ctx.send({
          status: "fail",
          message: "Email or phone number already taken.",
        });
jay committed
96 97
      }
    }
98 99 100 101

    let newUser = {
      ...params,
      role: role.id,
jay committed
102
      email: email,
103
      username,
jay committed
104
      confirmed: false,
jay committed
105
      phone: phone
106
    };
jay committed
107

108 109 110 111 112 113
    const user = await strapi
      .plugin("users-permissions")
      .service("user")
      .add(newUser);

    const sanitizedUser = await sanitizeUser(user, ctx);
.  
jay committed
114

jay committed
115 116 117 118 119 120 121 122 123 124 125 126
    if (settings.email_confirmation) {
      try {
        await strapi
          .plugin("users-permissions")
          .service("user")
          .sendConfirmationEmail(sanitizedUser);
      } catch (err) {
        throw new ApplicationError(err.message);
      }

      return ctx.send({ user: sanitizedUser });
    }
127 128 129 130 131

    const jwt = strapi
      .plugin("users-permissions")
      .service("jwt")
      .issue(_.pick(user, ["id"]));
jay committed
132

133 134 135 136 137 138
    return ctx.send({
      jwt,
      user: sanitizedUser,
    });
  };

139
  /** Endpoint used to allow edits on a user done by currently logged in user only their own record. */
140 141 142 143 144
  plugin.routes["content-api"].routes.push({
    method: "PUT",
    path: "/users/me",
    handler: "user.updateMe",
  });
Harish Patel committed
145 146

  /** Endpoints used to facilitate channel partner login with otp */
147

Harish Patel committed
148 149
  /** Endpoints used to facilitate end user login with otp */

150 151 152 153
  return plugin;
};

module.exports = userPermissionExtension;