fix: [sync] Adding a new server caused the pull/push rules to be incorrectly set to an empty string over '[]' causing sync issues, fixes #4369

- this fix resolves the issue - new servers added should be fine
- it also retroactively fixes broken server connections
pull/4370/head
iglocska 2019-03-25 17:35:02 +01:00
parent 3969389c60
commit 96951afc47
2 changed files with 31 additions and 2 deletions

View File

@ -313,6 +313,12 @@ class ServersController extends AppController
$this->request->data['Server']['internal'] = 0;
}
$this->request->data['Server']['org_id'] = $this->Auth->user('org_id');
if (empty($this->request->data['Server']['push_rules'])) {
$this->request->data['Server']['push_rules'] = '[]';
}
if (empty($this->request->data['Server']['pull_rules'])) {
$this->request->data['Server']['pull_rules'] = '[]';
}
if ($this->Server->save($this->request->data)) {
if (isset($this->request->data['Server']['submitted_cert'])) {
$this->__saveCert($this->request->data, $this->Server->id, false);
@ -382,7 +388,7 @@ class ServersController extends AppController
$this->set('host_org_id', Configure::read('MISP.host_org_id'));
}
}
public function edit($id = null)
{
$this->Server->id = $id;

View File

@ -75,7 +75,7 @@ class AppModel extends Model
13 => false, 14 => false, 15 => false, 18 => false, 19 => false, 20 => false,
21 => false, 22 => false, 23 => false, 24 => false, 25 => false, 26 => false,
27 => false, 28 => false, 29 => false, 30 => false, 31 => false, 32 => false,
33 => false
33 => false, 34 => false
);
public function afterSave($created, $options = array())
@ -171,6 +171,9 @@ class AppModel extends Model
case 23:
$this->__bumpReferences();
break;
case 34:
$this->__fixServerPullPushRules();
break;
default:
$this->updateDatabase($command);
break;
@ -2029,4 +2032,24 @@ class AppModel extends Model
}
return time() - ($delta * $multiplier);
}
private function __fixServerPullPushRules()
{
$this->Server = ClassRegistry::init('Server');
$servers = $this->Server->find('all', array('recursive' => -1));
foreach ($servers as $server) {
$changed = false;
if (empty($server['Server']['pull_rules'])) {
$server['Server']['pull_rules'] = '[]';
$changed = true;
}
if (empty($server['Server']['push_rules'])) {
$server['Server']['push_rules'] = '[]';
$changed = true;
}
if ($changed) {
$this->Server->save($server);
}
}
}
}