From 0a0498d13934a23ee959b7311728380a8873951e Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 2 Dec 2022 22:06:13 -0500 Subject: [PATCH] fix: Allow subdomains upto 255 in self-hosted, closes #4524 --- server/emails/mailer.tsx | 2 +- server/emails/templates/components/Header.tsx | 2 +- server/models/Team.ts | 7 +++++-- server/models/TeamDomain.ts | 4 +--- server/utils/isCloudHosted.ts | 8 ++++++++ 5 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 server/utils/isCloudHosted.ts diff --git a/server/emails/mailer.tsx b/server/emails/mailer.tsx index 669d00388..50aa0dfeb 100644 --- a/server/emails/mailer.tsx +++ b/server/emails/mailer.tsx @@ -3,9 +3,9 @@ import Oy from "oy-vey"; import env from "@server/env"; import Logger from "@server/logging/Logger"; import { APM } from "@server/logging/tracing"; +import isCloudHosted from "@server/utils/isCloudHosted"; import { baseStyles } from "./templates/components/EmailLayout"; -const isCloudHosted = env.DEPLOYMENT === "hosted"; const useTestEmailService = env.ENVIRONMENT === "development" && !env.SMTP_USERNAME; diff --git a/server/emails/templates/components/Header.tsx b/server/emails/templates/components/Header.tsx index 768aa2b0f..671b1ed00 100644 --- a/server/emails/templates/components/Header.tsx +++ b/server/emails/templates/components/Header.tsx @@ -1,10 +1,10 @@ import { Table, TBody, TR, TD } from "oy-vey"; import * as React from "react"; import env from "@server/env"; +import isCloudHosted from "@server/utils/isCloudHosted"; import EmptySpace from "./EmptySpace"; const url = env.CDN_URL ?? env.URL; -const isCloudHosted = env.DEPLOYMENT === "hosted"; export default () => { return ( diff --git a/server/models/Team.ts b/server/models/Team.ts index 3b1f3af38..b2676bd87 100644 --- a/server/models/Team.ts +++ b/server/models/Team.ts @@ -24,6 +24,7 @@ import { CollectionPermission, TeamPreference } from "@shared/types"; import { getBaseDomain, RESERVED_SUBDOMAINS } from "@shared/utils/domains"; import env from "@server/env"; import DeleteAttachmentTask from "@server/queues/tasks/DeleteAttachmentTask"; +import isCloudHosted from "@server/utils/isCloudHosted"; import parseAttachmentIds from "@server/utils/parseAttachmentIds"; import Attachment from "./Attachment"; import AuthenticationProvider from "./AuthenticationProvider"; @@ -66,8 +67,10 @@ class Team extends ParanoidModel { @Unique @Length({ min: 2, - max: 32, - msg: "subdomain must be between 2 and 32 characters", + max: isCloudHosted ? 32 : 255, + msg: `subdomain must be between 2 and ${ + isCloudHosted ? 32 : 255 + } characters`, }) @Is({ args: [/^[a-z\d-]+$/, "i"], diff --git a/server/models/TeamDomain.ts b/server/models/TeamDomain.ts index b685aec02..ec2deda97 100644 --- a/server/models/TeamDomain.ts +++ b/server/models/TeamDomain.ts @@ -10,8 +10,8 @@ import { BeforeCreate, } from "sequelize-typescript"; import { TeamValidation } from "@shared/validations"; -import env from "@server/env"; import { ValidationError } from "@server/errors"; +import isCloudHosted from "@server/utils/isCloudHosted"; import Team from "./Team"; import User from "./User"; import IdModel from "./base/IdModel"; @@ -19,8 +19,6 @@ import Fix from "./decorators/Fix"; import IsFQDN from "./validators/IsFQDN"; import Length from "./validators/Length"; -const isCloudHosted = env.DEPLOYMENT === "hosted"; - @Table({ tableName: "team_domains", modelName: "team_domain" }) @Fix class TeamDomain extends IdModel { diff --git a/server/utils/isCloudHosted.ts b/server/utils/isCloudHosted.ts new file mode 100644 index 000000000..d93edd884 --- /dev/null +++ b/server/utils/isCloudHosted.ts @@ -0,0 +1,8 @@ +import env from "@server/env"; + +/** + * True if the current installation is the cloud hosted version at getoutline.com + */ +const isCloudHosted = env.DEPLOYMENT === "hosted"; + +export default isCloudHosted;