126 lines
3.8 KiB
PHP
126 lines
3.8 KiB
PHP
<?php
|
|
// Bypass Auth on API Call
|
|
define('IS_API', true);
|
|
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
|
|
if (in_array($origin,[
|
|
'http://infra-tools.appliarmony.net',
|
|
'https://infra-tools.appliarmony.net',
|
|
'https://web-infra-reports.process.dkm'
|
|
], true)) {
|
|
header("Access-Control-Allow-Origin: $origin");
|
|
header("Vary: Origin");
|
|
}
|
|
header('Access-Control-Allow-Methods: POST, OPTIONS');
|
|
header('Access-Control-Allow-Headers: Content-Type, Accept');
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }
|
|
|
|
// Web-Service Common
|
|
include $_SERVER['DOCUMENT_ROOT'] . "/include/all.php";
|
|
$rc=999;$stdout="?";$actor=$_SERVER['COMPUTERNAME'];$done=0;
|
|
$input = file_get_contents('php://input');
|
|
$json = json_decode($input, true);
|
|
$SourceUser = $json['source'] ?? $_SERVER['CURRENTUSER'] ?? null;
|
|
|
|
// Main
|
|
|
|
$ticketId = (int)$json['ticketId'];
|
|
$userId = (int)$json['userId'];
|
|
|
|
// 1) initSession
|
|
$initPayload = $glpiUserToken
|
|
? ['user_token' => $glpiUserToken]
|
|
: ['login' => 'glpi', 'password' => 'glpi'];
|
|
$ch = curl_init(rtrim($glpiUrl, '/') . '/initSession');
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_POST => true,
|
|
CURLOPT_HTTPHEADER => [
|
|
'Content-Type: application/json',
|
|
'App-Token: ' . $glpiAppToken,
|
|
],
|
|
CURLOPT_POSTFIELDS => json_encode($initPayload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
|
|
CURLOPT_SSL_VERIFYPEER => false,
|
|
CURLOPT_SSL_VERIFYHOST => false,
|
|
]);
|
|
$initResp = curl_exec($ch);
|
|
if ($initResp === false) {
|
|
die('initSession cURL error: ' . curl_error($ch));
|
|
}
|
|
$initJson = json_decode($initResp, true);
|
|
curl_close($ch);
|
|
|
|
if (empty($initJson['session_token'])) {
|
|
die("initSession failed:\n$initResp");
|
|
}
|
|
$sessionToken = $initJson['session_token'];
|
|
|
|
// 2) Update the ticket using POST
|
|
$tuPayload = [
|
|
'input' => [
|
|
'tickets_id' => $ticketId,
|
|
'users_id' => $userId,
|
|
'type' => 2 // 1=requester, 2=assigned, 3=observer
|
|
]
|
|
];
|
|
|
|
$ch = curl_init(rtrim($glpiUrl, '/') . '/Ticket_User');
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_POST => true,
|
|
CURLOPT_HTTPHEADER => [
|
|
'Content-Type: application/json',
|
|
'App-Token: ' . $glpiAppToken,
|
|
'Session-Token: ' . $sessionToken,
|
|
],
|
|
CURLOPT_POSTFIELDS => json_encode($tuPayload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
|
|
CURLOPT_SSL_VERIFYPEER => false,
|
|
CURLOPT_SSL_VERIFYHOST => false,
|
|
]);
|
|
$tuResp = curl_exec($ch);
|
|
$tuCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
if ($tuResp === false) {
|
|
die('Ticket_User add cURL error: ' . curl_error($ch));
|
|
}
|
|
curl_close($ch);
|
|
|
|
$rc=0;$done=1;$stdout="Ticket $ticketId assigned to $userId ";
|
|
|
|
// 3) If Zabbix Ticket --> Call acknowledge WS
|
|
$rs = Invoke_glpi("SELECT name, content FROM glpi_tickets WHERE id=$ticketId");
|
|
$ticketName = $rs[0]['name'] ?? '';
|
|
$ticketContent = $rs[0]['content'] ?? '';
|
|
|
|
if (preg_match('/eventid=(\d+)/', $ticketContent, $m)) {
|
|
$eventId = $m[1];
|
|
$payload = json_encode(['eventId' => $eventId]);
|
|
|
|
// Detect Zabbix source
|
|
if (str_contains($ticketName, 'ZABBIX OT |')) {
|
|
// Zabbix OT Case
|
|
postJson("$BaseUrl/Zabbix/Acknowledge-OT-Event.php", $payload);
|
|
$stdout .= "| Zabbix OT Acknowledged (Event $eventId)";
|
|
}
|
|
elseif (str_contains($ticketName, 'ZABBIX IT |')) {
|
|
// Zabbix IT Case
|
|
postJson("$BaseUrl/Zabbix/Acknowledge-IT-Event.php", $payload);
|
|
$stdout .= "| Zabbix IT Acknowledged (Event $eventId)";
|
|
}
|
|
}
|
|
|
|
//Answer
|
|
$response = [
|
|
"RC" => $rc,
|
|
"stdout" => $stdout,
|
|
];
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
echo json_encode($response, JSON_UNESCAPED_UNICODE);
|
|
|
|
// Log to dedicated Table
|
|
log2DB();
|
|
|
|
?>
|
|
|
|
|
|
|