From 2e95853bca853705d27698b1ef7131ec6f3cdb6e Mon Sep 17 00:00:00 2001 From: Marlen Brunner Date: Fri, 12 Apr 2024 11:35:54 -0700 Subject: [PATCH] :beetle: Re-scope base authentication action middlewares. Avoid requiring auth for non-api and non-download prefixed routes. Move download from /datatets/:slug/download to /download/datasets/slug Move all the various controllers and services so they line up with the route. --- api/src/controllers/datasets/index.ts | 1 - .../datasets-controller.ts} | 6 +++--- api/src/controllers/download/index.ts | 1 + api/src/controllers/index.ts | 1 + api/src/router.ts | 5 +++-- api/src/services/datasets/download/index.ts | 5 ----- api/src/services/datasets/index.ts | 1 - .../datasets}/create-from-file-service.ts | 0 .../datasets}/create-from-integration-service.ts | 0 .../download => download/datasets}/create-service.ts | 4 ++-- api/src/services/download/datasets/index.ts | 1 + api/src/services/download/index.ts | 1 + api/src/services/index.ts | 1 + web/src/components/dataset-entries/DownloadAsCsvButton.vue | 2 +- 14 files changed, 14 insertions(+), 15 deletions(-) rename api/src/controllers/{datasets/download-controller.ts => download/datasets-controller.ts} (93%) create mode 100644 api/src/controllers/download/index.ts delete mode 100644 api/src/services/datasets/download/index.ts rename api/src/services/{datasets/download => download/datasets}/create-from-file-service.ts (100%) rename api/src/services/{datasets/download => download/datasets}/create-from-integration-service.ts (100%) rename api/src/services/{datasets/download => download/datasets}/create-service.ts (87%) create mode 100644 api/src/services/download/datasets/index.ts create mode 100644 api/src/services/download/index.ts diff --git a/api/src/controllers/datasets/index.ts b/api/src/controllers/datasets/index.ts index f5ebba49..b2affd81 100644 --- a/api/src/controllers/datasets/index.ts +++ b/api/src/controllers/datasets/index.ts @@ -1,4 +1,3 @@ -export { DownloadController } from "./download-controller" export { EmailSubscribersController } from "./email-subscribers-controller" export { FilesController } from "./files-controller" export { RefreshController } from "./refresh-controller" diff --git a/api/src/controllers/datasets/download-controller.ts b/api/src/controllers/download/datasets-controller.ts similarity index 93% rename from api/src/controllers/datasets/download-controller.ts rename to api/src/controllers/download/datasets-controller.ts index d3612baa..4b5816ce 100644 --- a/api/src/controllers/datasets/download-controller.ts +++ b/api/src/controllers/download/datasets-controller.ts @@ -3,11 +3,11 @@ import { format } from "fast-csv" import { Dataset } from "@/models" import { DatasetsPolicy } from "@/policies" -import { CreateService } from "@/services/datasets/download" +import { CreateService } from "@/services/download/datasets" import { BaseController } from "@/controllers/base-controller" -export class DownloadController extends BaseController { +export class DatasetsController extends BaseController { async create() { const dataset = await this.loadDataset() if (isNil(dataset)) { @@ -72,4 +72,4 @@ export class DownloadController extends BaseController { } } -export default DownloadController +export default DatasetsController diff --git a/api/src/controllers/download/index.ts b/api/src/controllers/download/index.ts new file mode 100644 index 00000000..c96040dc --- /dev/null +++ b/api/src/controllers/download/index.ts @@ -0,0 +1 @@ +export { DatasetsController } from "./datasets-controller" diff --git a/api/src/controllers/index.ts b/api/src/controllers/index.ts index ff97b2b1..55ab355f 100644 --- a/api/src/controllers/index.ts +++ b/api/src/controllers/index.ts @@ -15,6 +15,7 @@ export { VisualizationControlsController } from "./visualization-controls-contro export * as AccessRequests from "./access-requests" export * as Datasets from "./datasets" +export * as Download from "./download" export * as Users from "./users" export * as UserGroups from "./user-groups" export * as QaScenarios from "./qa-scenarios" diff --git a/api/src/router.ts b/api/src/router.ts index b2b56869..89294f90 100644 --- a/api/src/router.ts +++ b/api/src/router.ts @@ -31,6 +31,7 @@ import { Datasets, DatasetsController, DatasetStewardshipsController, + Download, QaScenarios, TaggingsController, TagsController, @@ -54,7 +55,7 @@ router.route("/_status").get((req: Request, res: Response) => { // Authenticated routes router.use( - "/", + /\/(api|download)/, bodyAuthorizationHoistMiddleware, temporaryAccessCookieHoistMiddleware, jwtMiddleware, @@ -63,7 +64,7 @@ router.use( ) // Non-API routes -router.route("/datasets/:datasetIdOrSlug/download").post(Datasets.DownloadController.create) +router.route("/download/datasets/:datasetIdOrSlug").post(Download.DatasetsController.create) // API routes // Add all the standard api controller routes here diff --git a/api/src/services/datasets/download/index.ts b/api/src/services/datasets/download/index.ts deleted file mode 100644 index bd71ddb9..00000000 --- a/api/src/services/datasets/download/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { CreateService } from "./create-service" - -// Sub-Services -export { CreateFromFileService } from "./create-from-file-service" -export { CreateFromIntegrationService } from "./create-from-integration-service" diff --git a/api/src/services/datasets/index.ts b/api/src/services/datasets/index.ts index 72809b84..02a45f3f 100644 --- a/api/src/services/datasets/index.ts +++ b/api/src/services/datasets/index.ts @@ -1,6 +1,5 @@ export { CreateService } from "./create-service" export { UpdateService } from "./update-service" -export * as Download from "./download" export * as Files from "./files" export * as Refresh from "./refresh" diff --git a/api/src/services/datasets/download/create-from-file-service.ts b/api/src/services/download/datasets/create-from-file-service.ts similarity index 100% rename from api/src/services/datasets/download/create-from-file-service.ts rename to api/src/services/download/datasets/create-from-file-service.ts diff --git a/api/src/services/datasets/download/create-from-integration-service.ts b/api/src/services/download/datasets/create-from-integration-service.ts similarity index 100% rename from api/src/services/datasets/download/create-from-integration-service.ts rename to api/src/services/download/datasets/create-from-integration-service.ts diff --git a/api/src/services/datasets/download/create-service.ts b/api/src/services/download/datasets/create-service.ts similarity index 87% rename from api/src/services/datasets/download/create-service.ts rename to api/src/services/download/datasets/create-service.ts index 9057996f..dbfb04a6 100644 --- a/api/src/services/datasets/download/create-service.ts +++ b/api/src/services/download/datasets/create-service.ts @@ -2,8 +2,8 @@ import { CsvFormatterStream } from "fast-csv" import { isEmpty, isUndefined } from "lodash" import { Dataset, User } from "@/models" -import CreateFromIntegrationService from "@/services/datasets/download/create-from-integration-service" -import CreateFromFileService from "@/services/datasets/download/create-from-file-service" +import CreateFromIntegrationService from "@/services/download/datasets/create-from-integration-service" +import CreateFromFileService from "@/services/download/datasets/create-from-file-service" import BaseService from "@/services/base-service" diff --git a/api/src/services/download/datasets/index.ts b/api/src/services/download/datasets/index.ts new file mode 100644 index 00000000..e323ee50 --- /dev/null +++ b/api/src/services/download/datasets/index.ts @@ -0,0 +1 @@ +export { CreateService } from "./create-service" diff --git a/api/src/services/download/index.ts b/api/src/services/download/index.ts new file mode 100644 index 00000000..190b03a5 --- /dev/null +++ b/api/src/services/download/index.ts @@ -0,0 +1 @@ +export * as Datasets from "./datasets" diff --git a/api/src/services/index.ts b/api/src/services/index.ts index 0342449f..c7ca45bc 100644 --- a/api/src/services/index.ts +++ b/api/src/services/index.ts @@ -5,6 +5,7 @@ export * as DatasetFields from "./dataset-fields" export * as DatasetIntegrations from "./dataset-integrations" export * as Datasets from "./datasets" export * as DatasetStewardships from "./dataset-stewardships" +export * as Download from "./download" export * as Taggings from "./taggings" export * as UserGroups from "./user-groups" export * as Users from "./users" diff --git a/web/src/components/dataset-entries/DownloadAsCsvButton.vue b/web/src/components/dataset-entries/DownloadAsCsvButton.vue index 19b18cd3..90559162 100644 --- a/web/src/components/dataset-entries/DownloadAsCsvButton.vue +++ b/web/src/components/dataset-entries/DownloadAsCsvButton.vue @@ -47,7 +47,7 @@ const accessToken = ref(null) const downloadUrl = computed(() => { const serializedParams = stringifyQuery(props.query) - return `${API_BASE_URL}/datasets/${props.datasetId}/download.csv?${serializedParams}` + return `${API_BASE_URL}/download/datasets/${props.datasetId}.csv?${serializedParams}` }) async function getAccessTokenAndSubmit() {