diff --git a/apps/dashboard/src/main/java/com/akto/action/TrafficAction.java b/apps/dashboard/src/main/java/com/akto/action/TrafficAction.java index be4dd26d93..79cf7e3807 100644 --- a/apps/dashboard/src/main/java/com/akto/action/TrafficAction.java +++ b/apps/dashboard/src/main/java/com/akto/action/TrafficAction.java @@ -67,6 +67,31 @@ public String fetchSampleData() { return Action.SUCCESS.toUpperCase(); } + public String fetchSampleDataForTestEditor() { + fetchSampleData(); + if(sampleDataList == null || sampleDataList.isEmpty() || sampleDataList.get(0).getSamples().isEmpty()) { + sampleDataList = new ArrayList<>(); + ApiCollection randomActiveCollection = ApiCollectionsDao.instance.findOne(Filters.and( + Filters.eq(ApiCollection._DEACTIVATED, false), + Filters.not( + Filters.size(ApiCollection.URLS_STRING, 0) + ) + )); + + if(randomActiveCollection == null) { + return Action.SUCCESS.toUpperCase(); + } + + int activeCollectionId = randomActiveCollection.getId(); + + sampleDataList = SampleDataDao.instance.findAll(Filters.and( + Filters.in(SingleTypeInfo._COLLECTION_IDS, activeCollectionId), + Filters.not(Filters.size(SampleData.SAMPLES, 0)) + )); + } + return Action.SUCCESS.toUpperCase(); + } + public String fetchAllSampleData() { sampleDataList = SampleDataDao.instance.findAll(Filters.eq(Constants.ID + "." + ApiInfoKey.API_COLLECTION_ID, apiCollectionId), skip, limit == 0 ? 50 : limit, null); return Action.SUCCESS.toUpperCase(); diff --git a/apps/dashboard/src/main/resources/struts.xml b/apps/dashboard/src/main/resources/struts.xml index 16bddac430..bc4025ca52 100644 --- a/apps/dashboard/src/main/resources/struts.xml +++ b/apps/dashboard/src/main/resources/struts.xml @@ -2400,7 +2400,7 @@ ^actionErrors.* - + @@ -2424,6 +2424,29 @@ ^actionErrors.* + + + + + SAMPLE_DATA + READ + + + 403 + false + ^actionErrors.* + + + + + 401 + + + 403 + false + ^actionErrors.* + + diff --git a/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/test_editor/api.js b/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/test_editor/api.js index 4dce55eb9c..660245405f 100644 --- a/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/test_editor/api.js +++ b/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/test_editor/api.js @@ -12,6 +12,17 @@ const testEditorRequests = { } }) }, + fetchSampleDataForTestEditor(collectionId, apiEndpointUrl, apiEndpointMethod) { + return request({ + url: '/api/fetchSampleDataForTestEditor', + method: 'post', + data: { + apiCollectionId: collectionId, + url: apiEndpointUrl, + method: apiEndpointMethod + } + }) + }, fetchVulnerableRequests(skip, limit) { return request({ diff --git a/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/test_editor/components/SampleApi.jsx b/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/test_editor/components/SampleApi.jsx index 887c9c319c..6b6dd6156b 100644 --- a/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/test_editor/components/SampleApi.jsx +++ b/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/test_editor/components/SampleApi.jsx @@ -40,21 +40,15 @@ const SampleApi = () => { const selectedSampleApi = PersistStore(state => state.selectedSampleApi) const setSelectedSampleApi = PersistStore(state => state.setSelectedSampleApi) + const [isCustomAPI, setIsCustomAPI] = useState(Object.keys(selectedSampleApi)?.length > 0 || false) + const tabs = [{ id: 'request', content: 'Request' }, { id: 'response', content: 'Response'}]; const mapCollectionIdToName = func.mapCollectionIdToName(allCollections) useEffect(()=>{ if(showEmptyLayout) return let testId = selectedTest.value - let sampleData = null - if(sampleDataList?.length > 0) { - sampleData = { - apiCollectionId: sampleDataList[0].id.apiCollectionId, - method: {_name: sampleDataList[0].id.method}, - url: sampleDataList[0].id.url - } - } - let selectedUrl = sampleData ? sampleData : Object.keys(selectedSampleApi).length > 0 ? selectedSampleApi : vulnerableRequestsObj?.[testId] + let selectedUrl = Object.keys(selectedSampleApi).length > 0 ? selectedSampleApi : vulnerableRequestsObj?.[testId] setSelectedCollectionId(null) setCopyCollectionId(null) setTestResult(null) @@ -123,8 +117,6 @@ const SampleApi = () => { useEffect(() => { if (selectedCollectionId && selectedApiEndpoint) { fetchSampleData(selectedCollectionId, func.toMethodUrlObject(selectedApiEndpoint).url, func.toMethodUrlObject(selectedApiEndpoint).method) - }else{ - setEditorData({message: ''}) } setTestResult(null) }, [selectedApiEndpoint]) @@ -162,6 +154,7 @@ const SampleApi = () => { }) const fetchApiEndpoints = async (collectionId) => { + if(!collectionId) return const apiEndpointsResponse = await api.fetchCollectionWiseApiEndpoints(collectionId) if (apiEndpointsResponse) { setApiEndpoints(apiEndpointsResponse.listOfEndpointsInCollection) @@ -179,7 +172,12 @@ const SampleApi = () => { const fetchSampleData = async (collectionId, apiEndpointUrl, apiEndpointMethod) => { setShowEmptyLayout(false) - const sampleDataResponse = await testEditorRequests.fetchSampleData(collectionId, apiEndpointUrl, apiEndpointMethod) + let sampleDataResponse + if(isCustomAPI) { + sampleDataResponse = await testEditorRequests.fetchSampleData(collectionId, apiEndpointUrl, apiEndpointMethod) + } else { + sampleDataResponse = await testEditorRequests.fetchSampleDataForTestEditor(collectionId, apiEndpointUrl, apiEndpointMethod) + } if (sampleDataResponse) { if (sampleDataResponse.sampleDataList.length > 0 && sampleDataResponse.sampleDataList[0].samples && sampleDataResponse.sampleDataList[0].samples.length > 0) { const sampleDataJson = JSON.parse(sampleDataResponse.sampleDataList[0].samples[sampleDataResponse.sampleDataList[0].samples.length - 1]) @@ -206,6 +204,7 @@ const SampleApi = () => { const toggleSelectApiActive = () => setSelectApiActive(prev => !prev) const saveFunc = () =>{ + setIsCustomAPI(true) setSelectedApiEndpoint(copySelectedApiEndpoint) const urlObj = func.toMethodUrlObject(copySelectedApiEndpoint) const sampleApi = {