Grandfather in old users

This commit is contained in:
Owen
2026-04-11 16:59:43 -07:00
parent f4ea572f6b
commit 2f386f8e47
2 changed files with 46 additions and 32 deletions

View File

@@ -114,7 +114,10 @@ export async function createResource(
const { orgId } = parsedParams.data; const { orgId } = parsedParams.data;
if (req.user && (!req.userOrgRoleIds || req.userOrgRoleIds.length === 0)) { if (
req.user &&
(!req.userOrgRoleIds || req.userOrgRoleIds.length === 0)
) {
return next( return next(
createHttpError(HttpCode.FORBIDDEN, "User does not have a role") createHttpError(HttpCode.FORBIDDEN, "User does not have a role")
); );
@@ -195,24 +198,26 @@ async function createHttpResource(
const subdomain = parsedBody.data.subdomain; const subdomain = parsedBody.data.subdomain;
const stickySession = parsedBody.data.stickySession; const stickySession = parsedBody.data.stickySession;
if ( if (build == "saas" && !isSubscribed(orgId!, tierMatrix.domainNamespaces)) {
build == "saas" && // grandfather in existing users
!isSubscribed(orgId!, tierMatrix.domainNamespaces) const lastAllowedDate = new Date("2026-04-12");
) { const userCreatedDate = new Date(req.user?.dateCreated || new Date());
// check if this domain id is a namespace domain and if so, reject if (userCreatedDate > lastAllowedDate) {
const domain = await db // check if this domain id is a namespace domain and if so, reject
.select() const domain = await db
.from(domainNamespaces) .select()
.where(eq(domainNamespaces.domainId, domainId)) .from(domainNamespaces)
.limit(1); .where(eq(domainNamespaces.domainId, domainId))
.limit(1);
if (domain.length > 0) { if (domain.length > 0) {
return next( return next(
createHttpError( createHttpError(
HttpCode.BAD_REQUEST, HttpCode.BAD_REQUEST,
"Your current subscription does not support custom domain namespaces. Please upgrade to access this feature." "Your current subscription does not support custom domain namespaces. Please upgrade to access this feature."
) )
); );
}
} }
} }

View File

@@ -121,7 +121,9 @@ const updateHttpResourceBodySchema = z
if (data.headers) { if (data.headers) {
// HTTP header values must be visible ASCII or horizontal whitespace, no control chars (RFC 7230) // HTTP header values must be visible ASCII or horizontal whitespace, no control chars (RFC 7230)
const validHeaderValue = /^[\t\x20-\x7E]*$/; const validHeaderValue = /^[\t\x20-\x7E]*$/;
return data.headers.every((h) => validHeaderValue.test(h.value)); return data.headers.every((h) =>
validHeaderValue.test(h.value)
);
} }
return true; return true;
}, },
@@ -323,20 +325,27 @@ async function updateHttpResource(
build == "saas" && build == "saas" &&
!isSubscribed(resource.orgId, tierMatrix.domainNamespaces) !isSubscribed(resource.orgId, tierMatrix.domainNamespaces)
) { ) {
// check if this domain id is a namespace domain and if so, reject // grandfather in existing users
const domain = await db const lastAllowedDate = new Date("2026-04-12");
.select() const userCreatedDate = new Date(
.from(domainNamespaces) req.user?.dateCreated || new Date()
.where(eq(domainNamespaces.domainId, domainId)) );
.limit(1); if (userCreatedDate > lastAllowedDate) {
// check if this domain id is a namespace domain and if so, reject
const domain = await db
.select()
.from(domainNamespaces)
.where(eq(domainNamespaces.domainId, domainId))
.limit(1);
if (domain.length > 0) { if (domain.length > 0) {
return next( return next(
createHttpError( createHttpError(
HttpCode.BAD_REQUEST, HttpCode.BAD_REQUEST,
"Your current subscription does not support custom domain namespaces. Please upgrade to access this feature." "Your current subscription does not support custom domain namespaces. Please upgrade to access this feature."
) )
); );
}
} }
} }