Refactor to middleware, support old routes
This commit is contained in:
27
server/middlewares/shareDomains.ts
Normal file
27
server/middlewares/shareDomains.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { Context, Next } from "koa";
|
||||
import { Op } from "sequelize";
|
||||
import { parseDomain } from "@shared/utils/domains";
|
||||
import env from "@server/env";
|
||||
import { Share } from "@server/models";
|
||||
|
||||
export default function shareDomains() {
|
||||
return async function shareDomainsMiddleware(ctx: Context, next: Next) {
|
||||
const isCustomDomain = parseDomain(ctx.host).custom;
|
||||
const isDevelopment = env.ENVIRONMENT === "development";
|
||||
|
||||
if (isDevelopment || (isCustomDomain && env.isCloudHosted)) {
|
||||
const share = await Share.unscoped().findOne({
|
||||
where: {
|
||||
domain: ctx.hostname,
|
||||
published: true,
|
||||
revokedAt: {
|
||||
[Op.is]: null,
|
||||
},
|
||||
},
|
||||
});
|
||||
ctx.state.rootShare = share;
|
||||
}
|
||||
|
||||
return next();
|
||||
};
|
||||
}
|
||||
@@ -6,13 +6,12 @@ import compress from "koa-compress";
|
||||
import Router from "koa-router";
|
||||
import send from "koa-send";
|
||||
import userAgent, { UserAgentContext } from "koa-useragent";
|
||||
import { Op } from "sequelize";
|
||||
import { languages } from "@shared/i18n";
|
||||
import { IntegrationType } from "@shared/types";
|
||||
import { parseDomain } from "@shared/utils/domains";
|
||||
import env from "@server/env";
|
||||
import { NotFoundError } from "@server/errors";
|
||||
import { Integration, Share } from "@server/models";
|
||||
import shareDomains from "@server/middlewares/shareDomains";
|
||||
import { Integration } from "@server/models";
|
||||
import { opensearchResponse } from "@server/utils/opensearch";
|
||||
import { getTeamFromContext } from "@server/utils/passport";
|
||||
import { robotsResponse } from "@server/utils/robots";
|
||||
@@ -125,12 +124,16 @@ router.get("/opensearch.xml", (ctx) => {
|
||||
ctx.body = opensearchResponse(ctx.request.URL.origin);
|
||||
});
|
||||
|
||||
router.get("/s/:shareId", renderShare);
|
||||
router.get("/s/:shareId/doc/:documentSlug", renderShare);
|
||||
router.get("/s/:shareId/*", renderShare);
|
||||
router.get("/s/:shareId", shareDomains(), renderShare);
|
||||
router.get("/s/:shareId/doc/:documentSlug", shareDomains(), renderShare);
|
||||
router.get("/s/:shareId/*", shareDomains(), renderShare);
|
||||
|
||||
// catch all for application
|
||||
router.get("*", async (ctx, next) => {
|
||||
router.get("*", shareDomains(), async (ctx, next) => {
|
||||
if (ctx.state?.rootShare) {
|
||||
return renderShare(ctx, next);
|
||||
}
|
||||
|
||||
const team = await getTeamFromContext(ctx);
|
||||
|
||||
// Redirect all requests to custom domain if one is set
|
||||
@@ -139,25 +142,6 @@ router.get("*", async (ctx, next) => {
|
||||
return;
|
||||
}
|
||||
|
||||
const isCustomDomain = parseDomain(ctx.host).custom;
|
||||
const isDevelopment = env.ENVIRONMENT === "development";
|
||||
if (!team && (isDevelopment || (isCustomDomain && env.isCloudHosted))) {
|
||||
const share = await Share.unscoped().findOne({
|
||||
where: {
|
||||
domain: ctx.hostname,
|
||||
published: true,
|
||||
revokedAt: {
|
||||
[Op.is]: null,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (share) {
|
||||
ctx.state.rootShare = share;
|
||||
return renderShare(ctx, next);
|
||||
}
|
||||
}
|
||||
|
||||
const analytics = team
|
||||
? await Integration.findOne({
|
||||
where: {
|
||||
|
||||
Reference in New Issue
Block a user