|
@@ -175,7 +175,6 @@ type Props = CommonProps & {
|
|
|
isAclEnabled: boolean,
|
|
isAclEnabled: boolean,
|
|
|
// hasSlackConfig: boolean,
|
|
// hasSlackConfig: boolean,
|
|
|
drawioUri: string | null,
|
|
drawioUri: string | null,
|
|
|
- noCdn: string,
|
|
|
|
|
// highlightJsStyle: string,
|
|
// highlightJsStyle: string,
|
|
|
isAllReplyShown: boolean,
|
|
isAllReplyShown: boolean,
|
|
|
isContainerFluid: boolean,
|
|
isContainerFluid: boolean,
|
|
@@ -233,7 +232,6 @@ const Page: NextPageWithLayout<Props> = (props: Props) => {
|
|
|
// useIsMailerSetup(props.isMailerSetup);
|
|
// useIsMailerSetup(props.isMailerSetup);
|
|
|
useIsAclEnabled(props.isAclEnabled);
|
|
useIsAclEnabled(props.isAclEnabled);
|
|
|
// useHasSlackConfig(props.hasSlackConfig);
|
|
// useHasSlackConfig(props.hasSlackConfig);
|
|
|
- // useNoCdn(props.noCdn);
|
|
|
|
|
useDefaultIndentSize(props.adminPreferredIndentSize);
|
|
useDefaultIndentSize(props.adminPreferredIndentSize);
|
|
|
useIsIndentSizeForced(props.isIndentSizeForced);
|
|
useIsIndentSizeForced(props.isIndentSizeForced);
|
|
|
useDisableLinkSharing(props.disableLinkSharing);
|
|
useDisableLinkSharing(props.disableLinkSharing);
|
|
@@ -476,24 +474,29 @@ async function injectPageData(context: GetServerSidePropsContext, props: Props):
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const pageWithMeta: IPageToShowRevisionWithMeta | null = await pageService.findPageAndMetaDataByViewer(pageId, currentPathname, user, true); // includeEmpty = true, isSharedPage = false
|
|
|
|
|
- const page = pageWithMeta?.data as unknown as PageDocument;
|
|
|
|
|
|
|
+ const pageWithMeta = await pageService.findPageAndMetaDataByViewer(pageId, currentPathname, user, true); // includeEmpty = true, isSharedPage = false
|
|
|
|
|
+ const { data: page, meta } = pageWithMeta ?? {};
|
|
|
|
|
|
|
|
// add user to seen users
|
|
// add user to seen users
|
|
|
if (page != null && user != null) {
|
|
if (page != null && user != null) {
|
|
|
await page.seen(user);
|
|
await page.seen(user);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ props.pageWithMeta = null;
|
|
|
|
|
+
|
|
|
// populate & check if the revision is latest
|
|
// populate & check if the revision is latest
|
|
|
if (page != null) {
|
|
if (page != null) {
|
|
|
page.initLatestRevisionField(revisionId);
|
|
page.initLatestRevisionField(revisionId);
|
|
|
props.isLatestRevision = page.isLatestRevision();
|
|
props.isLatestRevision = page.isLatestRevision();
|
|
|
- const ssrMaxRevisionBodyLength = configManager.getConfig('crowi', 'app:ssrMaxRevisionBodyLength');
|
|
|
|
|
|
|
+ const ssrMaxRevisionBodyLength = configManager.getConfig('app:ssrMaxRevisionBodyLength');
|
|
|
props.skipSSR = await skipSSR(page, ssrMaxRevisionBodyLength);
|
|
props.skipSSR = await skipSSR(page, ssrMaxRevisionBodyLength);
|
|
|
- await page.populateDataToShowRevision(props.skipSSR); // shouldExcludeBody = skipSSR
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ const populatedPage = await page.populateDataToShowRevision(props.skipSSR); // shouldExcludeBody = skipSSR
|
|
|
|
|
|
|
|
- props.pageWithMeta = pageWithMeta;
|
|
|
|
|
|
|
+ props.pageWithMeta = {
|
|
|
|
|
+ data: populatedPage,
|
|
|
|
|
+ meta,
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async function injectRoutingInformation(context: GetServerSidePropsContext, props: Props): Promise<void> {
|
|
async function injectRoutingInformation(context: GetServerSidePropsContext, props: Props): Promise<void> {
|
|
@@ -558,64 +561,66 @@ function injectServerConfigurations(context: GetServerSidePropsContext, props: P
|
|
|
const req: CrowiRequest = context.req as CrowiRequest;
|
|
const req: CrowiRequest = context.req as CrowiRequest;
|
|
|
const { crowi } = req;
|
|
const { crowi } = req;
|
|
|
const {
|
|
const {
|
|
|
- searchService, configManager, aclService,
|
|
|
|
|
|
|
+ configManager, searchService, aclService, fileUploadService,
|
|
|
|
|
+ slackIntegrationService, passportService,
|
|
|
} = crowi;
|
|
} = crowi;
|
|
|
|
|
|
|
|
- props.aiEnabled = configManager.getConfig('crowi', 'app:aiEnabled');
|
|
|
|
|
|
|
+ props.aiEnabled = configManager.getConfig('app:aiEnabled');
|
|
|
|
|
|
|
|
props.isSearchServiceConfigured = searchService.isConfigured;
|
|
props.isSearchServiceConfigured = searchService.isConfigured;
|
|
|
props.isSearchServiceReachable = searchService.isReachable;
|
|
props.isSearchServiceReachable = searchService.isReachable;
|
|
|
- props.isSearchScopeChildrenAsDefault = configManager.getConfig('crowi', 'customize:isSearchScopeChildrenAsDefault');
|
|
|
|
|
- props.elasticsearchMaxBodyLengthToIndex = configManager.getConfig('crowi', 'app:elasticsearchMaxBodyLengthToIndex');
|
|
|
|
|
|
|
+ props.isSearchScopeChildrenAsDefault = configManager.getConfig('customize:isSearchScopeChildrenAsDefault');
|
|
|
|
|
+ props.elasticsearchMaxBodyLengthToIndex = configManager.getConfig('app:elasticsearchMaxBodyLengthToIndex');
|
|
|
|
|
|
|
|
- props.isRomUserAllowedToComment = configManager.getConfig('crowi', 'security:isRomUserAllowedToComment');
|
|
|
|
|
|
|
+ props.isRomUserAllowedToComment = configManager.getConfig('security:isRomUserAllowedToComment');
|
|
|
|
|
|
|
|
- props.isSlackConfigured = crowi.slackIntegrationService.isSlackConfigured;
|
|
|
|
|
|
|
+ props.isSlackConfigured = slackIntegrationService.isSlackConfigured;
|
|
|
// props.isMailerSetup = mailService.isMailerSetup;
|
|
// props.isMailerSetup = mailService.isMailerSetup;
|
|
|
props.isAclEnabled = aclService.isAclEnabled();
|
|
props.isAclEnabled = aclService.isAclEnabled();
|
|
|
// props.hasSlackConfig = slackNotificationService.hasSlackConfig();
|
|
// props.hasSlackConfig = slackNotificationService.hasSlackConfig();
|
|
|
- props.drawioUri = configManager.getConfig('crowi', 'app:drawioUri');
|
|
|
|
|
- props.noCdn = configManager.getConfig('crowi', 'app:noCdn');
|
|
|
|
|
- // props.highlightJsStyle = configManager.getConfig('crowi', 'customize:highlightJsStyle');
|
|
|
|
|
- props.isAllReplyShown = configManager.getConfig('crowi', 'customize:isAllReplyShown');
|
|
|
|
|
- props.isContainerFluid = configManager.getConfig('crowi', 'customize:isContainerFluid');
|
|
|
|
|
- props.isEnabledStaleNotification = configManager.getConfig('crowi', 'customize:isEnabledStaleNotification');
|
|
|
|
|
- props.disableLinkSharing = configManager.getConfig('crowi', 'security:disableLinkSharing');
|
|
|
|
|
- props.isUploadAllFileAllowed = crowi.fileUploadService.getFileUploadEnabled();
|
|
|
|
|
- props.isUploadEnabled = crowi.fileUploadService.getIsUploadable();
|
|
|
|
|
|
|
+ props.drawioUri = configManager.getConfig('app:drawioUri');
|
|
|
|
|
+ // props.highlightJsStyle = configManager.getConfig('customize:highlightJsStyle');
|
|
|
|
|
+ props.isAllReplyShown = configManager.getConfig('customize:isAllReplyShown');
|
|
|
|
|
+ props.isContainerFluid = configManager.getConfig('customize:isContainerFluid');
|
|
|
|
|
+ props.isEnabledStaleNotification = configManager.getConfig('customize:isEnabledStaleNotification');
|
|
|
|
|
+ props.disableLinkSharing = configManager.getConfig('security:disableLinkSharing');
|
|
|
|
|
+ props.isUploadAllFileAllowed = fileUploadService.getFileUploadEnabled();
|
|
|
|
|
+ props.isUploadEnabled = fileUploadService.getIsUploadable();
|
|
|
|
|
|
|
|
- props.isLocalAccountRegistrationEnabled = crowi.passportService.isLocalStrategySetup
|
|
|
|
|
- && configManager.getConfig('crowi', 'security:registrationMode') !== RegistrationMode.CLOSED;
|
|
|
|
|
|
|
+ props.isLocalAccountRegistrationEnabled = passportService.isLocalStrategySetup
|
|
|
|
|
+ && configManager.getConfig('security:registrationMode') !== RegistrationMode.CLOSED;
|
|
|
|
|
|
|
|
- props.adminPreferredIndentSize = configManager.getConfig('markdown', 'markdown:adminPreferredIndentSize');
|
|
|
|
|
- props.isIndentSizeForced = configManager.getConfig('markdown', 'markdown:isIndentSizeForced');
|
|
|
|
|
|
|
+ props.adminPreferredIndentSize = configManager.getConfig('markdown:adminPreferredIndentSize');
|
|
|
|
|
+ props.isIndentSizeForced = configManager.getConfig('markdown:isIndentSizeForced');
|
|
|
|
|
|
|
|
- props.isEnabledAttachTitleHeader = configManager.getConfig('crowi', 'customize:isEnabledAttachTitleHeader');
|
|
|
|
|
|
|
+ props.isEnabledAttachTitleHeader = configManager.getConfig('customize:isEnabledAttachTitleHeader');
|
|
|
|
|
|
|
|
props.sidebarConfig = {
|
|
props.sidebarConfig = {
|
|
|
- isSidebarCollapsedMode: configManager.getConfig('crowi', 'customize:isSidebarCollapsedMode'),
|
|
|
|
|
- isSidebarClosedAtDockMode: configManager.getConfig('crowi', 'customize:isSidebarClosedAtDockMode'),
|
|
|
|
|
|
|
+ isSidebarCollapsedMode: configManager.getConfig('customize:isSidebarCollapsedMode'),
|
|
|
|
|
+ isSidebarClosedAtDockMode: configManager.getConfig('customize:isSidebarClosedAtDockMode'),
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
props.rendererConfig = {
|
|
props.rendererConfig = {
|
|
|
- isEnabledLinebreaks: configManager.getConfig('markdown', 'markdown:isEnabledLinebreaks'),
|
|
|
|
|
- isEnabledLinebreaksInComments: configManager.getConfig('markdown', 'markdown:isEnabledLinebreaksInComments'),
|
|
|
|
|
- isEnabledMarp: configManager.getConfig('crowi', 'customize:isEnabledMarp'),
|
|
|
|
|
- adminPreferredIndentSize: configManager.getConfig('markdown', 'markdown:adminPreferredIndentSize'),
|
|
|
|
|
- isIndentSizeForced: configManager.getConfig('markdown', 'markdown:isIndentSizeForced'),
|
|
|
|
|
|
|
+ isEnabledLinebreaks: configManager.getConfig('markdown:isEnabledLinebreaks'),
|
|
|
|
|
+ isEnabledLinebreaksInComments: configManager.getConfig('markdown:isEnabledLinebreaksInComments'),
|
|
|
|
|
+ isEnabledMarp: configManager.getConfig('customize:isEnabledMarp'),
|
|
|
|
|
+ adminPreferredIndentSize: configManager.getConfig('markdown:adminPreferredIndentSize'),
|
|
|
|
|
+ isIndentSizeForced: configManager.getConfig('markdown:isIndentSizeForced'),
|
|
|
|
|
|
|
|
- drawioUri: configManager.getConfig('crowi', 'app:drawioUri'),
|
|
|
|
|
- plantumlUri: configManager.getConfig('crowi', 'app:plantumlUri'),
|
|
|
|
|
|
|
+ drawioUri: configManager.getConfig('app:drawioUri'),
|
|
|
|
|
+ plantumlUri: configManager.getConfig('app:plantumlUri'),
|
|
|
|
|
|
|
|
// XSS Options
|
|
// XSS Options
|
|
|
- isEnabledXssPrevention: configManager.getConfig('markdown', 'markdown:rehypeSanitize:isEnabledPrevention'),
|
|
|
|
|
- sanitizeType: configManager.getConfig('markdown', 'markdown:rehypeSanitize:option'),
|
|
|
|
|
- customAttrWhitelist: JSON.parse(crowi.configManager.getConfig('markdown', 'markdown:rehypeSanitize:attributes')),
|
|
|
|
|
- customTagWhitelist: crowi.configManager.getConfig('markdown', 'markdown:rehypeSanitize:tagNames'),
|
|
|
|
|
- highlightJsStyleBorder: crowi.configManager.getConfig('crowi', 'customize:highlightJsStyleBorder'),
|
|
|
|
|
|
|
+ isEnabledXssPrevention: configManager.getConfig('markdown:rehypeSanitize:isEnabledPrevention'),
|
|
|
|
|
+ sanitizeType: configManager.getConfig('markdown:rehypeSanitize:option'),
|
|
|
|
|
+ customTagWhitelist: configManager.getConfig('markdown:rehypeSanitize:tagNames'),
|
|
|
|
|
+ customAttrWhitelist: configManager.getConfig('markdown:rehypeSanitize:attributes') != null
|
|
|
|
|
+ ? JSON.parse(configManager.getConfig('markdown:rehypeSanitize:attributes'))
|
|
|
|
|
+ : undefined,
|
|
|
|
|
+ highlightJsStyleBorder: configManager.getConfig('customize:highlightJsStyleBorder'),
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- props.ssrMaxRevisionBodyLength = configManager.getConfig('crowi', 'app:ssrMaxRevisionBodyLength');
|
|
|
|
|
|
|
+ props.ssrMaxRevisionBodyLength = configManager.getConfig('app:ssrMaxRevisionBodyLength');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|