From 6afc1e993f0faa24e563924ed79dc69c3759746e Mon Sep 17 00:00:00 2001 From: Andras Iklody Date: Fri, 25 Jan 2013 13:44:43 +0100 Subject: [PATCH] Attribute distributions Added feature to block distribution levels that would get overruled by the event distribution. The distribution of the event will be the currently selected distribution when creating an attribute. --- app/Controller/AttributesController.php | 53 ++++- app/View/Attributes/add.ctp | 246 ++++++++++---------- app/View/Attributes/add_attachment.ctp | 284 ++++++++++++------------ 3 files changed, 310 insertions(+), 273 deletions(-) diff --git a/app/Controller/AttributesController.php b/app/Controller/AttributesController.php index 4c3d5c47f..101d95b90 100755 --- a/app/Controller/AttributesController.php +++ b/app/Controller/AttributesController.php @@ -259,10 +259,6 @@ class AttributesController extends AppController { } else { // set the event_id in the form $this->request->data['Attribute']['event_id'] = $eventId; - // set distribution in the form - $this->loadModel('Event'); - $events = $this->Event->findById($eventId); - $this->request->data['Attribute']['distribution'] = $events['Event']['distribution']; } // combobox for types @@ -274,8 +270,22 @@ class AttributesController extends AppController { array_pop($categories); $categories = $this->_arrayToValuesIndexArray($categories); $this->set('categories', compact('categories')); + $this->loadModel('Event'); + $events = $this->Event->findById($eventId); + $maxDist = $events['Event']['distribution']; + $this->set('maxDist', $maxDist); // combobox for distribution - $distributions = array_keys($this->Attribute->distributionDescriptions); + $count = 0; + $distributionsBeforeCut = array_keys($this->Attribute->distributionDescriptions); + if(isset($maxDist)){ + foreach($distributionsBeforeCut as $current){ + $distributions[$count] = $current; + if($distributions[$count] == $maxDist)break; + $count++; + } + }else{ + $distributions = array_keys($this->Attribute->distributionDescriptions); + } $distributions = $this->_arrayToValuesIndexArray($distributions); $this->set('distributions', $distributions); // tooltip for distribution @@ -327,7 +337,6 @@ class AttributesController extends AppController { */ public function add_attachment($eventId = null) { if ($this->request->is('post')) { - $this->loadModel('Event'); // only own attributes verified by isAuthorized // Check if there were problems with the file upload @@ -423,6 +432,10 @@ class AttributesController extends AppController { } else { // set the event_id in the form $this->request->data['Attribute']['event_id'] = $eventId; + $this->loadModel('Event'); + $events = $this->Event->findById($eventId); + $maxDist = $events['Event']['distribution']; + $this->set('maxDist', $maxDist); } // combobos for categories @@ -454,7 +467,17 @@ class AttributesController extends AppController { $this->set('uploadDefinitions', $this->Attribute->uploadDefinitions); // combobox for distribution - $distributions = array_keys($this->Attribute->distributionDescriptions); + if(isset($maxDist)){ + $distributionsBeforeCut = array_keys($this->Attribute->distributionDescriptions); + $count = 0; + foreach($distributionsBeforeCut as $current){ + $distributions[$count] = $current; + if($distributions[$count] == $maxDist)break; + $count++; + } + }else{ + $distributions = array_keys($this->Attribute->distributionDescriptions); + } $distributions = $this->_arrayToValuesIndexArray($distributions); $this->set('distributions', $distributions); // tooltip for distribution @@ -554,8 +577,22 @@ class AttributesController extends AppController { array_pop($categories); // remove that last empty/space option $categories = $this->_arrayToValuesIndexArray($categories); $this->set('categories', $categories); + $this->loadModel('Event'); + $events = $this->Event->findById($eventId); + $maxDist = $events['Event']['distribution']; + $this->set('maxDist', $maxDist); // combobox for distribution - $distributions = array_keys($this->Attribute->distributionDescriptions); + if(isset($maxDist)){ + $distributionsBeforeCut = array_keys($this->Attribute->distributionDescriptions); + $count = 0; + foreach($distributionsBeforeCut as $current){ + $distributions[$count] = $current; + if($distributions[$count] == $maxDist)break; + $count++; + } + }else{ + $distributions = array_keys($this->Attribute->distributionDescriptions); + } $distributions = $this->_arrayToValuesIndexArray($distributions); $this->set('distributions', $distributions); // tooltip for distribution diff --git a/app/View/Attributes/add.ctp b/app/View/Attributes/add.ctp index 285aa6516..a7c28f5c3 100755 --- a/app/View/Attributes/add.ctp +++ b/app/View/Attributes/add.ctp @@ -1,124 +1,124 @@ - -
-Form->create('Attribute');?> -
- -Form->hidden('event_id'); -echo $this->Form->input('category', array( - 'between' => $this->Html->div('forminfo', '', array('id' => 'AttributeCategoryDiv')), - 'empty' => '(choose one)' - )); -echo $this->Form->input('type', array( - 'between' => $this->Html->div('forminfo', '', array('id' => 'AttributeTypeDiv')), - 'empty' => '(first choose category)' - )); -if ('true' == Configure::read('CyDefSIG.sync')) { - if ('true' == Configure::read('CyDefSIG.private')) { - echo $this->Form->input('distribution', array('label' => 'Distribution', 'selected' => 'All communities', - 'between' => $this->Html->div('forminfo', '', array('id' => 'AttributeDistributionDiv')) - )); - } else { - echo $this->Form->input('private', array( - 'before' => $this->Html->div('forminfo', isset($attrDescriptions['private']['formdesc']) ? $attrDescriptions['private']['formdesc'] : $attrDescriptions['private']['desc']), - )); - } -} -echo $this->Form->input('to_ids', array( - 'checked' => true, - 'before' => $this->Html->div('forminfo', isset($attrDescriptions['signature']['formdesc']) ? $attrDescriptions['signature']['formdesc'] : $attrDescriptions['signature']['desc']), - 'label' => 'IDS Signature?' -)); -echo $this->Form->input('value', array( - 'type' => 'textarea', - 'error' => array('escape' => false), -)); -echo $this->Form->input('batch_import', array( - 'type' => 'checkbox', - 'after' => $this->Html->div('forminfo', 'Create multiple attributes one per line'), -)); - -// link an onchange event to the form elements -$this->Js->get('#AttributeCategory')->event('change', 'formCategoryChanged("#AttributeCategory")'); -$this->Js->get('#AttributeType')->event('change', 'showFormInfo("#AttributeType")'); -$this->Js->get('#AttributeDistribution')->event('change', 'showFormInfo("#AttributeDistribution")'); -?> -
-Form->end(__('Submit'));?> -
-
- -
- + +
+Form->create('Attribute');?> +
+ +Form->hidden('event_id'); +echo $this->Form->input('category', array( + 'between' => $this->Html->div('forminfo', '', array('id' => 'AttributeCategoryDiv')), + 'empty' => '(choose one)' + )); +echo $this->Form->input('type', array( + 'between' => $this->Html->div('forminfo', '', array('id' => 'AttributeTypeDiv')), + 'empty' => '(first choose category)' + )); +if ('true' == Configure::read('CyDefSIG.sync')) { + if ('true' == Configure::read('CyDefSIG.private')) { + echo $this->Form->input('distribution', array('label' => 'Distribution', 'selected' => $maxDist, + 'between' => $this->Html->div('forminfo', '', array('id' => 'AttributeDistributionDiv')) + )); + } else { + echo $this->Form->input('private', array( + 'before' => $this->Html->div('forminfo', isset($attrDescriptions['private']['formdesc']) ? $attrDescriptions['private']['formdesc'] : $attrDescriptions['private']['desc']), + )); + } +} +echo $this->Form->input('to_ids', array( + 'checked' => true, + 'before' => $this->Html->div('forminfo', isset($attrDescriptions['signature']['formdesc']) ? $attrDescriptions['signature']['formdesc'] : $attrDescriptions['signature']['desc']), + 'label' => 'IDS Signature?' +)); +echo $this->Form->input('value', array( + 'type' => 'textarea', + 'error' => array('escape' => false), +)); +echo $this->Form->input('batch_import', array( + 'type' => 'checkbox', + 'after' => $this->Html->div('forminfo', 'Create multiple attributes one per line'), +)); + +// link an onchange event to the form elements +$this->Js->get('#AttributeCategory')->event('change', 'formCategoryChanged("#AttributeCategory")'); +$this->Js->get('#AttributeType')->event('change', 'showFormInfo("#AttributeType")'); +$this->Js->get('#AttributeDistribution')->event('change', 'showFormInfo("#AttributeDistribution")'); +?> +
+Form->end(__('Submit'));?> +
+
+ +
+ Js->writeBuffer(); // Write cached scripts \ No newline at end of file diff --git a/app/View/Attributes/add_attachment.ctp b/app/View/Attributes/add_attachment.ctp index 702d1634d..35f918132 100755 --- a/app/View/Attributes/add_attachment.ctp +++ b/app/View/Attributes/add_attachment.ctp @@ -1,143 +1,143 @@ -
-Form->create('Attribute', array('enctype' => 'multipart/form-data','onSubmit' => 'document.getElementById("AttributeMalware").removeAttribute("disabled");'));?> -
- -Form->hidden('event_id'); -echo $this->Form->input('category', array('between' => $this->Html->div('forminfo', '', array('id' => 'AttributeCategoryDiv')))); -echo $this->Form->file('value', array( - 'error' => array('escape' => false), -)); -echo $this->Form->input('malware', array( - 'type' => 'checkbox', - 'checked' => false, - 'after' => '
Tick this box to neutralize the sample. Every malware sample will be zipped with the password "infected"', -)); -if ('true' == Configure::read('CyDefSIG.sync')) { - if ('true' == Configure::read('CyDefSIG.private')) { - echo $this->Form->input('distribution', array('label' => 'Distribution', 'selected' => 'All communities', - 'between' => $this->Html->div('forminfo', '', array('id' => 'AttributeDistributionDiv')) - )); - //'before' => $this->Html->div('forminfo', isset($attrDescriptions['distribution']['formdesc']) ? $attrDescriptions['distribution']['formdesc'] : $attrDescriptions['distribution']['desc']),)); - } else { - echo $this->Form->input('private', array( - 'before' => $this->Html->div('forminfo', isset($attrDescriptions['private']['formdesc']) ? $attrDescriptions['private']['formdesc'] : $attrDescriptions['private']['desc']),)); - } -} -// link an onchange event to the form elements -$this->Js->get('#AttributeType')->event('change', 'showFormInfo("#AttributeType")'); -$this->Js->get('#AttributeCategory')->event('change', 'showFormInfo("#AttributeCategory")'); -$this->Js->get('#AttributeDistribution')->event('change', 'showFormInfo("#AttributeDistribution")'); -?> -
-Form->end(__('Upload'));?> -
-
- -
- - +
+Form->create('Attribute', array('enctype' => 'multipart/form-data','onSubmit' => 'document.getElementById("AttributeMalware").removeAttribute("disabled");'));?> +
+ +Form->hidden('event_id'); +echo $this->Form->input('category', array('between' => $this->Html->div('forminfo', '', array('id' => 'AttributeCategoryDiv')))); +echo $this->Form->file('value', array( + 'error' => array('escape' => false), +)); +echo $this->Form->input('malware', array( + 'type' => 'checkbox', + 'checked' => false, + 'after' => '
Tick this box to neutralize the sample. Every malware sample will be zipped with the password "infected"', +)); +if ('true' == Configure::read('CyDefSIG.sync')) { + if ('true' == Configure::read('CyDefSIG.private')) { + echo $this->Form->input('distribution', array('label' => 'Distribution', 'selected' => $maxDist, + 'between' => $this->Html->div('forminfo', '', array('id' => 'AttributeDistributionDiv')) + )); + //'before' => $this->Html->div('forminfo', isset($attrDescriptions['distribution']['formdesc']) ? $attrDescriptions['distribution']['formdesc'] : $attrDescriptions['distribution']['desc']),)); + } else { + echo $this->Form->input('private', array( + 'before' => $this->Html->div('forminfo', isset($attrDescriptions['private']['formdesc']) ? $attrDescriptions['private']['formdesc'] : $attrDescriptions['private']['desc']),)); + } +} +// link an onchange event to the form elements +$this->Js->get('#AttributeType')->event('change', 'showFormInfo("#AttributeType")'); +$this->Js->get('#AttributeCategory')->event('change', 'showFormInfo("#AttributeCategory")'); +$this->Js->get('#AttributeDistribution')->event('change', 'showFormInfo("#AttributeDistribution")'); +?> +
+Form->end(__('Upload'));?> +
+
+ +
+ + Js->writeBuffer(); // Write cached scripts \ No newline at end of file