diff --git a/.gitignore b/.gitignore
index 685da2accc..d90e415a62 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,4 @@ https:
**/data-zoo-data
**/data-zoo-logs
**/bin
+.factorypath
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000..b79b0909a1
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,8 @@
+proto-gen:
+ sh ./scripts/proto-gen.sh
+
+build: proto-gen
+ mvn install -DskipTests
+
+build-clean: proto-gen
+ mvn clean install -DskipTests
\ No newline at end of file
diff --git a/apps/dashboard/pom.xml b/apps/dashboard/pom.xml
index c7966302b5..6cbf9bd3ee 100644
--- a/apps/dashboard/pom.xml
+++ b/apps/dashboard/pom.xml
@@ -1,5 +1,6 @@
-
+
4.0.0
@@ -25,7 +26,7 @@
-
+
com.amazonaws
aws-java-sdk-lambda
1.12.405
@@ -109,6 +110,11 @@
dao
${project.version}
+
+ com.akto.libs.protobuf
+ protobuf
+ ${project.version}
+
com.akto.libs.utils
utils
@@ -294,4 +300,4 @@
${project.artifactId}
-
+
\ No newline at end of file
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/AbstractThreatDetectionAction.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/AbstractThreatDetectionAction.java
new file mode 100644
index 0000000000..3d2c78cc0b
--- /dev/null
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/AbstractThreatDetectionAction.java
@@ -0,0 +1,32 @@
+package com.akto.action.threat_detection;
+
+import com.akto.action.UserAction;
+import com.akto.dao.context.Context;
+import com.akto.database_abstractor_authenticator.JwtAuthenticator;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+public class AbstractThreatDetectionAction extends UserAction {
+
+ private Map tokens = new HashMap<>();
+
+ public String getApiToken() {
+ try {
+ int accountId = Context.accountId.get();
+ if (tokens.containsKey(accountId)) {
+ return tokens.get(accountId);
+ }
+
+ Map claims = new HashMap<>();
+ claims.put("accountId", accountId);
+ String token = JwtAuthenticator.createJWT(claims, "Akto", "access_tbs", Calendar.MINUTE, 1);
+ tokens.put(accountId, token);
+
+ return token;
+ } catch (Exception e) {
+ System.out.println(e);
+ return "";
+ }
+ }
+}
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardMaliciousEvent.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardMaliciousEvent.java
new file mode 100644
index 0000000000..d63268b448
--- /dev/null
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardMaliciousEvent.java
@@ -0,0 +1,111 @@
+package com.akto.action.threat_detection;
+
+import com.akto.dto.type.URLMethods;
+import com.akto.dto.type.URLMethods.Method;
+
+public class DashboardMaliciousEvent {
+ private String id;
+ private String actor;
+ private String filter_id;
+ private String url;
+ private URLMethods.Method method;
+ private int apiCollectionId;
+ private String ip;
+ private String country;
+ private long timestamp;
+
+ public DashboardMaliciousEvent() {}
+
+ public DashboardMaliciousEvent(
+ String id,
+ String actor,
+ String filter,
+ String url,
+ Method method,
+ int apiCollectionId,
+ String ip,
+ String country,
+ long timestamp) {
+ this.id = id;
+ this.actor = actor;
+ this.filter_id = filter;
+ this.url = url;
+ this.method = method;
+ this.apiCollectionId = apiCollectionId;
+ this.ip = ip;
+ this.country = country;
+ this.timestamp = timestamp;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getActor() {
+ return actor;
+ }
+
+ public void setActor(String actor) {
+ this.actor = actor;
+ }
+
+ public String getFilterId() {
+ return filter_id;
+ }
+
+ public void setFilterId(String filter) {
+ this.filter_id = filter;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public URLMethods.Method getMethod() {
+ return method;
+ }
+
+ public void setMethod(URLMethods.Method method) {
+ this.method = method;
+ }
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public int getApiCollectionId() {
+ return apiCollectionId;
+ }
+
+ public void setApiCollectionId(int apiCollectionId) {
+ this.apiCollectionId = apiCollectionId;
+ }
+}
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardThreatActor.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardThreatActor.java
new file mode 100644
index 0000000000..5b7c3a7d04
--- /dev/null
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardThreatActor.java
@@ -0,0 +1,77 @@
+package com.akto.action.threat_detection;
+
+import com.akto.dto.type.URLMethods.Method;
+
+public class DashboardThreatActor {
+
+ private String id;
+ private String latestApiEndpoint;
+ private String latestApiIp;
+ private Method latestApiMethod;
+ private long discoveredAt;
+ private String country;
+
+ public DashboardThreatActor(
+ String id,
+ String latestApiEndpoint,
+ String latestApiIp,
+ Method latestApiMethod,
+ long discoveredAt,
+ String country) {
+
+ this.id = id;
+ this.latestApiEndpoint = latestApiEndpoint;
+ this.latestApiIp = latestApiIp;
+ this.latestApiMethod = latestApiMethod;
+ this.discoveredAt = discoveredAt;
+ this.country = country;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatestApiEndpoint() {
+ return latestApiEndpoint;
+ }
+
+ public void setLatestApiEndpoint(String latestApiEndpoint) {
+ this.latestApiEndpoint = latestApiEndpoint;
+ }
+
+ public String getLatestApiIp() {
+ return latestApiIp;
+ }
+
+ public void setLatestApiIp(String latestApiIp) {
+ this.latestApiIp = latestApiIp;
+ }
+
+ public Method getLatestApiMethod() {
+ return latestApiMethod;
+ }
+
+ public void setLatestApiMethod(Method latestApiMethod) {
+ this.latestApiMethod = latestApiMethod;
+ }
+
+ public long getDiscoveredAt() {
+ return discoveredAt;
+ }
+
+ public void setDiscoveredAt(long discoveredAt) {
+ this.discoveredAt = discoveredAt;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+}
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardThreatApi.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardThreatApi.java
new file mode 100644
index 0000000000..9ebe40965b
--- /dev/null
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/DashboardThreatApi.java
@@ -0,0 +1,61 @@
+package com.akto.action.threat_detection;
+
+import com.akto.dto.type.URLMethods;
+
+public class DashboardThreatApi {
+
+ private String api;
+ private URLMethods.Method method;
+ private int actorsCount;
+ private int requestsCount;
+ private long discoveredAt;
+
+ public DashboardThreatApi(
+ String api, URLMethods.Method method, int actorsCount, int requestsCount, long discoveredAt) {
+ this.api = api;
+ this.method = method;
+ this.actorsCount = actorsCount;
+ this.requestsCount = requestsCount;
+ this.discoveredAt = discoveredAt;
+ }
+
+ public String getApi() {
+ return api;
+ }
+
+ public void setApi(String api) {
+ this.api = api;
+ }
+
+ public URLMethods.Method getMethod() {
+ return method;
+ }
+
+ public void setMethod(URLMethods.Method method) {
+ this.method = method;
+ }
+
+ public int getActorsCount() {
+ return actorsCount;
+ }
+
+ public void setActorsCount(int actorsCount) {
+ this.actorsCount = actorsCount;
+ }
+
+ public int getRequestsCount() {
+ return requestsCount;
+ }
+
+ public void setRequestsCount(int requestsCount) {
+ this.requestsCount = requestsCount;
+ }
+
+ public long getDiscoveredAt() {
+ return discoveredAt;
+ }
+
+ public void setDiscoveredAt(long discoveredAt) {
+ this.discoveredAt = discoveredAt;
+ }
+}
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/SuspectSampleDataAction.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/SuspectSampleDataAction.java
index d271463da8..473768bdb8 100644
--- a/apps/dashboard/src/main/java/com/akto/action/threat_detection/SuspectSampleDataAction.java
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/SuspectSampleDataAction.java
@@ -1,184 +1,209 @@
package com.akto.action.threat_detection;
-import java.util.ArrayList;
-import java.util.HashSet;
+import com.akto.dto.traffic.SuspectSampleData;
+import com.akto.dto.type.URLMethods;
+import com.akto.proto.generated.threat_detection.service.dashboard_service.v1.FetchAlertFiltersResponse;
+import com.akto.proto.generated.threat_detection.service.dashboard_service.v1.ListMaliciousRequestsResponse;
+import com.akto.proto.utils.ProtoMessageUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.bson.conversions.Bson;
-
-import com.akto.action.UserAction;
-import com.akto.dao.SuspectSampleDataDao;
-import com.akto.dao.context.Context;
-import com.akto.dto.traffic.SuspectSampleData;
-import com.akto.util.Constants;
-import com.mongodb.client.model.Filters;
-import com.mongodb.client.model.Sorts;
-
-public class SuspectSampleDataAction extends UserAction {
-
- List sampleData;
- int skip;
- static final int LIMIT = 50;
- List ips;
- List urls;
- List apiCollectionIds;
- long total;
- Map sort;
- int startTimestamp, endTimestamp;
-
- public String fetchSuspectSampleData() {
-
- List filterList = new ArrayList<>();
-
- /*
- * In case time filters are empty,
- * using default filter as 2 months.
- */
-
- if (startTimestamp <= 0) {
- startTimestamp = Context.now() - 2 * 30 * 24 * 60 * 60;
- }
- if (endTimestamp <= 0) {
- endTimestamp = Context.now() + 10 * 60;
- }
-
- filterList.add(Filters.gte(SuspectSampleData._DISCOVERED, startTimestamp));
- filterList.add(Filters.lte(SuspectSampleData._DISCOVERED, endTimestamp));
-
- if (ips != null && !ips.isEmpty()) {
- filterList.add(Filters.in(SuspectSampleData.SOURCE_IPS, ips));
- }
- if (urls != null && !urls.isEmpty()) {
- filterList.add(Filters.in(SuspectSampleData.MATCHING_URL, urls));
- }
- if (apiCollectionIds != null && !apiCollectionIds.isEmpty()) {
- filterList.add(Filters.in(SuspectSampleData.API_COLLECTION_ID, apiCollectionIds));
- }
-
- Bson finalFilter = Filters.empty();
-
- if (!filterList.isEmpty()) {
- finalFilter = Filters.and(filterList);
- }
-
- String sortKey = SuspectSampleData._DISCOVERED;
- int sortDirection = -1;
- /*
- * add any new sort key here,
- * for validation and sanity.
- */
- Set sortKeys = new HashSet<>();
- sortKeys.add(SuspectSampleData._DISCOVERED);
-
- if (sort != null && !sort.isEmpty()) {
- Entry sortEntry = sort.entrySet().iterator().next();
- sortKey = sortEntry.getKey();
- if (!sortKeys.contains(sortKey)) {
- sortKey = SuspectSampleData._DISCOVERED;
- }
- sortDirection = sortEntry.getValue();
- if (!(sortDirection == -1 || sortDirection == 1)) {
- sortDirection = -1;
- }
- }
-
- /*
- * In case timestamp is same, then id acts as tie-breaker,
- * to avoid repeating the same documents again.
- */
- Bson sort = sortDirection == -1 ? Sorts.descending(sortKey, Constants.ID)
- : Sorts.ascending(sortKey, Constants.ID);
- sampleData = SuspectSampleDataDao.instance.findAll(finalFilter, skip, LIMIT, sort);
- total = SuspectSampleDataDao.instance.count(finalFilter);
-
- return SUCCESS.toUpperCase();
- }
-
- public String fetchFilters() {
- ips = new ArrayList<>(
- SuspectSampleDataDao.instance.findDistinctFields(SuspectSampleData.SOURCE_IPS, String.class, Filters.empty()));
- urls = new ArrayList<>(SuspectSampleDataDao.instance.findDistinctFields(SuspectSampleData.MATCHING_URL, String.class,
- Filters.empty()));
- return SUCCESS.toUpperCase();
- }
-
- public List getSampleData() {
- return sampleData;
- }
-
- public void setSampleData(List sampleData) {
- this.sampleData = sampleData;
- }
+import java.util.stream.Collectors;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+public class SuspectSampleDataAction extends AbstractThreatDetectionAction {
+
+ List sampleData;
+ List maliciousEvents;
+ int skip;
+ static final int LIMIT = 50;
+ List ips;
+ List urls;
+ List apiCollectionIds;
+ long total;
+ Map sort;
+ int startTimestamp, endTimestamp;
+
+ private final CloseableHttpClient httpClient;
+ private final String backendUrl;
+
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ public SuspectSampleDataAction() {
+ super();
+ this.httpClient = HttpClients.createDefault();
+ this.backendUrl = System.getenv("THREAT_DETECTION_BACKEND_URL");
+ }
+
+ public String fetchSampleData() {
+ HttpPost post =
+ new HttpPost(String.format("%s/api/dashboard/list_malicious_requests", backendUrl));
+ post.addHeader("Authorization", "Bearer " + this.getApiToken());
+ post.addHeader("Content-Type", "application/json");
+
+ System.out.print("API Token: " + this.getApiToken());
+
+ Map body =
+ new HashMap() {
+ {
+ put("skip", skip);
+ put("limit", LIMIT);
+ }
+ };
+ String msg = objectMapper.valueToTree(body).toString();
+
+ System.out.println("Request body for list malicious requests" + msg);
+
+ StringEntity requestEntity = new StringEntity(msg, ContentType.APPLICATION_JSON);
+ post.setEntity(requestEntity);
+
+ try (CloseableHttpResponse resp = this.httpClient.execute(post)) {
+ String responseBody = EntityUtils.toString(resp.getEntity());
+
+ System.out.println(responseBody);
+
+ ProtoMessageUtils.toProtoMessage(
+ ListMaliciousRequestsResponse.class, responseBody)
+ .ifPresent(
+ m -> {
+ this.maliciousEvents =
+ m.getMaliciousEventsList().stream()
+ .map(
+ smr ->
+ new DashboardMaliciousEvent(
+ smr.getId(),
+ smr.getActor(),
+ smr.getFilterId(),
+ smr.getEndpoint(),
+ URLMethods.Method.fromString(smr.getMethod()),
+ smr.getApiCollectionId(),
+ smr.getIp(),
+ smr.getCountry(),
+ smr.getDetectedAt()))
+ .collect(Collectors.toList());
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ return ERROR.toUpperCase();
+ }
+
+ return SUCCESS.toUpperCase();
+ }
+
+ public String fetchFilters() {
+ HttpGet get = new HttpGet(String.format("%s/api/dashboard/fetch_filters", backendUrl));
+ get.addHeader("Authorization", "Bearer " + this.getApiToken());
+ get.addHeader("Content-Type", "application/json");
+
+ try (CloseableHttpResponse resp = this.httpClient.execute(get)) {
+ String responseBody = EntityUtils.toString(resp.getEntity());
+
+ System.out.println(responseBody);
+
+ ProtoMessageUtils.toProtoMessage(
+ FetchAlertFiltersResponse.class, responseBody)
+ .ifPresent(
+ msg -> {
+ this.ips = msg.getActorsList();
+ this.urls = msg.getUrlsList();
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ return ERROR.toUpperCase();
+ }
+
+ return SUCCESS.toUpperCase();
+ }
+
+ public List getSampleData() {
+ return sampleData;
+ }
+
+ public void setSampleData(List sampleData) {
+ this.sampleData = sampleData;
+ }
+
+ public int getSkip() {
+ return skip;
+ }
+
+ public void setSkip(int skip) {
+ this.skip = skip;
+ }
+
+ public static int getLimit() {
+ return LIMIT;
+ }
+
+ public List getIps() {
+ return ips;
+ }
+
+ public void setIps(List ips) {
+ this.ips = ips;
+ }
+
+ public List getUrls() {
+ return urls;
+ }
+
+ public void setUrls(List urls) {
+ this.urls = urls;
+ }
+
+ public List getApiCollectionIds() {
+ return apiCollectionIds;
+ }
+
+ public void setApiCollectionIds(List apiCollectionIds) {
+ this.apiCollectionIds = apiCollectionIds;
+ }
+
+ public long getTotal() {
+ return total;
+ }
+
+ public void setTotal(long total) {
+ this.total = total;
+ }
+
+ public Map getSort() {
+ return sort;
+ }
+
+ public void setSort(Map sort) {
+ this.sort = sort;
+ }
+
+ public int getStartTimestamp() {
+ return startTimestamp;
+ }
+
+ public void setStartTimestamp(int startTimestamp) {
+ this.startTimestamp = startTimestamp;
+ }
- public int getSkip() {
- return skip;
- }
-
- public void setSkip(int skip) {
- this.skip = skip;
- }
-
- public static int getLimit() {
- return LIMIT;
- }
-
- public List getIps() {
- return ips;
- }
-
- public void setIps(List ips) {
- this.ips = ips;
- }
-
- public List getUrls() {
- return urls;
- }
+ public int getEndTimestamp() {
+ return endTimestamp;
+ }
- public void setUrls(List urls) {
- this.urls = urls;
- }
-
- public List getApiCollectionIds() {
- return apiCollectionIds;
- }
-
- public void setApiCollectionIds(List apiCollectionIds) {
- this.apiCollectionIds = apiCollectionIds;
- }
-
- public long getTotal() {
- return total;
- }
-
- public void setTotal(long total) {
- this.total = total;
- }
-
- public Map getSort() {
- return sort;
- }
-
- public void setSort(Map sort) {
- this.sort = sort;
- }
-
- public int getStartTimestamp() {
- return startTimestamp;
- }
-
- public void setStartTimestamp(int startTimestamp) {
- this.startTimestamp = startTimestamp;
- }
-
- public int getEndTimestamp() {
- return endTimestamp;
- }
-
- public void setEndTimestamp(int endTimestamp) {
- this.endTimestamp = endTimestamp;
- }
+ public void setEndTimestamp(int endTimestamp) {
+ this.endTimestamp = endTimestamp;
+ }
+
+ public List getMaliciousEvents() {
+ return maliciousEvents;
+ }
+ public void setMaliciousEvents(List maliciousRequests) {
+ this.maliciousEvents = maliciousRequests;
+ }
}
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatActorAction.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatActorAction.java
new file mode 100644
index 0000000000..b169e934e3
--- /dev/null
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatActorAction.java
@@ -0,0 +1,154 @@
+package com.akto.action.threat_detection;
+
+import com.akto.dto.type.URLMethods;
+import com.akto.proto.generated.threat_detection.service.dashboard_service.v1.ListThreatActorResponse;
+import com.akto.proto.generated.threat_detection.service.dashboard_service.v1.ThreatActorByCountryResponse;
+import com.akto.proto.utils.ProtoMessageUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+public class ThreatActorAction extends AbstractThreatDetectionAction {
+
+ List actors;
+ List actorsCountPerCountry;
+ int skip;
+ static final int LIMIT = 50;
+ long total;
+ Map sort;
+ int startTimestamp, endTimestamp;
+
+ private final CloseableHttpClient httpClient;
+ private final String backendUrl;
+
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ public ThreatActorAction() {
+ super();
+ this.httpClient = HttpClients.createDefault();
+ this.backendUrl = System.getenv("THREAT_DETECTION_BACKEND_URL");
+ }
+
+ public String getActorsCountPerCounty() {
+ HttpGet get =
+ new HttpGet(String.format("%s/api/dashboard/get_actors_count_per_country", backendUrl));
+ get.addHeader("Authorization", "Bearer " + this.getApiToken());
+ get.addHeader("Content-Type", "application/json");
+
+ try (CloseableHttpResponse resp = this.httpClient.execute(get)) {
+ String responseBody = EntityUtils.toString(resp.getEntity());
+
+ System.out.println(responseBody);
+
+ ProtoMessageUtils.toProtoMessage(
+ ThreatActorByCountryResponse.class, responseBody)
+ .ifPresent(
+ m -> {
+ this.actorsCountPerCountry =
+ m.getCountriesList().stream()
+ .map(smr -> new ThreatActorPerCountry(smr.getCode(), smr.getCount()))
+ .collect(Collectors.toList());
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ return ERROR.toUpperCase();
+ }
+
+ return SUCCESS.toUpperCase();
+ }
+
+ public String fetchThreatActors() {
+ HttpPost post = new HttpPost(String.format("%s/api/dashboard/list_threat_actors", backendUrl));
+ post.addHeader("Authorization", "Bearer " + this.getApiToken());
+ post.addHeader("Content-Type", "application/json");
+
+ Map body =
+ new HashMap() {
+ {
+ put("skip", skip);
+ put("limit", LIMIT);
+ }
+ };
+ String msg = objectMapper.valueToTree(body).toString();
+
+ System.out.println("Request body for list threat actors" + msg);
+
+ StringEntity requestEntity = new StringEntity(msg, ContentType.APPLICATION_JSON);
+ post.setEntity(requestEntity);
+
+ try (CloseableHttpResponse resp = this.httpClient.execute(post)) {
+ String responseBody = EntityUtils.toString(resp.getEntity());
+
+ System.out.println(responseBody);
+
+ ProtoMessageUtils.toProtoMessage(
+ ListThreatActorResponse.class, responseBody)
+ .ifPresent(
+ m -> {
+ this.actors =
+ m.getActorsList().stream()
+ .map(
+ smr ->
+ new DashboardThreatActor(
+ smr.getId(),
+ smr.getLatestApiEndpoint(),
+ smr.getLatestApiIp(),
+ URLMethods.Method.fromString(smr.getLatestApiMethod()),
+ smr.getDiscoveredAt(),
+ smr.getCountry()))
+ .collect(Collectors.toList());
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ return ERROR.toUpperCase();
+ }
+
+ return SUCCESS.toUpperCase();
+ }
+
+ public int getSkip() {
+ return skip;
+ }
+
+ public void setSkip(int skip) {
+ this.skip = skip;
+ }
+
+ public static int getLimit() {
+ return LIMIT;
+ }
+
+ public long getTotal() {
+ return total;
+ }
+
+ public void setTotal(long total) {
+ this.total = total;
+ }
+
+ public List getActors() {
+ return actors;
+ }
+
+ public void setActors(List actor) {
+ this.actors = actor;
+ }
+
+ public List getActorsCountPerCountry() {
+ return actorsCountPerCountry;
+ }
+
+ public void setActorsCountPerCountry(List actorsCountPerCountry) {
+ this.actorsCountPerCountry = actorsCountPerCountry;
+ }
+}
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatActorPerCountry.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatActorPerCountry.java
new file mode 100644
index 0000000000..33765fe5dc
--- /dev/null
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatActorPerCountry.java
@@ -0,0 +1,27 @@
+package com.akto.action.threat_detection;
+
+public class ThreatActorPerCountry {
+ private String country;
+ private int count;
+
+ public ThreatActorPerCountry(String country, int count) {
+ this.country = country;
+ this.count = count;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+}
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatApiAction.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatApiAction.java
new file mode 100644
index 0000000000..ebbebc669e
--- /dev/null
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatApiAction.java
@@ -0,0 +1,164 @@
+package com.akto.action.threat_detection;
+
+import com.akto.dto.type.URLMethods;
+import com.akto.proto.generated.threat_detection.service.dashboard_service.v1.ListThreatApiResponse;
+import com.akto.proto.generated.threat_detection.service.dashboard_service.v1.ThreatCategoryWiseCountResponse;
+import com.akto.proto.utils.ProtoMessageUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+public class ThreatApiAction extends AbstractThreatDetectionAction {
+
+ List apis;
+ List categoryCounts;
+ int skip;
+ static final int LIMIT = 50;
+ long total;
+ Map sort;
+ int startTimestamp, endTimestamp;
+
+ private final CloseableHttpClient httpClient;
+ private final String backendUrl;
+
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ public ThreatApiAction() {
+ super();
+ this.httpClient = HttpClients.createDefault();
+ this.backendUrl = System.getenv("THREAT_DETECTION_BACKEND_URL");
+ }
+
+ public String fetchThreatCategoryCount() {
+ HttpGet get =
+ new HttpGet(String.format("%s/api/dashboard/get_subcategory_wise_count", backendUrl));
+ get.addHeader("Authorization", "Bearer " + this.getApiToken());
+ get.addHeader("Content-Type", "application/json");
+
+ try (CloseableHttpResponse resp = this.httpClient.execute(get)) {
+ String responseBody = EntityUtils.toString(resp.getEntity());
+
+ System.out.println(responseBody);
+
+ ProtoMessageUtils.toProtoMessage(
+ ThreatCategoryWiseCountResponse.class, responseBody)
+ .ifPresent(
+ m -> {
+ this.categoryCounts =
+ m.getCategoryWiseCountsList().stream()
+ .map(
+ smr ->
+ new ThreatCategoryCount(
+ smr.getCategory(), smr.getSubCategory(), smr.getCount()))
+ .collect(Collectors.toList());
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ return ERROR.toUpperCase();
+ }
+
+ return SUCCESS.toUpperCase();
+ }
+
+ public String fetchThreatApis() {
+ HttpPost post = new HttpPost(String.format("%s/api/dashboard/list_threat_apis", backendUrl));
+ post.addHeader("Authorization", "Bearer " + this.getApiToken());
+ post.addHeader("Content-Type", "application/json");
+
+ Map body =
+ new HashMap() {
+ {
+ put("skip", skip);
+ put("limit", LIMIT);
+ }
+ };
+ String msg = objectMapper.valueToTree(body).toString();
+
+ System.out.println("Request body for list threat actors" + msg);
+
+ StringEntity requestEntity = new StringEntity(msg, ContentType.APPLICATION_JSON);
+ post.setEntity(requestEntity);
+
+ try (CloseableHttpResponse resp = this.httpClient.execute(post)) {
+ String responseBody = EntityUtils.toString(resp.getEntity());
+
+ System.out.println(responseBody);
+
+ ProtoMessageUtils.toProtoMessage(
+ ListThreatApiResponse.class, responseBody)
+ .ifPresent(
+ m -> {
+ this.apis =
+ m.getApisList().stream()
+ .map(
+ smr ->
+ new DashboardThreatApi(
+ smr.getEndpoint(),
+ URLMethods.Method.fromString(smr.getMethod()),
+ smr.getActorsCount(),
+ smr.getRequestsCount(),
+ smr.getDiscoveredAt()))
+ .collect(Collectors.toList());
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ return ERROR.toUpperCase();
+ }
+
+ return SUCCESS.toUpperCase();
+ }
+
+ public int getSkip() {
+ return skip;
+ }
+
+ public void setSkip(int skip) {
+ this.skip = skip;
+ }
+
+ public static int getLimit() {
+ return LIMIT;
+ }
+
+ public long getTotal() {
+ return total;
+ }
+
+ public void setTotal(long total) {
+ this.total = total;
+ }
+
+ public List getApis() {
+ return apis;
+ }
+
+ public void setApis(List apis) {
+ this.apis = apis;
+ }
+
+ public Map getSort() {
+ return sort;
+ }
+
+ public void setSort(Map sort) {
+ this.sort = sort;
+ }
+
+ public List getCategoryCounts() {
+ return categoryCounts;
+ }
+
+ public void setCategoryCounts(List categoryCounts) {
+ this.categoryCounts = categoryCounts;
+ }
+}
diff --git a/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatCategoryCount.java b/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatCategoryCount.java
new file mode 100644
index 0000000000..e2ac0b4f5c
--- /dev/null
+++ b/apps/dashboard/src/main/java/com/akto/action/threat_detection/ThreatCategoryCount.java
@@ -0,0 +1,37 @@
+package com.akto.action.threat_detection;
+
+public class ThreatCategoryCount {
+ private String category;
+ private String subCategory;
+ private int count;
+
+ public ThreatCategoryCount(String category, String subCategory, int count) {
+ this.category = category;
+ this.subCategory = subCategory;
+ this.count = count;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public String getSubCategory() {
+ return subCategory;
+ }
+
+ public void setSubCategory(String subCategory) {
+ this.subCategory = subCategory;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+}
diff --git a/apps/dashboard/src/main/resources/struts.xml b/apps/dashboard/src/main/resources/struts.xml
index a5d6881002..9f90b776ce 100644
--- a/apps/dashboard/src/main/resources/struts.xml
+++ b/apps/dashboard/src/main/resources/struts.xml
@@ -1,22 +1,22 @@
-
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
@@ -32,19 +32,21 @@
-
+
/pages/mongo-error.jsp
-
+
{1}
-
+
akto_health
@@ -56,10 +58,9 @@
-
+
-
-
+
401
@@ -69,26 +70,26 @@
-
+
-
-
+
401
-
+
-
+
401
-
-
+
+
subscription
@@ -99,9 +100,9 @@
-
+
-
+
477
@@ -110,18 +111,19 @@
-
+
-
+
-
+
401
-
-
+
+
ACTIVE_ACCOUNTS
@@ -134,21 +136,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
401
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
USER_ACTIONS
@@ -158,7 +162,8 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
newAccountId
@@ -168,8 +173,9 @@
-
-
+
+
INTEGRATIONS
@@ -179,7 +185,8 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
googleConfigResult
@@ -189,8 +196,9 @@
-
-
+
+
INTEGRATIONS
@@ -200,16 +208,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
401
-
-
+
+
INTEGRATIONS
@@ -218,17 +228,19 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
- driveNamesToThirdPartyId
+
+ driveNamesToThirdPartyId
401
-
-
+
+
INTEGRATIONS
@@ -237,16 +249,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
401
-
-
+
+
INTEGRATIONS
@@ -255,16 +269,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
401
-
-
+
+
INTEGRATIONS
@@ -273,18 +289,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
401
-
-
+
INVITE_MEMBERS
@@ -293,20 +309,17 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
- users
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
+
ADMIN_ACTIONS
@@ -316,18 +329,17 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
+
USER_ACTIONS
@@ -337,18 +349,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_ACTIONS
@@ -357,31 +372,33 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
userRoleHierarchy
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
-
+
code
-
+
-
+
code
@@ -389,52 +406,57 @@
-
+
-
+
code
-
-
+
+
-
+
code
-
-
+
+
-
+
code
-
-
+
+
-
+
code
-
-
+
+
-
+
code
-
-
+
+
AKTO_SSO
@@ -448,23 +470,27 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AKTO_SSO
@@ -478,23 +504,26 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
ADMIN_ACTIONS
@@ -504,18 +533,20 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
AKTO_SSO
@@ -529,23 +560,27 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AKTO_SSO
@@ -559,23 +594,26 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -585,18 +623,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AKTO_SSO
@@ -610,23 +651,27 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AKTO_SSO
@@ -640,23 +685,26 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -666,18 +714,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
+
+
+
ADMIN_ACTIONS
@@ -687,18 +738,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -709,18 +763,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -731,18 +788,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_ACTIONS
@@ -751,24 +811,27 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
apiCatalogData
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
-
+
API_COLLECTIONS
READ
@@ -777,27 +840,31 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
-
+
API_COLLECTIONS
READ
@@ -806,27 +873,31 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
-
+
API_COLLECTIONS
READ
@@ -835,27 +906,31 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
-
+
API_COLLECTIONS
READ
@@ -864,27 +939,31 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -894,20 +973,24 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -917,20 +1000,24 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -940,20 +1027,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -963,20 +1053,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -986,20 +1079,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1009,24 +1105,25 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
+
+
+
+ 401
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1036,27 +1133,31 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -1066,26 +1167,31 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -1095,21 +1201,24 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1119,26 +1228,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ISSUES
@@ -1149,9 +1262,10 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
@@ -1159,8 +1273,8 @@
-
-
+
+
USER_ACTIONS
@@ -1171,21 +1285,23 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
-
+
response
@@ -1194,7 +1310,7 @@
-
+
SENSITIVE_DATA
@@ -1205,9 +1321,10 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
ret
@@ -1216,8 +1333,9 @@
-
-
+
+
SENSITIVE_DATA
@@ -1228,9 +1346,10 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
ret
@@ -1239,8 +1358,9 @@
-
-
+
+
SENSITIVE_DATA
@@ -1250,9 +1370,10 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
ret
@@ -1260,8 +1381,10 @@
-
-
+
+
USER_CONFIG
@@ -1271,18 +1394,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_CONFIG
@@ -1293,18 +1419,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_ROLES
@@ -1314,18 +1444,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_CONFIG
@@ -1336,18 +1469,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_CONFIG
@@ -1358,17 +1495,20 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_CONFIG
@@ -1379,18 +1519,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_CONFIG
@@ -1401,18 +1544,20 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
API_COLLECTIONS
@@ -1423,19 +1568,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1446,18 +1593,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ACTIVE_ENDPOINTS
@@ -1471,24 +1621,27 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1499,22 +1652,26 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -1524,27 +1681,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
ACTIVE_ENDPOINTS
-
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -1555,27 +1715,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
ACTIVE_ENDPOINTS
-
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1584,19 +1747,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1605,19 +1770,22 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
-
-
+
+
API_COLLECTIONS
@@ -1626,20 +1794,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
deactivatedHostnameCountMap
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
-
+
+
+
+
API_COLLECTIONS
@@ -1648,19 +1819,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1669,20 +1842,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
testedEndpointsMaps
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1691,20 +1867,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
severityInfo
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1713,20 +1892,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
lastTrafficSeenMap
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1735,19 +1917,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1756,20 +1940,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
timerInfo
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1778,20 +1965,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
apiCollections
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1801,19 +1991,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1823,19 +2015,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1845,19 +2039,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1867,19 +2063,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1888,20 +2086,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
hasUsageEndpoints
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
+
+
+
API_COLLECTIONS
@@ -1911,18 +2112,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -1932,20 +2136,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
API_COLLECTIONS
@@ -1955,28 +2160,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
ACTIVE_ENDPOINTS
-
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
READ_WRITE
@@ -1985,17 +2192,18 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
401
-
-
+
+
API_COLLECTIONS
@@ -2005,26 +2213,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
API_COLLECTIONS
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -2034,19 +2246,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -2056,19 +2270,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -2077,20 +2293,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -2099,36 +2318,40 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2138,17 +2361,18 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
401
-
-
+
+
INTEGRATIONS
@@ -2158,19 +2382,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2180,19 +2406,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2201,19 +2429,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2222,33 +2452,33 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
-
-
+
-
+
-
+
-
-
+
-
-
+
+
INTEGRATIONS
@@ -2257,19 +2487,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2279,27 +2511,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
ACTIVE_ENDPOINTS
-
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2309,27 +2544,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
AKTO_ALERTS
-
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2339,19 +2577,20 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
AKTO_EXTERNAL_API CI_CD_INTEGRATION
@@ -2364,22 +2603,24 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
401
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2389,19 +2630,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2410,19 +2653,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -2431,20 +2676,22 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TRAFFIC_FILTERS
@@ -2453,24 +2700,25 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
+
+
+
+ 401
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
+
+
+
SAMPLE_DATA
@@ -2479,26 +2727,27 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
+
+
+
+ 401
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
-
-
+
+
+
+
+
API_COLLECTIONS
READ_WRITE
User deleted an API collection
@@ -2506,21 +2755,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
-
-
-
-
+
+
+
+
API_COLLECTIONS
READ_WRITE
User deleted multiple API collections
@@ -2528,19 +2779,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
-
-
+
+
ADMIN_ACTIONS
@@ -2549,27 +2802,30 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
RBAC_FEATURE
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -2578,7 +2834,8 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
usersCollectionList
@@ -2586,33 +2843,37 @@
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
-
+
API_COLLECTIONS
READ
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_COLLECTIONS
@@ -2621,20 +2882,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
apiInfo
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
TRAFFIC_FILTERS
@@ -2643,19 +2906,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SAMPLE_DATA
@@ -2664,19 +2929,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SAMPLE_DATA
@@ -2685,24 +2952,25 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
+
+
+
+ 401
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -2711,18 +2979,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
SENSITIVE_DATA
@@ -2731,20 +2999,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TAGS
@@ -2753,18 +3024,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
API_COLLECTIONS
@@ -2773,18 +3044,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
API_COLLECTIONS
@@ -2793,20 +3064,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
response
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
SENSITIVE_DATA
@@ -2816,26 +3089,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
CUSTOM_DATA_TYPES
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -2845,18 +3122,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -2866,18 +3146,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -2887,18 +3170,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -2907,18 +3193,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -2928,39 +3217,46 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
READ_WRITE
- User updated the active status of a sensitive data type
+ User updated the active status of a sensitive data
+ type
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SENSITIVE_DATA
@@ -2969,18 +3265,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
AUTH_TYPE
@@ -2989,18 +3285,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AUTH_TYPE
@@ -3010,18 +3309,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AUTH_TYPE
@@ -3031,19 +3333,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AUTH_TYPE
@@ -3053,18 +3358,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AUTH_TYPE
@@ -3074,18 +3382,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
API_DATA_REDACTION
@@ -3099,23 +3410,24 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -3125,18 +3437,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
ADMIN_ACTIONS
@@ -3147,18 +3459,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
ADMIN_ACTIONS
@@ -3169,18 +3481,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
ADMIN_ACTIONS
@@ -3191,18 +3503,17 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
+
ADMIN_ACTIONS
@@ -3212,13 +3523,15 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
-
-
+
+
ADMIN_ACTIONS
@@ -3229,20 +3542,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
privateCidrList
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -3252,18 +3568,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -3274,20 +3593,23 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
partnerIpList
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TAGS
@@ -3298,18 +3620,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TAGS
@@ -3320,18 +3645,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TAGS
@@ -3342,18 +3670,20 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
-
+
ADMIN_ACTIONS
@@ -3364,17 +3694,19 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
401
-
-
+
+
TEST_RUNS
@@ -3388,23 +3720,27 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3414,18 +3750,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3435,7 +3774,8 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
allTestsCountMap
@@ -3443,12 +3783,14 @@
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3458,19 +3800,21 @@
403
false
- ^actionErrors.*
-
-
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3480,7 +3824,8 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
issuesSummaryInfoMap
@@ -3488,33 +3833,14 @@
422
false
- ^actionErrors.*
-
-
-
-
-
-
-
- TEST_RESULTS
- READ
-
-
-
- 403
- false
- ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3524,18 +3850,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3545,18 +3874,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
START_TEST_RUN
@@ -3567,18 +3899,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_CONFIG
@@ -3589,26 +3924,30 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
AUTOMATED_AUTH_TOKEN
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
- 403
+ 403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_CONFIG
@@ -3619,18 +3958,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*, ^responses.*
+ ^actionErrors.*, ^responses.*
-
-
+
+
USER_CONFIG
@@ -3640,18 +3982,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
USER_CONFIG
@@ -3661,29 +4006,33 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
true
@@ -3693,8 +4042,9 @@
-
-
+
+
true
@@ -3704,8 +4054,9 @@
-
-
+
+
true
@@ -3715,17 +4066,19 @@
-
-
+
+
-
+
401
-
-
+
+
SAMPLE_DATA
@@ -3735,45 +4088,25 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
+
+
+
+ 401
- 403
- false
- ^actionErrors.*
-
-
-
-
-
-
-
- TEST_RESULTS
- READ
-
-
-
403
- false
- ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
+ false
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3783,18 +4116,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3804,18 +4140,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -3825,40 +4165,47 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
READ_WRITE
- User updated the setup (Production/Staging/QA/Development) type
+ User updated the setup
+ (Production/Staging/QA/Development) type
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -3869,18 +4216,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -3891,18 +4241,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
DEFAULT_PAYLOADS
@@ -3913,7 +4266,8 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
allowRedundantEndpoints
@@ -3921,24 +4275,27 @@
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
+
+
+
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
LOGS
@@ -3948,19 +4305,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
LOGS
@@ -3970,85 +4330,21 @@
403
false
- ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
-
-
-
-
-
-
-
- ISSUES
- READ
-
-
-
- 403
- false
- ^actionErrors.*
-
-
-
- 422
- false
- ^actionErrors.*
-
-
-
-
-
-
-
- ISSUES
- READ
-
-
-
- 403
- false
- ^actionErrors.*
-
-
- generatedReportId
-
-
- 422
- false
- ^actionErrors.*
-
-
-
-
-
-
-
- ISSUES
- READ
-
-
-
- 403
- false
- ^actionErrors.*
-
-
- response
+ ^actionErrors.*
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ISSUES
@@ -4058,18 +4354,19 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
ISSUES
@@ -4079,18 +4376,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
ISSUES
@@ -4100,7 +4397,8 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
issues
@@ -4108,12 +4406,14 @@
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ISSUES
@@ -4123,18 +4423,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
ISSUES
@@ -4144,7 +4444,8 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
true
@@ -4152,12 +4453,14 @@
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_ROLES
@@ -4167,18 +4470,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_ROLES
@@ -4189,18 +4495,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_ROLES
@@ -4211,18 +4520,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_ROLES
@@ -4233,18 +4545,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_ROLES
@@ -4255,18 +4570,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_ROLES
@@ -4277,18 +4595,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_ROLES
@@ -4299,18 +4620,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
-
+
+
+
TEST_RESULTS
@@ -4320,18 +4644,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
TEST_RESULTS
@@ -4341,18 +4665,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
TEST_RESULTS
@@ -4362,18 +4686,18 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+ 401
-
-
+
+
ISSUES
@@ -4384,18 +4708,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ISSUES
@@ -4406,18 +4733,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
START_TEST_RUN
@@ -4428,19 +4758,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
START_TEST_RUN
@@ -4451,19 +4784,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -4474,18 +4810,19 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
- 422
- false
- ^actionErrors.*
+
+
+
+ 401
-
-
+
+
TEST_RESULTS
@@ -4496,19 +4833,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -4519,19 +4859,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -4541,19 +4884,22 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -4563,18 +4909,20 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
ADMIN_ACTIONS
@@ -4585,18 +4933,20 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
ADMIN_ACTIONS
@@ -4607,18 +4957,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
SAMPLE_DATA
@@ -4628,18 +4981,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -4649,18 +5005,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
ADMIN_ACTIONS
@@ -4670,18 +5029,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
INTEGRATIONS
@@ -4692,18 +5054,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AKTO_ALERTS
@@ -4717,23 +5082,27 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -4744,18 +5113,21 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
TEST_RESULTS
@@ -4765,17 +5137,20 @@
403
false
- ^actionErrors.*
+ ^actionErrors.*
-
+
422
false
- ^actionErrors.*
+ ^actionErrors.*
-
-
+
+
AKTO_ALERTS
@@ -4789,23 +5164,27 @@