implementing webhook2api, amendment for json array parameter parsing. WiP - debuggin output for error_log
This commit is contained in:
parent
f044515feb
commit
1ffa67865d
|
|
@ -32,6 +32,7 @@ if (!empty($_REQUEST['id']) && isset($webhook2api['configurations'][$_REQUEST['i
|
||||||
|
|
||||||
// read some input
|
// read some input
|
||||||
$post_input = @file_get_contents('php://input');
|
$post_input = @file_get_contents('php://input');
|
||||||
|
error_log("DEBUG: " . json_encode($post_input));
|
||||||
|
|
||||||
// MAIN: iterate through all (eligible) configurations
|
// MAIN: iterate through all (eligible) configurations
|
||||||
$last_error = ["No handler found", 501];
|
$last_error = ["No handler found", 501];
|
||||||
|
|
@ -84,10 +85,12 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
||||||
// gather source data
|
// gather source data
|
||||||
$data = [];
|
$data = [];
|
||||||
if (!empty($configuration['data_sources']) && is_array($configuration['data_sources'])) {
|
if (!empty($configuration['data_sources']) && is_array($configuration['data_sources'])) {
|
||||||
|
error_log(json_encode($configuration));
|
||||||
foreach ($configuration['data_sources'] as $data_source) {
|
foreach ($configuration['data_sources'] as $data_source) {
|
||||||
switch ($data_source) {
|
switch ($data_source) {
|
||||||
case 'POST/json': # JSON data in POST field
|
case 'POST/json': # JSON data in POST field
|
||||||
$more_data = json_decode($post_input, TRUE);
|
$more_data = json_decode($post_input, TRUE);
|
||||||
|
error_log(json_encode($more_data));
|
||||||
$data = array_merge_recursive($data, $more_data);
|
$data = array_merge_recursive($data, $more_data);
|
||||||
break;
|
break;
|
||||||
case 'REQUEST': # simple request parameters
|
case 'REQUEST': # simple request parameters
|
||||||
|
|
@ -99,6 +102,61 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// default return code if everything goes according to plan
|
||||||
|
$http_code = 200;
|
||||||
|
// check if we have a json_array and react accordingly
|
||||||
|
if (isset($data[0]) && is_array($data[0])) {
|
||||||
|
foreach ($data as $d) {
|
||||||
|
$result = webhook2api_callCiviApi($configuration, $d);
|
||||||
|
if(isset($result['internal_error'])) {
|
||||||
|
// internal communication Error occured. Aborting process
|
||||||
|
return $result['internal_error'];
|
||||||
|
}
|
||||||
|
if (!empty($result['http_code'])) {
|
||||||
|
$http_code = $result['http_code'];
|
||||||
|
} else {
|
||||||
|
$http_code = 403;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$result = webhook2api_callCiviApi($configuration, $data);
|
||||||
|
if(isset($result['internal_error'])) {
|
||||||
|
// internal communication Error occured. Aborting process
|
||||||
|
return $result['internal_error'];
|
||||||
|
}
|
||||||
|
if (!empty($result['http_code'])) {
|
||||||
|
$http_code = $result['http_code'];
|
||||||
|
} else {
|
||||||
|
$http_code = 403;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// process result
|
||||||
|
if (!empty($configuration['response_mapping']) && is_array($configuration['response_mapping'])) {
|
||||||
|
// TODO: implement
|
||||||
|
//error_log("Webhook2API.response_mapping: not implemented!");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// default behaviour:
|
||||||
|
http_response_code($http_code);
|
||||||
|
}
|
||||||
|
// all done
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse Configuration and given data set, apply it and send it to civicrm.
|
||||||
|
* Returns an internal error if communication to civicrm isn't successful
|
||||||
|
*
|
||||||
|
* @param $configuration
|
||||||
|
* @param $data
|
||||||
|
*
|
||||||
|
* @return array|mixed|void
|
||||||
|
* @throws \CiviCRM_API3_Exception
|
||||||
|
*/
|
||||||
|
function webhook2api_callCiviApi($configuration, $data) {
|
||||||
// evaluate sentinels
|
// evaluate sentinels
|
||||||
if (!empty($configuration['sentinel']) && is_array($configuration['sentinel'])) {
|
if (!empty($configuration['sentinel']) && is_array($configuration['sentinel'])) {
|
||||||
foreach ($configuration['sentinel'] as $sentinel) {
|
foreach ($configuration['sentinel'] as $sentinel) {
|
||||||
|
|
@ -107,11 +165,12 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
||||||
if (substr($check, 0, 6) == "equal:") {
|
if (substr($check, 0, 6) == "equal:") {
|
||||||
// check if terms a equal
|
// check if terms a equal
|
||||||
if (substr($check, 6) != $value) {
|
if (substr($check, 6) != $value) {
|
||||||
return ["Access denied", 403];
|
return ["internal_error" => "Access denied", 403];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
echo "Error";
|
||||||
// unknown instruction
|
// unknown instruction
|
||||||
civiproxy_log("Webhook2API[{$configuration['name']}]: don't understad sentinel '{$check}'. Ignored.");
|
// //error_log("Webhook2API[{$configuration['name']}]: don't understad sentinel '{$check}'. Ignored.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -130,7 +189,7 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
||||||
// run modifiers
|
// run modifiers
|
||||||
foreach ($modifiers as $modifier) {
|
foreach ($modifiers as $modifier) {
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
civiproxy_log("Webhook2API.modifiers: not implemented!");
|
//error_log("Webhook2API.modifiers: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// set to target
|
// set to target
|
||||||
|
|
@ -143,45 +202,26 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
||||||
// sanitise data
|
// sanitise data
|
||||||
if (!empty($configuration['parameter_sanitation']) && is_array($configuration['parameter_sanitation'])) {
|
if (!empty($configuration['parameter_sanitation']) && is_array($configuration['parameter_sanitation'])) {
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
civiproxy_log("Webhook2API.sanitation: not implemented!");
|
//error_log("Webhook2API.sanitation: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// send to target REST API
|
// send to target REST API
|
||||||
if (empty($configuration['entity']) || empty($configuration['action'])) {
|
if (empty($configuration['entity']) || empty($configuration['action'])) {
|
||||||
civiproxy_log("Webhook2API[{$configuration['name']}]: Missing entity/action.");
|
//error_log("Webhook2API[{$configuration['name']}]: Missing entity/action.");
|
||||||
return ["Configuration error", 403];
|
return ["internal_error" => "Configuration error", 403];
|
||||||
}
|
}
|
||||||
if (empty($configuration['api_key'])) {
|
if (empty($configuration['api_key'])) {
|
||||||
civiproxy_log("Webhook2API[{$configuration['name']}]: Missing api_key.");
|
//error_log("Webhook2API[{$configuration['name']}]: Missing api_key.");
|
||||||
return ["Configuration error", 403];
|
return ["internal_error" => "Configuration error", 403];
|
||||||
}
|
}
|
||||||
$params['api_key'] = $configuration['api_key'];
|
$params['api_key'] = $configuration['api_key'];
|
||||||
|
|
||||||
// run API call
|
// run API call
|
||||||
$result = civicrm_api3($configuration['entity'], $configuration['action'], $params);
|
return civicrm_api3($configuration['entity'], $configuration['action'], $params);
|
||||||
|
|
||||||
// process result
|
|
||||||
if (!empty($configuration['response_mapping']) && is_array($configuration['response_mapping'])) {
|
|
||||||
// TODO: implement
|
|
||||||
civiproxy_log("Webhook2API.response_mapping: not implemented!");
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// default behaviour:
|
|
||||||
if (empty($result['is_error'])) {
|
|
||||||
http_response_code(200);
|
|
||||||
} else {
|
|
||||||
if (!empty($result['http_code'])) {
|
|
||||||
http_response_code($result['http_code']);
|
|
||||||
} else {
|
|
||||||
http_response_code(403);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// all done
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the value from a multidimensional array,
|
* Get the value from a multidimensional array,
|
||||||
* specified by the path
|
* specified by the path
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue