Merge pull request #1285 from guardicore/ransomware_dir_hide_ui

Ransomware: hide directory fields if encryption is disabled
This commit is contained in:
Mike Salvatore 2021-06-30 10:46:13 -04:00 committed by GitHub
commit f023399a36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 10 deletions

View File

@ -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;

View File

@ -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'}

View File

@ -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 {