@webbio/strapi-plugin-page-builder 0.9.9-platform → 0.9.11-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.
Files changed (85) hide show
  1. package/README.md +30 -0
  2. package/admin/src/components/EditView/CollectionTypeSearch/index.tsx +1 -1
  3. package/admin/src/components/GlobalPlatformSelect/styles.ts +1 -1
  4. package/admin/src/utils/hooks/usePlatformFormData.ts +6 -10
  5. package/dist/package.json +9 -3
  6. package/dist/server/bootstrap.js +31 -1
  7. package/dist/server/content-types/category/schema.json +18 -0
  8. package/dist/server/content-types/index.js +9 -1
  9. package/dist/server/controllers/index.js +3 -1
  10. package/dist/server/controllers/private-content.js +10 -0
  11. package/dist/server/graphql/page-by-path.js +22 -2
  12. package/dist/server/policies/index.js +7 -1
  13. package/dist/server/policies/isAuthorizedPage.js +11 -0
  14. package/dist/server/register.js +13 -0
  15. package/dist/server/routes/index.js +17 -0
  16. package/dist/server/schema/page-end.json +8 -0
  17. package/dist/server/schema/platform-start.json +8 -0
  18. package/dist/server/services/builder.js +86 -0
  19. package/dist/server/services/constants/customUserConstants.js +16 -0
  20. package/dist/server/services/custom-user.js +161 -0
  21. package/dist/server/services/email.js +127 -0
  22. package/dist/server/services/index.js +5 -1
  23. package/dist/server/services/private-content/auth.js +0 -0
  24. package/dist/server/services/private-content/components/admin-email.json +22 -0
  25. package/dist/server/services/private-content/components/email.json +22 -0
  26. package/dist/server/services/private-content/components/platform-email.json +30 -0
  27. package/dist/server/services/private-content/constants/index.js +16 -0
  28. package/dist/server/services/private-content/email.js +3 -0
  29. package/dist/server/services/private-content/graphql/index.js +77 -0
  30. package/dist/server/services/private-content/graphql/resolvers/findOnePage.js +40 -0
  31. package/dist/server/services/private-content/graphql/resolvers/findPage.js +43 -0
  32. package/dist/server/services/private-content/graphql/resolvers/forgot-password.js +26 -0
  33. package/dist/server/services/private-content/graphql/resolvers/login.js +44 -0
  34. package/dist/server/services/private-content/graphql/resolvers/register.js +60 -0
  35. package/dist/server/services/private-content/graphql/resolvers/reset-password.js +41 -0
  36. package/dist/server/services/private-content/graphql/types/index.js +91 -0
  37. package/dist/server/services/private-content/graphql.js +128 -0
  38. package/dist/server/services/private-content/hash.js +0 -0
  39. package/dist/server/services/private-content/index.js +81 -0
  40. package/dist/server/services/private-content/mail-template/txtMail.email.template.text.js +12 -0
  41. package/dist/server/services/private-content/mail-template/txtMail.interface.js +2 -0
  42. package/dist/server/services/private-content/page.js +17 -0
  43. package/dist/server/services/private-content/platform.js +17 -0
  44. package/dist/server/services/private-content/schemas/index.js +30 -0
  45. package/dist/server/services/private-content/user.js +159 -0
  46. package/dist/server/utils/strapi.js +9 -1
  47. package/dist/shared/utils/constants.js +3 -1
  48. package/dist/tsconfig.server.tsbuildinfo +1 -1
  49. package/package.json +9 -3
  50. package/server/bootstrap.ts +39 -1
  51. package/server/content-types/category/schema.json +18 -0
  52. package/server/content-types/index.ts +7 -1
  53. package/server/controllers/index.ts +3 -1
  54. package/server/controllers/private-content.ts +10 -0
  55. package/server/graphql/page-by-path.ts +28 -2
  56. package/server/policies/index.ts +5 -1
  57. package/server/policies/isAuthorizedPage.ts +11 -0
  58. package/server/register.ts +14 -0
  59. package/server/routes/index.ts +17 -0
  60. package/server/schema/page-end.json +8 -0
  61. package/server/schema/platform-start.json +8 -0
  62. package/server/services/builder.ts +83 -1
  63. package/server/services/email.ts +122 -0
  64. package/server/services/index.ts +5 -1
  65. package/server/services/private-content/components/admin-email.json +22 -0
  66. package/server/services/private-content/components/email.json +22 -0
  67. package/server/services/private-content/components/platform-email.json +30 -0
  68. package/server/services/private-content/constants/index.ts +13 -0
  69. package/server/services/private-content/graphql/index.ts +88 -0
  70. package/server/services/private-content/graphql/resolvers/findOnePage.ts +40 -0
  71. package/server/services/private-content/graphql/resolvers/findPage.ts +45 -0
  72. package/server/services/private-content/graphql/resolvers/forgot-password.ts +26 -0
  73. package/server/services/private-content/graphql/resolvers/login.ts +51 -0
  74. package/server/services/private-content/graphql/resolvers/register.ts +68 -0
  75. package/server/services/private-content/graphql/resolvers/reset-password.ts +44 -0
  76. package/server/services/private-content/graphql/types/index.ts +98 -0
  77. package/server/services/private-content/index.ts +84 -0
  78. package/server/services/private-content/mail-template/txtMail.email.template.text.ts +7 -0
  79. package/server/services/private-content/mail-template/txtMail.interface.ts +7 -0
  80. package/server/services/private-content/page.ts +14 -0
  81. package/server/services/private-content/platform.ts +14 -0
  82. package/server/services/private-content/schemas/index.ts +28 -0
  83. package/server/services/private-content/user.ts +187 -0
  84. package/server/utils/strapi.ts +5 -0
  85. package/shared/utils/constants.ts +2 -0
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.platformRegister = void 0;
4
+ const utils_1 = require("@strapi/utils");
5
+ const utils_2 = require("@strapi/utils");
6
+ const constants_1 = require("../../constants");
7
+ const schemas_1 = require("../../schemas");
8
+ const { ApplicationError } = utils_2.errors;
9
+ exports.platformRegister = {
10
+ async resolve(parent, args, context) {
11
+ const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });
12
+ const settings = await pluginStore.get({ key: 'advanced' });
13
+ await (0, schemas_1.validateRegisterSchema)(args.input);
14
+ const { email, platformId } = args.input;
15
+ const role = await strapi
16
+ .query('plugin::users-permissions.role')
17
+ .findOne({ where: { type: settings.default_role } });
18
+ if (!role) {
19
+ throw new ApplicationError('Impossible to find the default role');
20
+ }
21
+ const conflictingUserCount = await strapi.query(constants_1.USER_MODEL).count({
22
+ where: {
23
+ $and: [
24
+ {
25
+ email
26
+ },
27
+ {
28
+ platform: {
29
+ id: platformId
30
+ }
31
+ }
32
+ ]
33
+ }
34
+ });
35
+ if (conflictingUserCount > 0) {
36
+ throw new ApplicationError('Email is already taken');
37
+ }
38
+ const userData = {
39
+ ...args.input,
40
+ role: role.id,
41
+ categories: args.input.categories,
42
+ platform: platformId,
43
+ email: email.toLowerCase(),
44
+ provider: 'local',
45
+ confirmed: false,
46
+ activateUser: false
47
+ };
48
+ const createdUser = await strapi.entityService.create(constants_1.USER_MODEL, {
49
+ data: userData
50
+ });
51
+ const userModel = strapi.getModel(constants_1.USER_MODEL);
52
+ const sanitizedUser = utils_1.sanitize.contentAPI.output(createdUser, userModel, {
53
+ auth: false
54
+ });
55
+ await strapi.service('plugin::page-builder.email').sendConfirmationEmail(createdUser);
56
+ return {
57
+ user: sanitizedUser
58
+ };
59
+ }
60
+ };
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.platformResetPassword = void 0;
4
+ const utils_1 = require("@strapi/utils");
5
+ const constants_1 = require("../../constants");
6
+ const schemas_1 = require("../../schemas");
7
+ exports.platformResetPassword = {
8
+ async resolve(parent, args, context) {
9
+ await (0, schemas_1.validateResetPasswordSchema)(args.input);
10
+ const { password, resetPasswordToken } = args.input;
11
+ const jwtService = strapi.plugin('users-permissions').service('jwt');
12
+ const decodedToken = await jwtService.verify(resetPasswordToken);
13
+ if (decodedToken) {
14
+ const user = await strapi.query(constants_1.USER_MODEL).findOne({
15
+ where: {
16
+ id: decodedToken.userId,
17
+ resetPasswordToken: resetPasswordToken
18
+ }
19
+ });
20
+ if (user && user.resetPasswordToken && user.resetPasswordToken === resetPasswordToken) {
21
+ if (password) {
22
+ await strapi.entityService.update(constants_1.USER_MODEL, user.id, {
23
+ data: {
24
+ // @ts-ignore
25
+ password: password,
26
+ resetPasswordToken: null
27
+ }
28
+ });
29
+ }
30
+ const userModel = strapi.getModel(constants_1.USER_MODEL);
31
+ const sanitizedUser = utils_1.sanitize.contentAPI.output(user, userModel, {
32
+ auth: false
33
+ });
34
+ return {
35
+ user: sanitizedUser
36
+ };
37
+ }
38
+ }
39
+ throw new Error('Time of token has expired request a new password change');
40
+ }
41
+ };
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Queries = exports.Mutations = exports.ResetPasswordResponse = exports.ResetPasswordInput = exports.ResetPassword = exports.User = exports.ForgotPasswordResponse = exports.RegisterResponse = exports.LoginResponse = exports.RegisterInput = exports.ForgotPasswordInput = exports.LoginInput = void 0;
4
+ exports.LoginInput = `
5
+ input LoginInput {
6
+ email: String!
7
+ password: String!
8
+ platformId: ID!
9
+ }
10
+ `;
11
+ exports.ForgotPasswordInput = `
12
+ input ForgotPasswordInput {
13
+ email: String!
14
+ platformId: ID!
15
+ }`;
16
+ exports.RegisterInput = `
17
+ input RegisterInput {
18
+ email: String!
19
+ password: String!
20
+ firstName: String
21
+ lastName: String
22
+ company: String
23
+ jobTitle: String
24
+ address: String
25
+ postalCode: String
26
+ city: String
27
+ country: String
28
+ phone: String
29
+ subscribeToNewsletter: Boolean
30
+ categories: [ID]
31
+ platformId: ID!
32
+ }
33
+ `;
34
+ exports.LoginResponse = `
35
+ type LoginResponse {
36
+ jwt: String
37
+ user: User
38
+ }
39
+ `;
40
+ exports.RegisterResponse = `
41
+ type RegisterResponse {
42
+ user: User
43
+ }
44
+ `;
45
+ exports.ForgotPasswordResponse = `
46
+ type ForgotPasswordResponse {
47
+ message: String
48
+ }
49
+ `;
50
+ exports.User = `
51
+ type User {
52
+ id: ID!
53
+ email: String!
54
+ confirmed: Boolean
55
+ blocked: Boolean
56
+ activated: Boolean
57
+ platformId: ID!
58
+ }
59
+ `;
60
+ exports.ResetPassword = `
61
+ type ResetPassword {
62
+ jwt: String
63
+ email: String
64
+ }
65
+ `;
66
+ exports.ResetPasswordInput = `
67
+ input ResetPasswordInput {
68
+ password: String!
69
+ passwordConfirmation: String!
70
+ resetPasswordToken: String!
71
+ }
72
+ `;
73
+ exports.ResetPasswordResponse = `
74
+ type ResetPasswordResponse {
75
+ user: User
76
+ }
77
+ `;
78
+ exports.Mutations = `
79
+ type Mutation {
80
+ platformLogin(input: LoginInput!): LoginResponse
81
+ platformRegister(input: RegisterInput!): RegisterResponse
82
+ platformForgotPassword(input: ForgotPasswordInput!): ForgotPasswordResponse
83
+ platformResetPassword(input: ResetPasswordInput!): ResetPasswordResponse
84
+ }
85
+ `;
86
+ exports.Queries = `
87
+ type Query {
88
+ page(id: ID, locale: I18NLocaleCode): PageEntityResponse
89
+ pages(filters: PageFiltersInput pagination: PaginationArg = {} sort: [String] = [] publicationState: PublicationState = LIVE locale: I18NLocaleCode): PageEntityResponseCollection
90
+ }
91
+ `;
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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';