mirror of https://github.com/MISP/MISP
82 lines
2.9 KiB
PHP
Executable File
82 lines
2.9 KiB
PHP
Executable File
<?php
|
|
|
|
App::uses('AppModel', 'Model');
|
|
|
|
/**
|
|
* Regexp Model
|
|
*
|
|
*/
|
|
class Regexp extends AppModel {
|
|
|
|
public $actsAs = array(
|
|
'SysLogLogable.SysLogLogable' => array( // TODO Audit, logable
|
|
'roleModel' => 'Role',
|
|
'roleKey' => 'role_id',
|
|
'change' => 'full'
|
|
),
|
|
);
|
|
|
|
public $validate = array(
|
|
'regexp' => array(
|
|
'rule' => 'checkRegexp',
|
|
'message' => 'This is not a valid regular expression. Don\'t forget the delimiters!'
|
|
)
|
|
);
|
|
|
|
/**
|
|
* Use table
|
|
*
|
|
* @var mixed False or table name
|
|
*/
|
|
public $useTable = 'regexp';
|
|
|
|
public function checkRegexp() {
|
|
if (@preg_replace($this->data['Regexp']['regexp'], 'success', $this->data['Regexp']['regexp']) != null) return true;
|
|
return false;
|
|
}
|
|
|
|
// find all the similar Regular expressions and return them. If $delete is true, delete them instead of returning them.
|
|
public function find_similar ($id, $delete = false) {
|
|
$allRegexp = $this->find('all');
|
|
$original = null;
|
|
$finalArray = array();
|
|
// Let's find and read the original so we know what to look for:
|
|
foreach ($allRegexp as $k => $v) {
|
|
if ($v['Regexp']['id'] == $id) {
|
|
$original = $v;
|
|
}
|
|
}
|
|
// if we found the original, let's try to find all of the regexp values that match the original in the regexp and replacement fields.
|
|
// We should get a list of all the IDs (and their respective types) of regular expression entries that are duplicates created for various types.
|
|
// ip-src /127.0.0.1/ -> '' and ip-dst /127.0.0.1/ -> '' (entries that blacklists the ip-source and ip-destination addresses 127.0.0.1) will be returned when editing
|
|
// ip-src /127.0.0.1/ -> '', but other /127.0.0.1/ -> 'localhost' will not
|
|
if ($original != null) {
|
|
foreach ($allRegexp as $k => $v) {
|
|
if ($original['Regexp']['regexp'] === $v['Regexp']['regexp'] && $original['Regexp']['replacement'] === $v['Regexp']['replacement']) {
|
|
if ($delete) {
|
|
// if the delete parameter is set to true, delete the regular expression. This is used for edits
|
|
$this->delete($v['Regexp']['id']);
|
|
} else {
|
|
$finalArray[] = array($v['Regexp']['id'], $v['Regexp']['type']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $finalArray;
|
|
}
|
|
|
|
public function replaceSpecific($string, $allRegexp = null, $type) {
|
|
if($this->Auth->User('org') != 'ADMIN') $this->redirect(array('controller' => 'regexp', 'action' => 'index', 'admin' => false));
|
|
$orig = $string;
|
|
foreach ($allRegexp as $regexp) {
|
|
if (strlen($regexp['Regexp']['replacement']) && strlen($regexp['Regexp']['regexp']) && ($regexp['Regexp']['type'] === 'ALL' || $regexp['Regexp']['type'] === $type)) {
|
|
$string = preg_replace($regexp['Regexp']['regexp'], $regexp['Regexp']['replacement'], $string);
|
|
}
|
|
if (!strlen($regexp['Regexp']['replacement']) && preg_match($regexp['Regexp']['regexp'], $string) && ($regexp['Regexp']['type'] === 'ALL' || $regexp['Regexp']['type'] === $type)) {
|
|
return 0;
|
|
}
|
|
}
|
|
if ($orig === $string) return 2;
|
|
return 1;
|
|
}
|
|
} |