2016-05-10 10:31:56 +02:00
|
|
|
<?php
|
|
|
|
App::uses('AppModel', 'Model');
|
|
|
|
|
|
|
|
class Module extends AppModel {
|
2016-08-25 11:38:37 +02:00
|
|
|
|
2016-05-10 10:31:56 +02:00
|
|
|
public $useTable = false;
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-01 16:15:24 +02:00
|
|
|
private $__validTypes = array(
|
|
|
|
'Enrichment' => array('hover', 'expansion'),
|
2016-08-06 09:55:11 +02:00
|
|
|
'Import' => array('import'),
|
2017-05-03 13:13:36 +02:00
|
|
|
'Export' => array('export'),
|
|
|
|
'Cortex' => array('cortex')
|
2016-08-01 16:15:24 +02:00
|
|
|
);
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-01 16:15:24 +02:00
|
|
|
private $__typeToFamily = array(
|
2016-08-04 16:30:36 +02:00
|
|
|
'Import' => 'Import',
|
|
|
|
'Export' => 'Export',
|
2016-08-01 16:15:24 +02:00
|
|
|
'hover' => 'Enrichment',
|
2017-05-03 13:13:36 +02:00
|
|
|
'expansion' => 'Enrichment',
|
|
|
|
'Cortex' => 'Cortex'
|
2016-08-01 16:15:24 +02:00
|
|
|
);
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-01 16:15:24 +02:00
|
|
|
public $configTypes = array(
|
|
|
|
'IP' => array(
|
|
|
|
'validation' => 'validateIPField',
|
|
|
|
'field' => 'text',
|
|
|
|
'class' => 'input-xxlarge'
|
|
|
|
),
|
|
|
|
'String' => array(
|
|
|
|
'validation' => 'validateStringField',
|
|
|
|
'field' => 'text',
|
|
|
|
'class' => 'input-xxlarge'
|
|
|
|
),
|
|
|
|
'Integer' => array(
|
2016-08-04 07:55:58 +02:00
|
|
|
'validation' => 'validateIntegerField',
|
2016-08-01 16:15:24 +02:00
|
|
|
'field' => 'number',
|
|
|
|
),
|
|
|
|
'Boolean' => array(
|
2016-08-04 07:55:58 +02:00
|
|
|
'validation' => 'validateBooleanField',
|
2016-08-01 16:15:24 +02:00
|
|
|
'field' => 'checkbox'
|
|
|
|
),
|
|
|
|
'Select' => array(
|
2016-08-04 07:55:58 +02:00
|
|
|
'validation' => 'validateSelectField',
|
2016-08-01 16:15:24 +02:00
|
|
|
'field' => 'select'
|
|
|
|
)
|
|
|
|
);
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-04 07:55:58 +02:00
|
|
|
public function validateIPField($value) {
|
|
|
|
if (!filter_var($value, FILTER_VALIDATE_IP) === false) {
|
|
|
|
return 'Value is not a valid IP.';
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
2016-06-04 01:08:16 +02:00
|
|
|
|
2016-08-04 07:55:58 +02:00
|
|
|
public function validateStringField($value) {
|
|
|
|
if (!empty($value)) return true;
|
|
|
|
return 'Field cannot be empty.';
|
|
|
|
}
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-04 07:55:58 +02:00
|
|
|
public function validateIntegerField($value) {
|
|
|
|
if (is_numeric($value) && is_int(intval($value))) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return 'Value is not an integer.';
|
|
|
|
}
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-04 07:55:58 +02:00
|
|
|
public function validateBooleanField($value) {
|
2016-08-04 15:10:47 +02:00
|
|
|
if ($value == true || $value == false) {
|
2016-08-04 07:55:58 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return 'Value has to be a boolean.';
|
|
|
|
}
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2018-03-12 09:38:23 +01:00
|
|
|
public function validateSelectField($value) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-05-10 10:31:56 +02:00
|
|
|
|
2016-08-25 17:42:46 +02:00
|
|
|
public function getModules($type = false, $moduleFamily = 'Enrichment', &$exception = false) {
|
|
|
|
$modules = $this->queryModuleServer('/modules', false, false, $moduleFamily, $exception);
|
2016-05-17 23:37:59 +02:00
|
|
|
if (!$modules) return 'Module service not reachable.';
|
2016-05-10 10:31:56 +02:00
|
|
|
if (!empty($modules)) {
|
|
|
|
$result = array('modules' => $modules);
|
|
|
|
return $result;
|
2016-05-17 23:37:59 +02:00
|
|
|
} else return 'The module service reports that it found no modules.';
|
2016-05-10 10:31:56 +02:00
|
|
|
}
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2018-01-13 12:22:14 +01:00
|
|
|
public function getEnabledModules($user, $type = false, $moduleFamily = 'Enrichment') {
|
2016-08-01 16:15:24 +02:00
|
|
|
$modules = $this->getModules($type, $moduleFamily);
|
2016-05-10 10:31:56 +02:00
|
|
|
if (is_array($modules)) {
|
2016-09-04 23:31:24 +02:00
|
|
|
foreach ($modules['modules'] as $k => $module) {
|
2016-08-04 16:30:36 +02:00
|
|
|
if (!Configure::read('Plugin.' . $moduleFamily . '_' . $module['name'] . '_enabled') || ($type && in_array(strtolower($type), $module['meta']['module-type']))) {
|
2016-05-10 10:31:56 +02:00
|
|
|
unset($modules['modules'][$k]);
|
2018-01-13 12:22:14 +01:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (
|
|
|
|
!$user['Role']['perm_site_admin'] &&
|
|
|
|
Configure::read('Plugin.' . $moduleFamily . '_' . $module['name'] . '_restrict') &&
|
|
|
|
Configure::read('Plugin.' . $moduleFamily . '_' . $module['name'] . '_restrict') != $user['org_id']
|
|
|
|
) {
|
|
|
|
unset($modules['modules'][$k]);
|
2016-05-10 10:31:56 +02:00
|
|
|
}
|
|
|
|
}
|
2016-05-17 23:37:59 +02:00
|
|
|
} else return 'The modules system reports that it found no suitable modules.';
|
2016-05-10 10:31:56 +02:00
|
|
|
if (!isset($modules) || empty($modules)) $modules = array();
|
|
|
|
if (isset($modules['modules']) && !empty($modules['modules'])) $modules['modules'] = array_values($modules['modules']);
|
|
|
|
if (!is_array($modules)) return array();
|
|
|
|
foreach ($modules['modules'] as $temp) {
|
2016-08-04 16:33:05 +02:00
|
|
|
if (isset($temp['meta']['module-type']) && in_array('import', $temp['meta']['module-type'])) $modules['Import'] = $temp['name'];
|
|
|
|
else if (isset($temp['meta']['module-type']) && in_array('export', $temp['meta']['module-type'])) $modules['Export'] = $temp['name'];
|
2016-05-17 23:37:59 +02:00
|
|
|
else {
|
|
|
|
foreach ($temp['mispattributes']['input'] as $input) {
|
2017-05-03 13:13:36 +02:00
|
|
|
if (!isset($temp['meta']['module-type']) || (in_array('expansion', $temp['meta']['module-type']) || in_array('cortex', $temp['meta']['module-type']))) $modules['types'][$input][] = $temp['name'];
|
2016-05-17 23:37:59 +02:00
|
|
|
if (isset($temp['meta']['module-type']) && in_array('hover', $temp['meta']['module-type'])) $modules['hover_type'][$input][] = $temp['name'];
|
|
|
|
}
|
2016-05-10 10:31:56 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return $modules;
|
|
|
|
}
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-01 16:15:24 +02:00
|
|
|
public function getEnabledModule($name, $type) {
|
2016-08-04 16:30:36 +02:00
|
|
|
$moduleFamily = $this->__typeToFamily[$type];
|
2016-08-01 16:15:24 +02:00
|
|
|
$url = $this->__getModuleServer($moduleFamily);
|
2016-08-04 16:30:36 +02:00
|
|
|
$modules = $this->getModules($type, $moduleFamily);
|
2016-08-01 16:15:24 +02:00
|
|
|
$module = false;
|
|
|
|
if (!Configure::read('Plugin.' . $moduleFamily . '_' . $name . '_enabled')) return 'The requested module is not enabled.';
|
|
|
|
if (is_array($modules)) {
|
2016-09-04 23:31:24 +02:00
|
|
|
foreach ($modules['modules'] as $module) {
|
2016-08-01 16:15:24 +02:00
|
|
|
if ($module['name'] == $name) {
|
2016-08-04 16:30:36 +02:00
|
|
|
if ($type && in_array(strtolower($type), $module['meta']['module-type'])) {
|
2016-08-01 16:15:24 +02:00
|
|
|
return $module;
|
|
|
|
} else {
|
|
|
|
return 'The requested module is not available for the requested action.';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else return $modules;
|
|
|
|
return 'The modules system reports that it found no suitable modules.';
|
|
|
|
}
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-01 16:15:24 +02:00
|
|
|
private function __getModuleServer($moduleFamily = 'Enrichment') {
|
|
|
|
if (!Configure::read('Plugin.' . $moduleFamily . '_services_enable')) return false;
|
2016-08-04 16:30:36 +02:00
|
|
|
$this->Server = ClassRegistry::init('Server');
|
2016-08-04 15:10:47 +02:00
|
|
|
$url = Configure::read('Plugin.' . $moduleFamily . '_services_url') ? Configure::read('Plugin.' . $moduleFamily . '_services_url') : $this->Server->serverSettings['Plugin'][$moduleFamily . '_services_url']['value'];
|
|
|
|
$port = Configure::read('Plugin.' . $moduleFamily . '_services_port') ? Configure::read('Plugin.' . $moduleFamily . '_services_port') : $this->Server->serverSettings['Plugin'][$moduleFamily . '_services_port']['value'];
|
2016-05-17 23:37:59 +02:00
|
|
|
return $url . ':' . $port;
|
2016-05-10 10:31:56 +02:00
|
|
|
}
|
2016-08-16 11:42:43 +02:00
|
|
|
|
2016-08-25 17:42:46 +02:00
|
|
|
public function queryModuleServer($uri, $post = false, $hover = false, $moduleFamily = 'Enrichment', &$exception = false) {
|
2016-08-01 16:15:24 +02:00
|
|
|
$url = $this->__getModuleServer($moduleFamily);
|
2016-05-17 23:37:59 +02:00
|
|
|
if (!$url) return false;
|
|
|
|
App::uses('HttpSocket', 'Network/Http');
|
2016-07-21 11:35:29 +02:00
|
|
|
if ($hover) {
|
2018-04-13 14:22:08 +02:00
|
|
|
$settings = array(
|
|
|
|
'timeout' => Configure::read('Plugin.' . $moduleFamily . '_hover_timeout') ? Configure::read('Plugin.' . $moduleFamily . '_hover_timeout') : 5
|
|
|
|
);
|
2016-07-21 11:35:29 +02:00
|
|
|
} else {
|
2018-04-13 14:22:08 +02:00
|
|
|
$settings = array(
|
|
|
|
'timeout' => Configure::read('Plugin.' . $moduleFamily . '_timeout') ? Configure::read('Plugin.' . $moduleFamily . '_timeout') : 10
|
|
|
|
);
|
2016-07-21 11:35:29 +02:00
|
|
|
}
|
2018-04-13 14:22:08 +02:00
|
|
|
$sslSettings = array('ssl_verify_peer', 'ssl_verify_host', 'ssl_allow_self_signed', 'ssl_verify_peer', 'ssl_cafile');
|
|
|
|
foreach ($sslSettings as $sslSetting) {
|
2018-04-13 15:28:07 +02:00
|
|
|
if (Configure::check('Plugin.' . $moduleFamily . '_' . $sslSetting) && Configure::read('Plugin.' . $moduleFamily . '_' . $sslSetting) !== '') {
|
2018-04-13 14:22:08 +02:00
|
|
|
$settings[$sslSetting] = Configure::read('Plugin.' . $moduleFamily . '_' . $sslSetting);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$httpSocket = new HttpSocket($settings);
|
2017-05-02 16:42:45 +02:00
|
|
|
$request = array(
|
|
|
|
'header' => array(
|
|
|
|
'Content-Type' => 'application/json',
|
|
|
|
)
|
|
|
|
);
|
2018-03-26 17:36:58 +02:00
|
|
|
if ($moduleFamily == 'Cortex') {
|
|
|
|
if (!empty(Configure::read('Plugin.' . $moduleFamily . '_authkey'))) {
|
2018-03-26 17:38:23 +02:00
|
|
|
$request['header']['Authorization'] = 'bearer ' . Configure::read('Plugin.' . $moduleFamily . '_authkey');
|
2018-03-26 17:36:58 +02:00
|
|
|
}
|
|
|
|
}
|
2016-05-17 23:37:59 +02:00
|
|
|
try {
|
2017-05-02 16:42:45 +02:00
|
|
|
if ($post) $response = $httpSocket->post($url . $uri, $post, $request);
|
2018-04-13 14:22:08 +02:00
|
|
|
else $response = $httpSocket->get($url . $uri, false, $request);
|
2016-05-17 23:37:59 +02:00
|
|
|
return json_decode($response->body, true);
|
|
|
|
} catch (Exception $e) {
|
2016-08-25 17:42:46 +02:00
|
|
|
$exception = $e->getMessage();
|
2016-05-17 23:37:59 +02:00
|
|
|
return false;
|
|
|
|
}
|
2016-05-10 10:31:56 +02:00
|
|
|
}
|
2016-06-04 01:08:16 +02:00
|
|
|
|
2016-08-01 16:15:24 +02:00
|
|
|
public function getModuleSettings($moduleFamily = 'Enrichment') {
|
|
|
|
$modules = $this->getModules(false, $moduleFamily);
|
2016-05-17 23:37:59 +02:00
|
|
|
$result = array();
|
|
|
|
if (!empty($modules['modules'])) {
|
|
|
|
foreach ($modules['modules'] as $module) {
|
2016-08-01 16:15:24 +02:00
|
|
|
if (array_intersect($this->__validTypes[$moduleFamily], $module['meta']['module-type'])) {
|
|
|
|
$result[$module['name']][0] = array('name' => 'enabled', 'type' => 'boolean');
|
2018-01-13 12:22:14 +01:00
|
|
|
$result[$module['name']][1] = array('name' => 'restrict', 'type' => 'orgs');
|
2016-08-01 16:15:24 +02:00
|
|
|
if (isset($module['meta']['config'])) foreach ($module['meta']['config'] as $conf) $result[$module['name']][] = array('name' => $conf, 'type' => 'string');
|
|
|
|
}
|
2016-05-17 23:37:59 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return $result;
|
2016-05-10 10:31:56 +02:00
|
|
|
}
|
2016-06-06 10:09:55 +02:00
|
|
|
}
|