create-page-service.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. /** @param {import('~/server/crowi').default} crowi Crowi instance */
  15. constructor(crowi) {
  16. this.crowi = crowi;
  17. }
  18. async createPageInGrowi(interactionPayloadAccessor, path, contentsBody, respondUtil, user) {
  19. const reshapedContentsBody = reshapeContentsBody(contentsBody);
  20. // sanitize path
  21. const sanitizedPath = generalXssFilter.process(path);
  22. const normalizedPath = pathUtils.normalizePath(sanitizedPath);
  23. // Since an ObjectId is required for creating a page, if a user does not exist, a dummy user will be generated
  24. const userOrDummyUser = user != null ? user : { _id: new mongoose.Types.ObjectId() };
  25. const page = await this.crowi.pageService.create(normalizedPath, reshapedContentsBody, userOrDummyUser, {});
  26. // Send a message when page creation is complete
  27. const growiUri = growiInfoService.getSiteUrl();
  28. await respondUtil.respond({
  29. text: 'Page has been created',
  30. blocks: [
  31. markdownSectionBlock(`The page <${decodeURI(`${growiUri}/${page._id} | ${decodeURI(growiUri + normalizedPath)}`)}> has been created.`),
  32. ],
  33. });
  34. }
  35. }
  36. module.exports = CreatePageService;