Merge pull request #1285 from guardicore/ransomware_dir_hide_ui
Ransomware: hide directory fields if encryption is disabled
This commit is contained in:
commit
f023399a36
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
const manipulatorList = [ransomwareDirManipulator]
|
||||||
|
|
||||||
|
function applyUiSchemaManipulators(selectedSection,
|
||||||
|
formData,
|
||||||
|
uiSchema) {
|
||||||
|
for(let i = 0; i < manipulatorList.length; i++){
|
||||||
|
manipulatorList[i](selectedSection, formData, uiSchema);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ransomwareDirManipulator(selectedSection,
|
||||||
|
formData,
|
||||||
|
uiSchema) {
|
||||||
|
if (selectedSection === 'ransomware'){
|
||||||
|
uiSchema.encryption.directories =
|
||||||
|
{'ui:disabled': !formData['encryption']['enabled']};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default applyUiSchemaManipulators;
|
|
@ -71,6 +71,13 @@ export default function UiSchema(props) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
ransomware: {
|
||||||
|
encryption: {
|
||||||
|
directories: {
|
||||||
|
// Directory inputs are dynamically hidden
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
internal: {
|
internal: {
|
||||||
general: {
|
general: {
|
||||||
started_on_island: {'ui:widget': 'hidden'}
|
started_on_island: {'ui:widget': 'hidden'}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import UnsafeOptionsWarningModal from '../configuration-components/UnsafeOptions
|
||||||
import isUnsafeOptionSelected from '../utils/SafeOptionValidator.js';
|
import isUnsafeOptionSelected from '../utils/SafeOptionValidator.js';
|
||||||
import ConfigExportModal from '../configuration-components/ExportConfigModal';
|
import ConfigExportModal from '../configuration-components/ExportConfigModal';
|
||||||
import ConfigImportModal from '../configuration-components/ImportConfigModal';
|
import ConfigImportModal from '../configuration-components/ImportConfigModal';
|
||||||
|
import applyUiSchemaManipulators from '../configuration-components/UISchemaManipulators.tsx';
|
||||||
|
|
||||||
const ATTACK_URL = '/api/attack';
|
const ATTACK_URL = '/api/attack';
|
||||||
const CONFIG_URL = '/api/configuration/island';
|
const CONFIG_URL = '/api/configuration/island';
|
||||||
|
@ -27,7 +28,6 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.currentSection = 'attack';
|
this.currentSection = 'attack';
|
||||||
this.currentFormData = {};
|
|
||||||
this.initialConfig = {};
|
this.initialConfig = {};
|
||||||
this.initialAttackConfig = {};
|
this.initialAttackConfig = {};
|
||||||
this.sectionsOrder = ['attack', 'basic', 'basic_network', 'ransomware', 'monkey', 'internal'];
|
this.sectionsOrder = ['attack', 'basic', 'basic_network', 'ransomware', 'monkey', 'internal'];
|
||||||
|
@ -35,6 +35,7 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
this.state = {
|
this.state = {
|
||||||
attackConfig: {},
|
attackConfig: {},
|
||||||
configuration: {},
|
configuration: {},
|
||||||
|
currentFormData: {},
|
||||||
importCandidateConfig: null,
|
importCandidateConfig: null,
|
||||||
lastAction: 'none',
|
lastAction: 'none',
|
||||||
schema: {},
|
schema: {},
|
||||||
|
@ -213,14 +214,15 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
onChange = ({formData}) => {
|
onChange = ({formData}) => {
|
||||||
this.currentFormData = formData;
|
let configuration = this.state.configuration;
|
||||||
|
configuration[this.state.selectedSection] = formData;
|
||||||
|
this.setState({currentFormData: formData, configuration: configuration});
|
||||||
};
|
};
|
||||||
|
|
||||||
updateConfigSection = () => {
|
updateConfigSection = () => {
|
||||||
let newConfig = this.state.configuration;
|
let newConfig = this.state.configuration;
|
||||||
if (Object.keys(this.currentFormData).length > 0) {
|
if (Object.keys(this.state.currentFormData).length > 0) {
|
||||||
newConfig[this.currentSection] = this.currentFormData;
|
newConfig[this.currentSection] = this.state.currentFormData;
|
||||||
this.currentFormData = {};
|
|
||||||
}
|
}
|
||||||
this.setState({configuration: newConfig, lastAction: 'none'});
|
this.setState({configuration: newConfig, lastAction: 'none'});
|
||||||
};
|
};
|
||||||
|
@ -295,8 +297,8 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
|
|
||||||
userChangedConfig() {
|
userChangedConfig() {
|
||||||
if (JSON.stringify(this.state.configuration) === JSON.stringify(this.initialConfig)) {
|
if (JSON.stringify(this.state.configuration) === JSON.stringify(this.initialConfig)) {
|
||||||
if (Object.keys(this.currentFormData).length === 0 ||
|
if (Object.keys(this.state.currentFormData).length === 0 ||
|
||||||
JSON.stringify(this.initialConfig[this.currentSection]) === JSON.stringify(this.currentFormData)) {
|
JSON.stringify(this.initialConfig[this.currentSection]) === JSON.stringify(this.state.currentFormData)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,7 +318,8 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
this.updateConfigSection();
|
this.updateConfigSection();
|
||||||
this.currentSection = key;
|
this.currentSection = key;
|
||||||
this.setState({
|
this.setState({
|
||||||
selectedSection: key
|
selectedSection: key,
|
||||||
|
currentFormData: this.state.configuration[key]
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -332,7 +335,8 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
this.setState({
|
this.setState({
|
||||||
lastAction: 'reset',
|
lastAction: 'reset',
|
||||||
schema: res.schema,
|
schema: res.schema,
|
||||||
configuration: res.configuration
|
configuration: res.configuration,
|
||||||
|
currentFormData: res.configuration[this.state.selectedSection]
|
||||||
});
|
});
|
||||||
this.setInitialConfig(res.configuration);
|
this.setInitialConfig(res.configuration);
|
||||||
this.props.onStatusChange();
|
this.props.onStatusChange();
|
||||||
|
@ -407,13 +411,17 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
setPbaFilenameLinux: this.setPbaFilenameLinux,
|
setPbaFilenameLinux: this.setPbaFilenameLinux,
|
||||||
selectedSection: this.state.selectedSection
|
selectedSection: this.state.selectedSection
|
||||||
})
|
})
|
||||||
formProperties['formData'] = this.state.configuration[this.state.selectedSection];
|
formProperties['formData'] = this.state.currentFormData;
|
||||||
formProperties['onChange'] = this.onChange;
|
formProperties['onChange'] = this.onChange;
|
||||||
formProperties['customFormats'] = formValidationFormats;
|
formProperties['customFormats'] = formValidationFormats;
|
||||||
formProperties['transformErrors'] = transformErrors;
|
formProperties['transformErrors'] = transformErrors;
|
||||||
formProperties['className'] = 'config-form';
|
formProperties['className'] = 'config-form';
|
||||||
formProperties['liveValidate'] = true;
|
formProperties['liveValidate'] = true;
|
||||||
|
|
||||||
|
applyUiSchemaManipulators(this.state.selectedSection,
|
||||||
|
formProperties['formData'],
|
||||||
|
formProperties['uiSchema']);
|
||||||
|
|
||||||
if (this.state.selectedSection === 'internal') {
|
if (this.state.selectedSection === 'internal') {
|
||||||
return (<InternalConfig {...formProperties}/>)
|
return (<InternalConfig {...formProperties}/>)
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue