@webbio/strapi-plugin-page-builder 0.10.10-platform → 0.11.10-platform

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 (78) hide show
  1. package/README.md +38 -0
  2. package/admin/src/components/EditView/CollectionTypeSearch/index.tsx +1 -1
  3. package/dist/package.json +8 -2
  4. package/dist/server/bootstrap.js +31 -1
  5. package/dist/server/content-types/category/schema.json +18 -0
  6. package/dist/server/content-types/index.js +9 -1
  7. package/dist/server/controllers/index.js +3 -1
  8. package/dist/server/controllers/private-content.js +18 -0
  9. package/dist/server/controllers/sitemap.js +20 -0
  10. package/dist/server/graphql/page-by-path.js +22 -2
  11. package/dist/server/policies/index.js +7 -1
  12. package/dist/server/policies/isAuthorizedPage.js +11 -0
  13. package/dist/server/register.js +2 -0
  14. package/dist/server/routes/index.js +17 -0
  15. package/dist/server/schema/page-end.json +8 -0
  16. package/dist/server/schema/platform-start.json +5 -0
  17. package/dist/server/services/builder.js +86 -0
  18. package/dist/server/services/email.js +132 -0
  19. package/dist/server/services/index.js +5 -1
  20. package/dist/server/services/private-content/components/admin-email.json +22 -0
  21. package/dist/server/services/private-content/components/email.json +22 -0
  22. package/dist/server/services/private-content/components/platform-email.json +30 -0
  23. package/dist/server/services/private-content/constants/index.js +16 -0
  24. package/dist/server/services/private-content/graphql/index.js +77 -0
  25. package/dist/server/services/private-content/graphql/resolvers/findOnePage.js +40 -0
  26. package/dist/server/services/private-content/graphql/resolvers/findPage.js +44 -0
  27. package/dist/server/services/private-content/graphql/resolvers/forgot-password.js +31 -0
  28. package/dist/server/services/private-content/graphql/resolvers/login.js +49 -0
  29. package/dist/server/services/private-content/graphql/resolvers/register.js +68 -0
  30. package/dist/server/services/private-content/graphql/resolvers/reset-password.js +41 -0
  31. package/dist/server/services/private-content/graphql/types/index.js +89 -0
  32. package/dist/server/services/private-content/index.js +92 -0
  33. package/dist/server/services/private-content/mail-template/txtMail.email.template.text.js +12 -0
  34. package/dist/server/services/private-content/mail-template/txtMail.interface.js +2 -0
  35. package/dist/server/services/private-content/page.js +17 -0
  36. package/dist/server/services/private-content/platform.js +17 -0
  37. package/dist/server/services/private-content/schemas/index.js +30 -0
  38. package/dist/server/services/private-content/user.js +159 -0
  39. package/dist/server/services/sitemap.js +17 -0
  40. package/dist/server/utils/strapi.js +9 -1
  41. package/dist/shared/utils/constants.js +3 -1
  42. package/dist/tsconfig.server.tsbuildinfo +1 -1
  43. package/package.json +8 -2
  44. package/server/bootstrap.ts +39 -1
  45. package/server/content-types/category/schema.json +18 -0
  46. package/server/content-types/index.ts +7 -1
  47. package/server/controllers/index.ts +3 -1
  48. package/server/controllers/private-content.ts +17 -0
  49. package/server/graphql/page-by-path.ts +28 -2
  50. package/server/policies/index.ts +5 -1
  51. package/server/policies/isAuthorizedPage.ts +11 -0
  52. package/server/register.ts +2 -0
  53. package/server/routes/index.ts +17 -0
  54. package/server/schema/page-end.json +8 -0
  55. package/server/schema/platform-start.json +5 -0
  56. package/server/services/builder.ts +83 -1
  57. package/server/services/email.ts +127 -0
  58. package/server/services/index.ts +5 -1
  59. package/server/services/private-content/components/admin-email.json +22 -0
  60. package/server/services/private-content/components/email.json +22 -0
  61. package/server/services/private-content/components/platform-email.json +30 -0
  62. package/server/services/private-content/constants/index.ts +13 -0
  63. package/server/services/private-content/graphql/index.ts +88 -0
  64. package/server/services/private-content/graphql/resolvers/findOnePage.ts +40 -0
  65. package/server/services/private-content/graphql/resolvers/findPage.ts +45 -0
  66. package/server/services/private-content/graphql/resolvers/forgot-password.ts +34 -0
  67. package/server/services/private-content/graphql/resolvers/login.ts +56 -0
  68. package/server/services/private-content/graphql/resolvers/register.ts +78 -0
  69. package/server/services/private-content/graphql/resolvers/reset-password.ts +44 -0
  70. package/server/services/private-content/graphql/types/index.ts +96 -0
  71. package/server/services/private-content/index.ts +93 -0
  72. package/server/services/private-content/mail-template/txtMail.email.template.text.ts +6 -0
  73. package/server/services/private-content/page.ts +14 -0
  74. package/server/services/private-content/platform.ts +14 -0
  75. package/server/services/private-content/schemas/index.ts +28 -0
  76. package/server/services/private-content/user.ts +187 -0
  77. package/server/utils/strapi.ts +5 -0
  78. package/shared/utils/constants.ts +2 -0
@@ -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
+ domain: utils_1.yup.string().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
+ domain: utils_1.yup.string().required()
14
+ });
15
+ exports.forgotPasswordSchema = utils_1.yup.object({
16
+ email: utils_1.yup.string().email().required(),
17
+ domain: utils_1.yup.string().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
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ async generateSitemap(domain) {
5
+ const paths = await strapi.entityService.findMany('api::page.page', {
6
+ fields: ['path'],
7
+ filters: {
8
+ platform: {
9
+ domain: {
10
+ $eq: domain
11
+ }
12
+ }
13
+ }
14
+ });
15
+ return paths;
16
+ }
17
+ };
@@ -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';