From 80d3b99b90dba2d1e7b4c3bd16a573c63b814f78 Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Mon, 8 May 2023 13:26:00 +0200 Subject: [PATCH 01/11] Provide some functions to check the path in the context --- .../src/utils/tests/utils.spec.ts | 77 +++++++++++++++++++ packages/backend-core/src/utils/utils.ts | 19 ++++- 2 files changed, 93 insertions(+), 3 deletions(-) diff --git a/packages/backend-core/src/utils/tests/utils.spec.ts b/packages/backend-core/src/utils/tests/utils.spec.ts index ededa48628..bea0bfa52b 100644 --- a/packages/backend-core/src/utils/tests/utils.spec.ts +++ b/packages/backend-core/src/utils/tests/utils.spec.ts @@ -5,6 +5,8 @@ import * as db from "../../db" import { Header } from "../../constants" import { newid } from "../../utils" import env from "../../environment" +import { beforeEach } from "@jest/globals" +import { BBContext } from "@budibase/types" describe("utils", () => { const config = new DBTestConfiguration() @@ -106,4 +108,79 @@ describe("utils", () => { expect(actual).toBe(undefined) }) }) + + describe("isServingBuilder", () => { + let ctx: BBContext + + const expectResult = (result: boolean) => + expect(utils.isServingBuilder(ctx)).toBe(result) + + beforeEach(() => { + ctx = structures.koa.newContext() + }) + + it("returns true if current path is in builder", async () => { + ctx.path = "/builder/app/app_" + expectResult(true) + }) + + it("returns false if current path is not in builder", async () => { + ctx.path = "/builder/app" + expectResult(false) + + ctx.path = "/xx" + expectResult(false) + }) + }) + + describe("isServingBuilderPreview", () => { + let ctx: BBContext + + const expectResult = (result: boolean) => + expect(utils.isServingBuilderPreview(ctx)).toBe(result) + + beforeEach(() => { + ctx = structures.koa.newContext() + }) + + it("returns true if current path is in builder preview", async () => { + ctx.path = "/app/preview/xx" + expectResult(true) + }) + + it("returns false if current path is not in builder preview", async () => { + ctx.path = "/builder" + expectResult(false) + + ctx.path = "/xx" + expectResult(false) + }) + }) + + describe("isPublicAPIRequest", () => { + let ctx: BBContext + + const expectResult = (result: boolean) => + expect(utils.isPublicApiRequest(ctx)).toBe(result) + + beforeEach(() => { + ctx = structures.koa.newContext() + }) + + it("returns true if current path remains to public API", async () => { + ctx.path = "/api/public/v1/invoices" + expectResult(true) + + ctx.path = "/api/public/v1" + expectResult(true) + }) + + it("returns false if current path doesn't remain to public API", async () => { + ctx.path = "/api/public" + expectResult(false) + + ctx.path = "/xx" + expectResult(false) + }) + }) }) diff --git a/packages/backend-core/src/utils/utils.ts b/packages/backend-core/src/utils/utils.ts index 75b098093b..6cbd1fc406 100644 --- a/packages/backend-core/src/utils/utils.ts +++ b/packages/backend-core/src/utils/utils.ts @@ -1,10 +1,9 @@ -import { getAllApps, queryGlobalView } from "../db" +import { getAllApps } from "../db" import { Header, MAX_VALID_DATE, DocumentType, SEPARATOR, - ViewName, } from "../constants" import env from "../environment" import * as tenancy from "../tenancy" @@ -23,7 +22,9 @@ const APP_PREFIX = DocumentType.APP + SEPARATOR const PROD_APP_PREFIX = "/app/" const BUILDER_PREVIEW_PATH = "/app/preview" -const BUILDER_REFERER_PREFIX = "/builder/app/" +const BUILDER_PREFIX = "/builder" +const BUILDER_REFERER_PREFIX = `${BUILDER_PREFIX}/app/` +const PUBLIC_API_PREFIX = "/api/public/v1" function confirmAppId(possibleAppId: string | undefined) { return possibleAppId && possibleAppId.startsWith(APP_PREFIX) @@ -69,6 +70,18 @@ export function isServingApp(ctx: Ctx) { return false } +export function isServingBuilder(ctx: Ctx): boolean { + return ctx.path.startsWith(BUILDER_REFERER_PREFIX) +} + +export function isServingBuilderPreview(ctx: Ctx): boolean { + return ctx.path.startsWith(BUILDER_PREVIEW_PATH) +} + +export function isPublicApiRequest(ctx: Ctx): boolean { + return ctx.path.startsWith(PUBLIC_API_PREFIX) +} + /** * Given a request tries to find the appId, which can be located in various places * @param {object} ctx The main request body to look through. From d4d1bc03b31324c530b7f589cbd1ec402fdf739f Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Mon, 8 May 2023 13:42:26 +0200 Subject: [PATCH 02/11] Fix ESLint --- packages/backend-core/src/utils/utils.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/backend-core/src/utils/utils.ts b/packages/backend-core/src/utils/utils.ts index 6cbd1fc406..aee672042b 100644 --- a/packages/backend-core/src/utils/utils.ts +++ b/packages/backend-core/src/utils/utils.ts @@ -1,10 +1,5 @@ import { getAllApps } from "../db" -import { - Header, - MAX_VALID_DATE, - DocumentType, - SEPARATOR, -} from "../constants" +import { Header, MAX_VALID_DATE, DocumentType, SEPARATOR } from "../constants" import env from "../environment" import * as tenancy from "../tenancy" import * as context from "../context" From 562bc05f7130e1de77d8887d76c15df6766840bf Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Fri, 12 May 2023 08:55:20 +0200 Subject: [PATCH 03/11] Restore pro submodule --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 79bc94b17b..1bc218c228 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 79bc94b17baba885eb20e72f9abba3ac8b9c0eab +Subproject commit 1bc218c228538b5bdba8b1b5686b05a7993b3ce9 From e0f8d251616367a9ad89d6d4b04c6f007364d8a6 Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Fri, 12 May 2023 09:16:09 +0200 Subject: [PATCH 04/11] Launch pipeline From 804f378b8201d2b8e5e8f31a9a6bd35ce0f91ac1 Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Fri, 12 May 2023 10:23:44 +0200 Subject: [PATCH 05/11] Update submodule reference in order to fix an error while importing utils --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 1bc218c228..cbbe1ff96d 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 1bc218c228538b5bdba8b1b5686b05a7993b3ce9 +Subproject commit cbbe1ff96d53204c7394d9c9e1a1d358accd390b From de339e4be7a66581681ac329ea4a75071516289b Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Fri, 12 May 2023 11:34:52 +0200 Subject: [PATCH 06/11] Update submodule reference --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index cbbe1ff96d..14345384f7 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit cbbe1ff96d53204c7394d9c9e1a1d358accd390b +Subproject commit 14345384f7a6755d1e2de327104741e0f208f55d From 1f7ebe85024284e414c29c2da73c09b49f66368f Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Fri, 12 May 2023 15:34:57 +0200 Subject: [PATCH 07/11] Remove unneeded 'beforeEach' import --- packages/backend-core/src/utils/tests/utils.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/backend-core/src/utils/tests/utils.spec.ts b/packages/backend-core/src/utils/tests/utils.spec.ts index bea0bfa52b..59ea910b2e 100644 --- a/packages/backend-core/src/utils/tests/utils.spec.ts +++ b/packages/backend-core/src/utils/tests/utils.spec.ts @@ -5,7 +5,6 @@ import * as db from "../../db" import { Header } from "../../constants" import { newid } from "../../utils" import env from "../../environment" -import { beforeEach } from "@jest/globals" import { BBContext } from "@budibase/types" describe("utils", () => { From 8eac0d99f7f3aefc509713119f3a8149beb0e242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Vte=2E=20Calder=C3=B3n?= Date: Fri, 12 May 2023 15:38:39 +0200 Subject: [PATCH 08/11] Update packages/backend-core/src/utils/tests/utils.spec.ts Co-authored-by: Rory Powell --- packages/backend-core/src/utils/tests/utils.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-core/src/utils/tests/utils.spec.ts b/packages/backend-core/src/utils/tests/utils.spec.ts index 59ea910b2e..1cf1c6edce 100644 --- a/packages/backend-core/src/utils/tests/utils.spec.ts +++ b/packages/backend-core/src/utils/tests/utils.spec.ts @@ -123,7 +123,7 @@ describe("utils", () => { expectResult(true) }) - it("returns false if current path is not in builder", async () => { + it("returns false if current path doesn't have '/' suffix", async () => { ctx.path = "/builder/app" expectResult(false) From a48fc00a5417a22d3250e76521a460259c08269e Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Fri, 12 May 2023 15:54:44 +0200 Subject: [PATCH 09/11] Change the PUBLIC_API_PREFIX to prevent failures if we increase in the future the API version --- packages/backend-core/src/utils/tests/utils.spec.ts | 6 ++++++ packages/backend-core/src/utils/utils.ts | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/backend-core/src/utils/tests/utils.spec.ts b/packages/backend-core/src/utils/tests/utils.spec.ts index 1cf1c6edce..5a0ac4f283 100644 --- a/packages/backend-core/src/utils/tests/utils.spec.ts +++ b/packages/backend-core/src/utils/tests/utils.spec.ts @@ -172,6 +172,12 @@ describe("utils", () => { ctx.path = "/api/public/v1" expectResult(true) + + ctx.path = "/api/public/v2" + expectResult(true) + + ctx.path = "/api/public/v21" + expectResult(true) }) it("returns false if current path doesn't remain to public API", async () => { diff --git a/packages/backend-core/src/utils/utils.ts b/packages/backend-core/src/utils/utils.ts index aee672042b..1876160829 100644 --- a/packages/backend-core/src/utils/utils.ts +++ b/packages/backend-core/src/utils/utils.ts @@ -19,7 +19,7 @@ const PROD_APP_PREFIX = "/app/" const BUILDER_PREVIEW_PATH = "/app/preview" const BUILDER_PREFIX = "/builder" const BUILDER_REFERER_PREFIX = `${BUILDER_PREFIX}/app/` -const PUBLIC_API_PREFIX = "/api/public/v1" +const PUBLIC_API_PREFIX = "/api/public/v" function confirmAppId(possibleAppId: string | undefined) { return possibleAppId && possibleAppId.startsWith(APP_PREFIX) From 946cd45b3ff2dbd55b8c963e8daf23a149af79e4 Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Fri, 12 May 2023 15:59:42 +0200 Subject: [PATCH 10/11] Refactor: BUILDER_REFERER_PREFIX -> BUILDER_APP_PREFIX --- packages/backend-core/src/utils/utils.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend-core/src/utils/utils.ts b/packages/backend-core/src/utils/utils.ts index 1876160829..82da95983a 100644 --- a/packages/backend-core/src/utils/utils.ts +++ b/packages/backend-core/src/utils/utils.ts @@ -18,7 +18,7 @@ const PROD_APP_PREFIX = "/app/" const BUILDER_PREVIEW_PATH = "/app/preview" const BUILDER_PREFIX = "/builder" -const BUILDER_REFERER_PREFIX = `${BUILDER_PREFIX}/app/` +const BUILDER_APP_PREFIX = `${BUILDER_PREFIX}/app/` const PUBLIC_API_PREFIX = "/api/public/v" function confirmAppId(possibleAppId: string | undefined) { @@ -66,7 +66,7 @@ export function isServingApp(ctx: Ctx) { } export function isServingBuilder(ctx: Ctx): boolean { - return ctx.path.startsWith(BUILDER_REFERER_PREFIX) + return ctx.path.startsWith(BUILDER_APP_PREFIX) } export function isServingBuilderPreview(ctx: Ctx): boolean { @@ -118,7 +118,7 @@ export async function getAppIdFromCtx(ctx: Ctx) { // make sure this is performed after prod app url resolution, in case the // referer header is present from a builder redirect const referer = ctx.request.headers.referer - if (!appId && referer?.includes(BUILDER_REFERER_PREFIX)) { + if (!appId && referer?.includes(BUILDER_APP_PREFIX)) { const refererId = parseAppIdFromUrl(ctx.request.headers.referer) appId = confirmAppId(refererId) } From 3f82761c0e62af5c4a87c0db72e6ee5be6386987 Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Fri, 12 May 2023 16:19:27 +0200 Subject: [PATCH 11/11] Launch pipeline