From e16c5421d0ea68a33f08df2ae53c293e11c95578 Mon Sep 17 00:00:00 2001 From: notshivansh Date: Tue, 31 Dec 2024 14:13:18 +0530 Subject: [PATCH] add inactive field to akto data types --- .../com/akto/action/CustomDataTypeAction.java | 5 +++-- .../pages/observe/data_types/DataTypes.jsx | 10 ++++------ .../pages/observe/data_types/transform.js | 2 +- .../java/com/akto/dao/SingleTypeInfoDao.java | 18 ++++++++++++++++- .../main/java/com/akto/dto/AktoDataType.java | 20 +++++++++++++++++++ 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/apps/dashboard/src/main/java/com/akto/action/CustomDataTypeAction.java b/apps/dashboard/src/main/java/com/akto/action/CustomDataTypeAction.java index 1e7f055036..a54ec464a8 100644 --- a/apps/dashboard/src/main/java/com/akto/action/CustomDataTypeAction.java +++ b/apps/dashboard/src/main/java/com/akto/action/CustomDataTypeAction.java @@ -248,7 +248,7 @@ public String execute() { private AktoDataType aktoDataType; - public String saveAktoDataType(){ + public String saveAktoDataType() { aktoDataType = AktoDataTypeDao.instance.findOne("name",name); if(aktoDataType==null){ @@ -305,7 +305,8 @@ public String saveAktoDataType(){ Updates.set(AktoDataType.KEY_CONDITIONS, keyConditions), Updates.set(AktoDataType.VALUE_CONDITIONS, valueConditions), Updates.set(AktoDataType.OPERATOR, mainOperator), - Updates.set(AktoDataType.DATA_TYPE_PRIORITY, dataTypePriority) + Updates.set(AktoDataType.DATA_TYPE_PRIORITY, dataTypePriority), + Updates.set(AktoDataType._INACTIVE, !active) ), options ); diff --git a/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/observe/data_types/DataTypes.jsx b/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/observe/data_types/DataTypes.jsx index 3fa380adc2..500234cafc 100644 --- a/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/observe/data_types/DataTypes.jsx +++ b/apps/dashboard/web/polaris_web/web/src/apps/dashboard/pages/observe/data_types/DataTypes.jsx @@ -175,7 +175,7 @@ function DataTypes() { valueOperator: currState.valueConditions.operator, dataTypePriority: currState?.priority ? currState.priority.toUpperCase() : "", ...transform.convertToSensitiveData(currState.sensitiveState), - + active: JSON.parse(currState.active) } api.saveAktoDataType(obj).then((response) => { func.setToast(true, false, "Data type updated successfully"); @@ -250,11 +250,9 @@ function DataTypes() { requiredIndicator={true} {...errorMessage.length > 0 ? {error: errorMessage} : {}} /> - {currState.dataType === 'Custom' ? - { handleChange({ active: val }) }} - initial={currState.active} label="Active" /> - : null} + { handleChange({ active: val }) }} + initial={currState.active} label="Active" /> sensitiveSubTypeNames() { // AKTO sensitive for (SingleTypeInfo.SubType subType: SingleTypeInfo.subTypeMap.values()) { if (subType.isSensitiveAlways()) { + AktoDataType dt = SingleTypeInfo.getAktoDataTypeMap(Context.accountId.get()).get(subType.getName()); + if (dt != null && !dt.getActive()) { + continue; + } sensitiveSubTypes.add(subType.getName()); } } // Custom data type sensitive for (CustomDataType customDataType: SingleTypeInfo.getCustomDataTypeMap(Context.accountId.get()).values()) { - if (customDataType.isSensitiveAlways()) { + if (customDataType.isSensitiveAlways() && customDataType.isActive()){ sensitiveSubTypes.add(customDataType.getName()); } } @@ -229,6 +234,11 @@ public List sensitiveSubTypeInRequestNames() { if (subType.isSensitiveAlways() || subType.getSensitivePosition().contains(SingleTypeInfo.Position.REQUEST_HEADER) || subType.getSensitivePosition().contains(SingleTypeInfo.Position.REQUEST_PAYLOAD)) { + + AktoDataType dt = SingleTypeInfo.getAktoDataTypeMap(Context.accountId.get()).get(subType.getName()); + if (dt != null && !dt.getActive()) { + continue; + } sensitiveInRequest.add(subType.getName()); } } @@ -252,6 +262,12 @@ public List sensitiveSubTypeInResponseNames() { if (subType.isSensitiveAlways() || subType.getSensitivePosition().contains(SingleTypeInfo.Position.RESPONSE_HEADER) || subType.getSensitivePosition().contains(SingleTypeInfo.Position.RESPONSE_PAYLOAD)) { + + AktoDataType dt = SingleTypeInfo.getAktoDataTypeMap(Context.accountId.get()).get(subType.getName()); + if (dt != null && !dt.getActive()) { + continue; + } + sensitiveInResponse.add(subType.getName()); } } diff --git a/libs/dao/src/main/java/com/akto/dto/AktoDataType.java b/libs/dao/src/main/java/com/akto/dto/AktoDataType.java index 5d3774487f..f5c4c7d2ce 100644 --- a/libs/dao/src/main/java/com/akto/dto/AktoDataType.java +++ b/libs/dao/src/main/java/com/akto/dto/AktoDataType.java @@ -32,6 +32,9 @@ public class AktoDataType { public static final String OPERATOR = "operator"; Conditions.Operator operator; + public static final String _INACTIVE = "inactive"; + private boolean inactive; + public AktoDataType() { } public AktoDataType(String name, boolean sensitiveAlways, List sensitivePosition,int timestamp, IgnoreData ignoreData, boolean redacted, boolean sampleDataFixed) { @@ -152,4 +155,21 @@ public boolean validate(Object value, Object key) { public boolean validateRaw(Object value, Object key) throws Exception { return CustomDataType.validateRawUtility(value, key, this.keyConditions, this.valueConditions, this.operator); } + + /* + * Default is inactive:false + */ + public boolean getInactive() { + return inactive; + } + + public void setInactive(boolean inactive) { + this.inactive = inactive; + } + + // To send a field in frontend. + public boolean getActive() { + return !inactive; + } + }