@webbio/strapi-plugin-page-builder 0.9.9-platform → 0.9.10-authentication
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/admin/src/components/EditView/CollectionTypeSearch/index.tsx +1 -1
- package/admin/src/components/GlobalPlatformSelect/styles.ts +1 -1
- package/admin/src/utils/hooks/usePlatformFormData.ts +6 -10
- package/dist/package.json +9 -3
- package/dist/server/bootstrap.js +31 -1
- package/dist/server/content-types/category/schema.json +18 -0
- package/dist/server/content-types/index.js +9 -1
- package/dist/server/controllers/index.js +3 -1
- package/dist/server/controllers/private-content.js +10 -0
- package/dist/server/graphql/page-by-path.js +19 -2
- package/dist/server/register.js +13 -0
- package/dist/server/routes/index.js +17 -0
- package/dist/server/schema/page-end.json +8 -0
- package/dist/server/schema/platform-start.json +8 -0
- package/dist/server/services/builder.js +86 -0
- package/dist/server/services/constants/customUserConstants.js +16 -0
- package/dist/server/services/custom-user.js +161 -0
- package/dist/server/services/email.js +127 -0
- package/dist/server/services/index.js +5 -1
- package/dist/server/services/private-content/auth.js +0 -0
- package/dist/server/services/private-content/components/admin-email.json +22 -0
- package/dist/server/services/private-content/components/email.json +22 -0
- package/dist/server/services/private-content/components/platform-email.json +30 -0
- package/dist/server/services/private-content/constants/index.js +16 -0
- package/dist/server/services/private-content/email.js +3 -0
- package/dist/server/services/private-content/graphql/index.js +77 -0
- package/dist/server/services/private-content/graphql/resolvers/findOnePage.js +40 -0
- package/dist/server/services/private-content/graphql/resolvers/findPage.js +43 -0
- package/dist/server/services/private-content/graphql/resolvers/forgot-password.js +26 -0
- package/dist/server/services/private-content/graphql/resolvers/login.js +44 -0
- package/dist/server/services/private-content/graphql/resolvers/register.js +60 -0
- package/dist/server/services/private-content/graphql/resolvers/reset-password.js +41 -0
- package/dist/server/services/private-content/graphql/types/index.js +91 -0
- package/dist/server/services/private-content/graphql.js +128 -0
- package/dist/server/services/private-content/hash.js +0 -0
- package/dist/server/services/private-content/index.js +81 -0
- package/dist/server/services/private-content/mail-template/txtMail.email.template.text.js +12 -0
- package/dist/server/services/private-content/mail-template/txtMail.interface.js +2 -0
- package/dist/server/services/private-content/page.js +17 -0
- package/dist/server/services/private-content/platform.js +17 -0
- package/dist/server/services/private-content/schemas/index.js +30 -0
- package/dist/server/services/private-content/user.js +159 -0
- package/dist/server/utils/strapi.js +9 -1
- package/dist/shared/utils/constants.js +3 -1
- package/dist/tsconfig.server.tsbuildinfo +1 -1
- package/package.json +9 -3
- package/server/bootstrap.ts +39 -1
- package/server/content-types/category/schema.json +18 -0
- package/server/content-types/index.ts +7 -1
- package/server/controllers/index.ts +3 -1
- package/server/controllers/private-content.ts +10 -0
- package/server/graphql/page-by-path.ts +24 -2
- package/server/register.ts +14 -0
- package/server/routes/index.ts +17 -0
- package/server/schema/page-end.json +9 -1
- package/server/schema/platform-start.json +8 -0
- package/server/services/builder.ts +83 -1
- package/server/services/email.ts +122 -0
- package/server/services/index.ts +5 -1
- package/server/services/private-content/components/admin-email.json +23 -0
- package/server/services/private-content/components/email.json +23 -0
- package/server/services/private-content/components/platform-email.json +30 -0
- package/server/services/private-content/constants/index.ts +13 -0
- package/server/services/private-content/graphql/index.ts +88 -0
- package/server/services/private-content/graphql/resolvers/findOnePage.ts +40 -0
- package/server/services/private-content/graphql/resolvers/findPage.ts +45 -0
- package/server/services/private-content/graphql/resolvers/forgot-password.ts +26 -0
- package/server/services/private-content/graphql/resolvers/login.ts +51 -0
- package/server/services/private-content/graphql/resolvers/register.ts +68 -0
- package/server/services/private-content/graphql/resolvers/reset-password.ts +44 -0
- package/server/services/private-content/graphql/types/index.ts +98 -0
- package/server/services/private-content/index.ts +84 -0
- package/server/services/private-content/mail-template/txtMail.email.template.text.ts +7 -0
- package/server/services/private-content/mail-template/txtMail.interface.ts +7 -0
- package/server/services/private-content/page.ts +14 -0
- package/server/services/private-content/platform.ts +14 -0
- package/server/services/private-content/schemas/index.ts +28 -0
- package/server/services/private-content/user.ts +187 -0
- package/server/utils/strapi.ts +5 -0
- package/shared/utils/constants.ts +2 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extendGraphQL = void 0;
|
|
4
|
+
const utils_1 = require("@strapi/utils");
|
|
5
|
+
const schemas_1 = require("./schemas");
|
|
6
|
+
const constants_1 = require("./constants");
|
|
7
|
+
const { ApplicationError } = utils_1.errors;
|
|
8
|
+
const extendGraphQL = () => {
|
|
9
|
+
const extensionService = strapi.plugin('graphql').service('extension');
|
|
10
|
+
const extension = () => ({
|
|
11
|
+
typeDefs: `
|
|
12
|
+
input LoginInput {
|
|
13
|
+
email: String!
|
|
14
|
+
password: String!
|
|
15
|
+
platformId: ID!
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
input RegisterInput {
|
|
19
|
+
email: String!
|
|
20
|
+
password: String!
|
|
21
|
+
firstName: String
|
|
22
|
+
lastName: String
|
|
23
|
+
company: String
|
|
24
|
+
jobTitle: String
|
|
25
|
+
address: String
|
|
26
|
+
postalCode: String
|
|
27
|
+
city: String
|
|
28
|
+
country: String
|
|
29
|
+
phone: String
|
|
30
|
+
subscribeToNewsletter: Boolean
|
|
31
|
+
categories: [ID]
|
|
32
|
+
platformId: ID!
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type LoginResponse {
|
|
36
|
+
jwt: String
|
|
37
|
+
user: User
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
type RegisterResponse {
|
|
41
|
+
user: User
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
type ForgotPasswordResponse {
|
|
45
|
+
ok: Boolean!
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
type User {
|
|
49
|
+
id: ID!
|
|
50
|
+
email: String!
|
|
51
|
+
confirmed: Boolean
|
|
52
|
+
blocked: Boolean
|
|
53
|
+
activated: Boolean
|
|
54
|
+
platformId: ID!
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type Mutation {
|
|
58
|
+
platformLogin(input: LoginInput!): LoginResponse
|
|
59
|
+
platformRegister(input: RegisterInput!): RegisterResponse
|
|
60
|
+
platformForgotPassword(email: String!): ForgotPasswordResponse
|
|
61
|
+
}
|
|
62
|
+
`,
|
|
63
|
+
resolversConfig: {
|
|
64
|
+
'Mutation.platformLogin': {
|
|
65
|
+
auth: false
|
|
66
|
+
},
|
|
67
|
+
'Mutation.platformRegister': {
|
|
68
|
+
auth: false
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
resolvers: {
|
|
72
|
+
Mutation: {
|
|
73
|
+
platformLogin: {
|
|
74
|
+
resolve() {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
platformRegister: {
|
|
79
|
+
async resolve(parent, args, context) {
|
|
80
|
+
const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });
|
|
81
|
+
const settings = await pluginStore.get({ key: 'advanced' });
|
|
82
|
+
await (0, schemas_1.validateRegisterSchema)(args.input);
|
|
83
|
+
const { email, platformId } = args.input;
|
|
84
|
+
const role = await strapi
|
|
85
|
+
.query('plugin::users-permissions.role')
|
|
86
|
+
.findOne({ where: { type: settings.default_role } });
|
|
87
|
+
if (!role) {
|
|
88
|
+
throw new ApplicationError('Impossible to find the default role');
|
|
89
|
+
}
|
|
90
|
+
const conflictingUserCount = await strapi.query(constants_1.USER_MODEL).count({
|
|
91
|
+
where: {
|
|
92
|
+
email,
|
|
93
|
+
platform: {
|
|
94
|
+
id: platformId
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
if (conflictingUserCount > 0) {
|
|
99
|
+
throw new ApplicationError('Email is already taken');
|
|
100
|
+
}
|
|
101
|
+
const userData = {
|
|
102
|
+
...args.input,
|
|
103
|
+
role: role.id,
|
|
104
|
+
categories: args.input.categories,
|
|
105
|
+
platform: platformId,
|
|
106
|
+
email: email.toLowerCase(),
|
|
107
|
+
provider: 'local',
|
|
108
|
+
confirmed: false,
|
|
109
|
+
activateUser: false
|
|
110
|
+
};
|
|
111
|
+
const createdUser = await strapi.query(constants_1.USER_MODEL).create({
|
|
112
|
+
data: userData
|
|
113
|
+
});
|
|
114
|
+
const userModel = strapi.getModel(constants_1.USER_MODEL);
|
|
115
|
+
const sanitizedUser = utils_1.sanitize.contentAPI.output(createdUser, userModel, {
|
|
116
|
+
auth: false
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
user: sanitizedUser
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
extensionService.use(extension);
|
|
127
|
+
};
|
|
128
|
+
exports.extendGraphQL = extendGraphQL;
|
|
File without changes
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const strapi_1 = require("../../utils/strapi");
|
|
4
|
+
const user_1 = require("./user");
|
|
5
|
+
const graphql_1 = require("./graphql");
|
|
6
|
+
const platform_1 = require("./platform");
|
|
7
|
+
const page_1 = require("./page");
|
|
8
|
+
exports.default = {
|
|
9
|
+
async enablePrivateContent() {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
if (this.isPrivateContentEnabled) {
|
|
12
|
+
await ((_b = (_a = strapi.services) === null || _a === void 0 ? void 0 : _a['plugin::page-builder.builder']) === null || _b === void 0 ? void 0 : _b.buildComponents());
|
|
13
|
+
(0, user_1.extendUser)();
|
|
14
|
+
(0, user_1.extendControllers)();
|
|
15
|
+
(0, graphql_1.extendGraphQL)();
|
|
16
|
+
(0, platform_1.extendPlatform)();
|
|
17
|
+
(0, page_1.extendPage)();
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
isPrivateContentEnabled() {
|
|
21
|
+
const pageBuilderConfig = (0, strapi_1.getConfig)();
|
|
22
|
+
return (pageBuilderConfig === null || pageBuilderConfig === void 0 ? void 0 : pageBuilderConfig.privateContent) === true;
|
|
23
|
+
},
|
|
24
|
+
async activateUser(token) {
|
|
25
|
+
const jwtService = strapi.plugin('users-permissions').service('jwt');
|
|
26
|
+
const decodedToken = await jwtService.verify(token);
|
|
27
|
+
if (decodedToken) {
|
|
28
|
+
const user = await strapi.query('plugin::users-permissions.user').findOne({
|
|
29
|
+
where: {
|
|
30
|
+
id: decodedToken.userId,
|
|
31
|
+
platform: {
|
|
32
|
+
id: decodedToken.platformId
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
if (!user.confirmed && user.confirmationToken && user.confirmationToken === token) {
|
|
37
|
+
await strapi.entityService.update('plugin::users-permissions.user', user.id, {
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
data: { confirmed: true, confirmationToken: null }
|
|
40
|
+
});
|
|
41
|
+
await strapi.service('plugin::page-builder.email').sendAdminMail(user);
|
|
42
|
+
return ' User has been created';
|
|
43
|
+
}
|
|
44
|
+
throw new Error('User already activated');
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
async removeInactiveUsers() {
|
|
48
|
+
const oneDayAgo = new Date();
|
|
49
|
+
oneDayAgo.setHours(oneDayAgo.getHours() - 24);
|
|
50
|
+
const usersToDelete = await (await strapi.query('plugin::users-permissions.user').findMany({
|
|
51
|
+
where: {
|
|
52
|
+
$and: [
|
|
53
|
+
{
|
|
54
|
+
confirmed: {
|
|
55
|
+
$eq: false
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
createdAt: {
|
|
60
|
+
$lt: oneDayAgo
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
})).map((user) => {
|
|
66
|
+
return user.id;
|
|
67
|
+
});
|
|
68
|
+
try {
|
|
69
|
+
await strapi.query('plugin::users-permissions.user').deleteMany({
|
|
70
|
+
where: {
|
|
71
|
+
id: {
|
|
72
|
+
$in: usersToDelete
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.log(error);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.txtEmail = void 0;
|
|
7
|
+
const handlebars_1 = __importDefault(require("handlebars"));
|
|
8
|
+
const txtEmail = (mailData) => {
|
|
9
|
+
const template = handlebars_1.default.compile(mailData.text);
|
|
10
|
+
return template(mailData);
|
|
11
|
+
};
|
|
12
|
+
exports.txtEmail = txtEmail;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extendPage = void 0;
|
|
4
|
+
const constants_1 = require("../../../shared/utils/constants");
|
|
5
|
+
const extendPage = () => {
|
|
6
|
+
const pageContentType = strapi.contentType(constants_1.PAGE_UID);
|
|
7
|
+
pageContentType.attributes = {
|
|
8
|
+
...pageContentType.attributes,
|
|
9
|
+
isProtected: {
|
|
10
|
+
type: 'boolean',
|
|
11
|
+
required: false,
|
|
12
|
+
default: false
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
delete pageContentType.attributes.username;
|
|
16
|
+
};
|
|
17
|
+
exports.extendPage = extendPage;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extendPlatform = void 0;
|
|
4
|
+
const constants_1 = require("../../../shared/utils/constants");
|
|
5
|
+
const extendPlatform = () => {
|
|
6
|
+
const platformContentType = strapi.contentType(constants_1.PLATFORM_UID);
|
|
7
|
+
platformContentType.attributes = {
|
|
8
|
+
...platformContentType.attributes,
|
|
9
|
+
isProtected: {
|
|
10
|
+
type: 'boolean',
|
|
11
|
+
required: false,
|
|
12
|
+
default: false
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
delete platformContentType.attributes.username;
|
|
16
|
+
};
|
|
17
|
+
exports.extendPlatform = extendPlatform;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateResetPasswordSchema = exports.validateForgotPasswordSchema = exports.validateLoginSchema = exports.validateRegisterSchema = exports.resetPasswordSchema = exports.forgotPasswordSchema = exports.loginSchema = void 0;
|
|
4
|
+
const utils_1 = require("@strapi/utils");
|
|
5
|
+
const registerSchema = utils_1.yup.object({
|
|
6
|
+
email: utils_1.yup.string().email().required(),
|
|
7
|
+
password: utils_1.yup.string().required(),
|
|
8
|
+
platformId: utils_1.yup.number().required()
|
|
9
|
+
});
|
|
10
|
+
exports.loginSchema = utils_1.yup.object({
|
|
11
|
+
email: utils_1.yup.string().email().required(),
|
|
12
|
+
password: utils_1.yup.string().required(),
|
|
13
|
+
platformId: utils_1.yup.number().required()
|
|
14
|
+
});
|
|
15
|
+
exports.forgotPasswordSchema = utils_1.yup.object({
|
|
16
|
+
email: utils_1.yup.string().email().required(),
|
|
17
|
+
platformId: utils_1.yup.number().required()
|
|
18
|
+
});
|
|
19
|
+
exports.resetPasswordSchema = utils_1.yup.object({
|
|
20
|
+
password: utils_1.yup.string().required(),
|
|
21
|
+
resetPasswordToken: utils_1.yup.string().required()
|
|
22
|
+
});
|
|
23
|
+
const validateRegisterSchema = async (input) => (0, utils_1.validateYupSchema)(input, registerSchema);
|
|
24
|
+
exports.validateRegisterSchema = validateRegisterSchema;
|
|
25
|
+
const validateLoginSchema = async (input) => (0, utils_1.validateYupSchema)(input, exports.loginSchema);
|
|
26
|
+
exports.validateLoginSchema = validateLoginSchema;
|
|
27
|
+
const validateForgotPasswordSchema = async (input) => (0, utils_1.validateYupSchema)(input, exports.forgotPasswordSchema);
|
|
28
|
+
exports.validateForgotPasswordSchema = validateForgotPasswordSchema;
|
|
29
|
+
const validateResetPasswordSchema = async (input) => (0, utils_1.validateYupSchema)(input, exports.resetPasswordSchema);
|
|
30
|
+
exports.validateResetPasswordSchema = validateResetPasswordSchema;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.extendControllers = exports.extendUser = void 0;
|
|
7
|
+
const toString_1 = __importDefault(require("lodash/toString"));
|
|
8
|
+
const has_1 = __importDefault(require("lodash/has"));
|
|
9
|
+
const omit_1 = __importDefault(require("lodash/omit"));
|
|
10
|
+
const utils_1 = require("@strapi/utils");
|
|
11
|
+
const constants_1 = require("./constants");
|
|
12
|
+
const { ApplicationError, ValidationError, NotFoundError, ForbiddenError } = utils_1.errors;
|
|
13
|
+
const extendUser = () => {
|
|
14
|
+
const userContentType = strapi.contentType(constants_1.USER_MODEL);
|
|
15
|
+
userContentType.attributes = {
|
|
16
|
+
// Spread previous defined attributes
|
|
17
|
+
...userContentType.attributes,
|
|
18
|
+
// Add new, or override attributes
|
|
19
|
+
platform: {
|
|
20
|
+
type: 'relation',
|
|
21
|
+
relation: 'oneToOne',
|
|
22
|
+
target: 'api::platform.platform',
|
|
23
|
+
required: true
|
|
24
|
+
},
|
|
25
|
+
firstName: {
|
|
26
|
+
type: 'string'
|
|
27
|
+
},
|
|
28
|
+
lastName: {
|
|
29
|
+
type: 'string'
|
|
30
|
+
},
|
|
31
|
+
company: {
|
|
32
|
+
type: 'string'
|
|
33
|
+
},
|
|
34
|
+
jobTitle: {
|
|
35
|
+
type: 'string'
|
|
36
|
+
},
|
|
37
|
+
address: {
|
|
38
|
+
type: 'string'
|
|
39
|
+
},
|
|
40
|
+
postalCode: {
|
|
41
|
+
type: 'string'
|
|
42
|
+
},
|
|
43
|
+
city: {
|
|
44
|
+
type: 'string'
|
|
45
|
+
},
|
|
46
|
+
country: {
|
|
47
|
+
type: 'string'
|
|
48
|
+
},
|
|
49
|
+
phone: {
|
|
50
|
+
type: 'string'
|
|
51
|
+
},
|
|
52
|
+
activateUser: {
|
|
53
|
+
type: 'boolean',
|
|
54
|
+
default: false
|
|
55
|
+
},
|
|
56
|
+
categories: {
|
|
57
|
+
type: 'relation',
|
|
58
|
+
relation: 'oneToMany',
|
|
59
|
+
target: 'plugin::page-builder.category'
|
|
60
|
+
},
|
|
61
|
+
confirmMailSend: {
|
|
62
|
+
type: 'boolean',
|
|
63
|
+
private: true,
|
|
64
|
+
writable: false,
|
|
65
|
+
visible: false,
|
|
66
|
+
default: false
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
delete userContentType.attributes.username;
|
|
70
|
+
};
|
|
71
|
+
exports.extendUser = extendUser;
|
|
72
|
+
const extendControllers = () => {
|
|
73
|
+
const contentController = strapi.controller(constants_1.USER_CONTENT_MANAGER);
|
|
74
|
+
contentController.create = async (ctx) => {
|
|
75
|
+
var _a;
|
|
76
|
+
const { body } = ctx.request;
|
|
77
|
+
const { user: admin, userAbility } = ctx.state;
|
|
78
|
+
const { email } = body;
|
|
79
|
+
const platformId = body.platform.connect[0].id;
|
|
80
|
+
const pm = (_a = strapi === null || strapi === void 0 ? void 0 : strapi.admin) === null || _a === void 0 ? void 0 : _a.services.permission.createPermissionsManager({
|
|
81
|
+
ability: userAbility,
|
|
82
|
+
action: constants_1.ACTIONS.create,
|
|
83
|
+
model: constants_1.USER_MODEL
|
|
84
|
+
});
|
|
85
|
+
if (!pm.isAllowed) {
|
|
86
|
+
return ctx.forbidden();
|
|
87
|
+
}
|
|
88
|
+
const sanitizedBody = await pm.pickPermittedFieldsOf(body, { subject: constants_1.USER_MODEL });
|
|
89
|
+
const userWithSameEmail = await strapi.query(constants_1.USER_MODEL).findOne({
|
|
90
|
+
where: { $and: [{ email: email.toLowerCase() }, { platform: { id: platformId } }] }
|
|
91
|
+
});
|
|
92
|
+
if (userWithSameEmail) {
|
|
93
|
+
throw new ApplicationError('Email already taken');
|
|
94
|
+
}
|
|
95
|
+
const user = {
|
|
96
|
+
...sanitizedBody,
|
|
97
|
+
provider: 'local',
|
|
98
|
+
[constants_1.CREATED_BY_ATTRIBUTE]: admin.id,
|
|
99
|
+
[constants_1.UPDATED_BY_ATTRIBUTE]: admin.id
|
|
100
|
+
};
|
|
101
|
+
user.email = user.email.toLowerCase();
|
|
102
|
+
const advanced = await (strapi === null || strapi === void 0 ? void 0 : strapi.store({ type: 'plugin', name: 'users-permissions', key: 'advanced' }).get({}));
|
|
103
|
+
if (user.role.connect.length === 0) {
|
|
104
|
+
//@ts-ignore strapi types...
|
|
105
|
+
const defaultRole = await strapi.query(constants_1.USER_ROLE).findOne({ where: { type: advanced.default_role } });
|
|
106
|
+
user.role = defaultRole.id;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const data = await strapi.service(constants_1.CONTENT_ENTITY_MANAGER).create(user, constants_1.USER_MODEL);
|
|
110
|
+
const sanitizedData = await pm.sanitizeOutput(data, { action: constants_1.ACTIONS.read });
|
|
111
|
+
ctx.created(sanitizedData);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
throw new ApplicationError(error.message);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
contentController.update = async (ctx) => {
|
|
118
|
+
const { id } = ctx.params;
|
|
119
|
+
const { body } = ctx.request;
|
|
120
|
+
const { user: admin, userAbility } = ctx.state;
|
|
121
|
+
const { email, password } = body;
|
|
122
|
+
const { pm, entity } = await findEntityAndCheckPermissions(userAbility, constants_1.ACTIONS.edit, constants_1.USER_MODEL, id);
|
|
123
|
+
const user = entity;
|
|
124
|
+
const platformId = body.platform.connect.length > 0 ? body.platform.connect[0].id : entity.platform.id;
|
|
125
|
+
if ((0, has_1.default)(body, 'password') && !password && user.provider === 'local') {
|
|
126
|
+
throw new ValidationError('password.notNull');
|
|
127
|
+
}
|
|
128
|
+
//@ts-ignore
|
|
129
|
+
if ((0, has_1.default)(body, 'email')) {
|
|
130
|
+
const userWithSameEmail = await strapi
|
|
131
|
+
.query(constants_1.USER_MODEL)
|
|
132
|
+
.findOne({ where: { $and: [{ email: email.toLowerCase() }, { platform: { id: platformId } }] } });
|
|
133
|
+
if (userWithSameEmail && (0, toString_1.default)(userWithSameEmail.id) !== (0, toString_1.default)(id)) {
|
|
134
|
+
throw new ApplicationError('Email already taken');
|
|
135
|
+
}
|
|
136
|
+
body.email = body.email.toLowerCase();
|
|
137
|
+
}
|
|
138
|
+
const sanitizedData = await pm.pickPermittedFieldsOf(body, { subject: pm.toSubject(user) });
|
|
139
|
+
const updateData = (0, omit_1.default)({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');
|
|
140
|
+
const data = await strapi.service('plugin::content-manager.entity-manager').update({ id }, updateData, constants_1.USER_MODEL);
|
|
141
|
+
ctx.body = await pm.sanitizeOutput(data, { action: constants_1.ACTIONS.read });
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
exports.extendControllers = extendControllers;
|
|
145
|
+
const findEntityAndCheckPermissions = async (ability, action, model, id) => {
|
|
146
|
+
const entity = await strapi.query(constants_1.USER_MODEL).findOne({
|
|
147
|
+
where: { id },
|
|
148
|
+
populate: [`${constants_1.CREATED_BY_ATTRIBUTE}.roles`, 'platform']
|
|
149
|
+
});
|
|
150
|
+
if (!entity) {
|
|
151
|
+
throw new NotFoundError();
|
|
152
|
+
}
|
|
153
|
+
const pm = strapi.admin.services.permission.createPermissionsManager({ ability, action, model });
|
|
154
|
+
if (pm.ability.cannot(pm.action, pm.toSubject(entity))) {
|
|
155
|
+
throw new ForbiddenError();
|
|
156
|
+
}
|
|
157
|
+
const entityWithoutCreatorRoles = (0, omit_1.default)(entity, `${constants_1.CREATED_BY_ATTRIBUTE}.roles`);
|
|
158
|
+
return { pm, entity: entityWithoutCreatorRoles };
|
|
159
|
+
};
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getPopulatedEntity = exports.getDeepPopulate = void 0;
|
|
6
|
+
exports.getConfig = exports.getPopulatedEntity = exports.getDeepPopulate = void 0;
|
|
7
|
+
const pluginId_1 = __importDefault(require("../../admin/src/pluginId"));
|
|
4
8
|
const getDeepPopulate = (uid, populate, depth = 0) => {
|
|
5
9
|
if (populate) {
|
|
6
10
|
return populate;
|
|
@@ -37,3 +41,7 @@ const getPopulatedEntity = async (uid, id) => {
|
|
|
37
41
|
});
|
|
38
42
|
};
|
|
39
43
|
exports.getPopulatedEntity = getPopulatedEntity;
|
|
44
|
+
const getConfig = () => {
|
|
45
|
+
return strapi.config.get(`plugin.${pluginId_1.default}`);
|
|
46
|
+
};
|
|
47
|
+
exports.getConfig = getConfig;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PLATFORM = exports.PAGE_TYPE_PAGE = exports.PLATFORM_UID = exports.PAGE_TYPE_UID = exports.TEMPLATE_UID = exports.PAGE_UID = void 0;
|
|
3
|
+
exports.PAGE_BUILDER_EMAIL_PLUGIN = exports.USER_PERMISSION_USER_PLUGIN = exports.PLATFORM = exports.PAGE_TYPE_PAGE = exports.PLATFORM_UID = exports.PAGE_TYPE_UID = exports.TEMPLATE_UID = exports.PAGE_UID = void 0;
|
|
4
4
|
exports.PAGE_UID = 'api::page.page';
|
|
5
5
|
exports.TEMPLATE_UID = 'api::template.template';
|
|
6
6
|
exports.PAGE_TYPE_UID = 'api::page-type.page-type';
|
|
7
7
|
exports.PLATFORM_UID = 'api::platform.platform';
|
|
8
8
|
exports.PAGE_TYPE_PAGE = 'page';
|
|
9
9
|
exports.PLATFORM = 'platform';
|
|
10
|
+
exports.USER_PERMISSION_USER_PLUGIN = 'plugin::users-permissions.user';
|
|
11
|
+
exports.PAGE_BUILDER_EMAIL_PLUGIN = 'plugin::page-builder.email';
|