Skip to content

Commit 622610c

Browse files
committed
feat #OBS-I640 : limits on filter
1 parent 35047d8 commit 622610c

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

api-service/src/configs/Config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,5 +144,8 @@ export const config = {
144144
},
145145
"alerts_rules": {
146146
"config_path": process.env.alerts_config_path
147-
}
147+
},
148+
"dataset_filter_config": {
149+
"filter_limit": process.env.filter_limit ? parseInt(process.env.filter_limit) : 10 // Maximum number of filters allowed in a dataset
150+
}
148151
}

api-service/src/controllers/DatasetList/DatasetList.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import DatasetCreate from "./DatasetListValidationSchema.json";
77
import { ResponseHandler } from "../../helpers/ResponseHandler";
88
import { attachDraftConnectors, attachLiveConnectors, datasetService } from "../../services/DatasetService";
99
import { obsrvError } from "../../types/ObsrvError";
10-
import { Dataset } from "../../models/Dataset";
11-
import { Datasource } from "../../models/Datasource";
10+
import { config } from "../../configs/Config";
1211

1312
export const apiId = "api.datasets.list"
1413
export const errorCode = "DATASET_LIST_FAILURE"
1514
const liveDatasetStatus = ["Live", "Retired", "Purged"]
1615
const draftDatasetStatus = ["Draft", "ReadyToPublish"]
1716
const defaultFields = ["dataset_id", "name", "type", "status", "tags", "version", "api_version", "dataset_config", "created_date", "updated_date"]
17+
const MAX_STATUS_ARRAY_SIZE = config.dataset_filter_config.filter_limit || 10;
1818

1919
const datasetList = async (req: Request, res: Response) => {
2020

@@ -37,6 +37,9 @@ const listDatasets = async (request: Record<string, any>): Promise<Record<string
3737
const datasetStatus = _.get(filters, "status");
3838
const connectorFilter = _.get(filters, "connectors");
3939
const status = _.isArray(datasetStatus) ? datasetStatus : _.compact([datasetStatus])
40+
if (status.length > MAX_STATUS_ARRAY_SIZE) {
41+
throw obsrvError("", "DATASET_LIST_INPUT_INVALID", "Status filter array length exceeds the allowed limit", "BAD_REQUEST", 400);
42+
}
4043
const draftFilters = _.omit(_.set(_.cloneDeep(filters), "status", _.isEmpty(status) ? draftDatasetStatus : _.intersection(status, draftDatasetStatus)), "connectors");
4144
const liveFilters = _.omit(_.set(_.cloneDeep(filters), "status", _.isEmpty(status) ? liveDatasetStatus : _.intersection(status, liveDatasetStatus)), "connectors");
4245
let liveDatasetList = await datasetService.getLiveDatasets(liveFilters, defaultFields)

0 commit comments

Comments
 (0)