strapi-server.js
4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
const utils = require("@strapi/utils");
const _ = require("lodash");
const { sanitize } = utils;
const { ApplicationError, ValidationError } = utils.errors;
const {
validateRegisterBody,
} = require("@strapi/plugin-users-permissions/server/controllers/validation/auth");
const { getService } = require("@strapi/plugin-users-permissions/server/utils");
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) => {
// console.log(ctx.request.body);
const pluginStore = await strapi.store({
type: "plugin",
name: "users-permissions",
});
const settings = await pluginStore.get({ key: "advanced" });
// console.log("settings", settings);
if (!settings.allow_register) {
throw new ApplicationError("Register action is currently disabled");
}
// console.log("here");
const params = {
..._.omit(ctx.request.body, [
"confirmed",
"blocked",
"resetPasswordToken",
"provider",
]),
provider: "local",
};
// console.log("email", params);
await validateRegisterBody(params);
console.log("params", params);
console.log("ctx.request.body", ctx.request.body);
const newUserRole = params?.role ? params?.role : settings.default_role;
const role = await strapi
.query("plugin::users-permissions.role")
.findOne({ where: { name: newUserRole } });
// console.log("role vendor", role);
if (!role) {
throw new ApplicationError("Please find a valid user role.");
}
const { email, username, provider, phone } = params;
const identifierFilter = {
$or: [
{ email: email },
{ username: email },
{ username },
{ email: username },
{phone: phone}
],
};
const conflictingUserCount = await strapi
.query("plugin::users-permissions.user")
.count({
where: { ...identifierFilter, provider },
});
if (conflictingUserCount > 0) {
return ctx.send({
status: "fail",
message: "Email or phone number already taken.",
conflictingUserCount
});
}
if (settings.unique_email) {
const conflictingUserCount = await strapi
.query("plugin::users-permissions.user")
.count({
where: { ...identifierFilter },
});
if (conflictingUserCount > 0) {
return ctx.send({
status: "fail",
message: "Email or phone number already taken.",
conflictingUserCount
});
}
}
let newUser = {
...params,
role: role.id,
email: email,
username,
confirmed: false,
phone: phone
};
const user = await strapi
.plugin("users-permissions")
.service("user")
.add(newUser);
const sanitizedUser = await sanitizeUser(user, ctx);
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 });
}
const jwt = strapi
.plugin("users-permissions")
.service("jwt")
.issue(_.pick(user, ["id"]));
return ctx.send({
jwt,
user: sanitizedUser,
});
};
/** Endpoint used to allow edits on a user done by currently logged in user only their own record. */
plugin.routes["content-api"].routes.push({
method: "PUT",
path: "/users/me",
handler: "user.updateMe",
});
/** Endpoints used to facilitate channel partner login with otp */
/** Endpoints used to facilitate end user login with otp */
return plugin;
};
module.exports = userPermissionExtension;