initial commit

This commit is contained in:
2026-03-30 11:51:52 +02:00
commit 7ff76896e6
22 changed files with 1126 additions and 0 deletions

125
Glpi/Assign-Ticket.php Normal file
View File

@@ -0,0 +1,125 @@
<?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();
?>