2
0

create-page-service.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { markdownSectionBlock } from '@growi/slack/dist/utils/block-kit-builder';
  2. import { reshapeContentsBody } from '@growi/slack/dist/utils/reshape-contents-body';
  3. import Crowi from '~/server/crowi';
  4. import { generalXssFilter } from '~/services/general-xss-filter';
  5. import loggerFactory from '~/utils/logger';
  6. import { growiInfoService } from '../growi-info';
  7. // eslint-disable-next-line no-unused-vars
  8. const logger = loggerFactory('growi:service:CreatePageService');
  9. const { pathUtils } = require('@growi/core/dist/utils');
  10. const mongoose = require('mongoose');
  11. class CreatePageService {
  12. /** @type {import('~/server/crowi').default} Crowi instance */
  13. crowi;
  14. constructor(crowi) {
  15. this.crowi = crowi;
  16. }
  17. async createPageInGrowi(interactionPayloadAccessor, path, contentsBody, respondUtil, user) {
  18. const reshapedContentsBody = reshapeContentsBody(contentsBody);
  19. // sanitize path
  20. const sanitizedPath = generalXssFilter.process(path);
  21. const normalizedPath = pathUtils.normalizePath(sanitizedPath);
  22. // Since an ObjectId is required for creating a page, if a user does not exist, a dummy user will be generated
  23. const userOrDummyUser = user != null ? user : { _id: new mongoose.Types.ObjectId() };
  24. const page = await this.crowi.pageService.create(normalizedPath, reshapedContentsBody, userOrDummyUser, {});
  25. // Send a message when page creation is complete
  26. const growiUri = growiInfoService.getSiteUrl();
  27. await respondUtil.respond({
  28. text: 'Page has been created',
  29. blocks: [
  30. markdownSectionBlock(`The page <${decodeURI(`${growiUri}/${page._id} | ${decodeURI(growiUri + normalizedPath)}`)}> has been created.`),
  31. ],
  32. });
  33. }
  34. }
  35. module.exports = CreatePageService;