|
|
@@ -344,9 +344,16 @@ module.exports = function(crowi, app) {
|
|
|
next();
|
|
|
}
|
|
|
|
|
|
+ // empty page
|
|
|
if (page.isEmpty) {
|
|
|
- req.pagePath = page.path;
|
|
|
- return next();
|
|
|
+ // redirect to page (path) url
|
|
|
+ const url = new URL('https://dummy.origin');
|
|
|
+ url.pathname = page.path;
|
|
|
+ Object.entries(req.query).forEach(([key, value], i) => {
|
|
|
+ url.searchParams.append(key, value);
|
|
|
+ });
|
|
|
+ return res.safeRedirect(urljoin(url.pathname, url.search));
|
|
|
+
|
|
|
}
|
|
|
|
|
|
const renderVars = {};
|
|
|
@@ -409,8 +416,13 @@ module.exports = function(crowi, app) {
|
|
|
|
|
|
// empty page
|
|
|
if (page.isEmpty) {
|
|
|
- req.pagePath = page.path;
|
|
|
- return _notFound(req, res);
|
|
|
+ // redirect to page (path) url
|
|
|
+ const url = new URL('https://dummy.origin');
|
|
|
+ url.pathname = page.path;
|
|
|
+ Object.entries(req.query).forEach(([key, value], i) => {
|
|
|
+ url.searchParams.append(key, value);
|
|
|
+ });
|
|
|
+ return res.safeRedirect(urljoin(url.pathname, url.search));
|
|
|
}
|
|
|
|
|
|
const { path } = page; // this must exist
|
|
|
@@ -484,8 +496,8 @@ module.exports = function(crowi, app) {
|
|
|
|
|
|
const shareLink = await ShareLink.findOne({ _id: linkId }).populate('relatedPage');
|
|
|
|
|
|
- if (shareLink == null || shareLink.relatedPage == null) {
|
|
|
- // page or sharelink are not found
|
|
|
+ if (shareLink == null || shareLink.relatedPage == null || shareLink.relatedPage.isEmpty) {
|
|
|
+ // page or sharelink are not found (or page is empty: abnormaly)
|
|
|
return res.render('layout-growi/not_found_shared_page');
|
|
|
}
|
|
|
if (crowi.configManager.getConfig('crowi', 'security:disableLinkSharing')) {
|
|
|
@@ -601,10 +613,6 @@ module.exports = function(crowi, app) {
|
|
|
}
|
|
|
|
|
|
if (pages.length === 1) {
|
|
|
- if (pages[0].isEmpty) {
|
|
|
- return _notFound(req, res);
|
|
|
- }
|
|
|
-
|
|
|
const url = new URL('https://dummy.origin');
|
|
|
url.pathname = `/${pages[0]._id}`;
|
|
|
Object.entries(req.query).forEach(([key, value], i) => {
|
|
|
@@ -613,7 +621,8 @@ module.exports = function(crowi, app) {
|
|
|
return res.safeRedirect(urljoin(url.pathname, url.search));
|
|
|
}
|
|
|
|
|
|
- const isForbidden = await Page.exists({ path });
|
|
|
+ // Exclude isEmpty page to handle _notFound or forbidden
|
|
|
+ const isForbidden = await Page.exists({ path, isEmpty: false });
|
|
|
if (isForbidden) {
|
|
|
req.isForbidden = true;
|
|
|
return _notFound(req, res);
|