m3 Security Fixes
This commit is contained in:
@@ -159,74 +159,80 @@ class Helper
|
||||
// Read M3 JSON and Analyse it for Errors
|
||||
public static function checkM3Errors($responseResult)
|
||||
{
|
||||
// dd($responseResult);
|
||||
// M3 Response Types
|
||||
$M3TypesResponse = ['CloseShipment', 'Move', 'COCharge', 'Replenish', 'MoveDock'];
|
||||
// CloseShipment Types And Contents
|
||||
$M3CloseShipmentResp = ['AddPackage', 'PickingListClose', 'TrailerNo', 'TrackingNo', 'ContentLabel', 'DeliveryNote', 'ShipLabel'];
|
||||
// 'ContentLabel', 'DeliveryNote','ShipLabel'
|
||||
$ErrorMessages = '';
|
||||
if (! is_object($responseResult)) {
|
||||
return 'Invalid M3 response ';
|
||||
}
|
||||
|
||||
$typesErrors = 0;
|
||||
$messages = [];
|
||||
$inactiveTypes = 0;
|
||||
$closeShipmentInactive = self::collectCloseShipmentErrors($responseResult, $messages);
|
||||
|
||||
foreach ($M3TypesResponse as $key => $Type) {
|
||||
// dump($responseResult->$Type);
|
||||
if ($Type == 'CloseShipment') {
|
||||
// dump($Type);
|
||||
$CloseShipmentErr = 0;
|
||||
$M3RespClose = $responseResult->$Type;
|
||||
foreach ($M3CloseShipmentResp as $key => $closeType) {
|
||||
$ErrorMessage = $M3RespClose->$closeType->ErrorMessage;
|
||||
$ErrorMessage = $ErrorMessage == '' ? '' : $ErrorMessage;
|
||||
$Result = $M3RespClose->$closeType->Result;
|
||||
$ResultT = $M3RespClose->$closeType->Result;
|
||||
$Result = $Result == 'N/A' || $Result == 'OK' ? '' : $Result;
|
||||
if ($ErrorMessage != '' || $Result != '') {
|
||||
$ErrorMessages .= $closeType . '-' . $Result . '-' . $ErrorMessage . ' ';
|
||||
}
|
||||
// dump($closeType);// dump($ErrorMessage);// dump($Result);
|
||||
foreach (['Move', 'COCharge', 'Replenish', 'MoveDock'] as $type) {
|
||||
$result = self::extractM3Result($responseResult, $type);
|
||||
self::appendM3Error($messages, $type, $result);
|
||||
|
||||
if ($ResultT == 'N/A') {
|
||||
$CloseShipmentErr++;
|
||||
}
|
||||
}
|
||||
} elseif ($Type == 'MoveDock') {
|
||||
$MoveDockRes = isset($responseResult->$Type->Move) ? $responseResult->$Type->Move : '';
|
||||
$ErrorMessage = isset($MoveDockRes->ErrorMessage) ? $MoveDockRes->ErrorMessage : '';
|
||||
$ErrorMessage = $ErrorMessage == '' ? '' : $ErrorMessage;
|
||||
$Result = isset($MoveDockRes->Result) ? $MoveDockRes->Result : '';
|
||||
$ResultT = $Result;
|
||||
$Result = $Result == 'N/A' || $Result == 'OK' ? '' : $Result;
|
||||
if ($ErrorMessage != '' || $Result != '') {
|
||||
$ErrorMessages .= $Type . '-' . $Result . '-' . $ErrorMessage . ' ';
|
||||
}
|
||||
// dump($Type);// dump($ErrorMessage);// dump($Result);// dump($responseResult->$Type);
|
||||
if ($ResultT == 'N/A') {
|
||||
$typesErrors++;
|
||||
}
|
||||
|
||||
} else {
|
||||
$ErrorMessage = isset($responseResult->$Type->ErrorMessage) ? $responseResult->$Type->ErrorMessage : '';
|
||||
$ErrorMessage = $ErrorMessage == '' ? '' : $ErrorMessage;
|
||||
$Result = isset($responseResult->$Type->Result) ? $responseResult->$Type->Result : '';
|
||||
$ResultT = $Result;
|
||||
$Result = $Result == 'N/A' || $Result == 'OK' ? '' : $Result;
|
||||
if ($ErrorMessage != '' || $Result != '') {
|
||||
$ErrorMessages .= $Type . '-' . $Result . '-' . $ErrorMessage . ' ';
|
||||
}
|
||||
// dump($Type); // dump($ErrorMessage); // dump($Result); // dump($responseResult->$Type);
|
||||
if ($ResultT == 'N/A') {
|
||||
$typesErrors++;
|
||||
}
|
||||
if ($result['rawResult'] === 'N/A') {
|
||||
$inactiveTypes++;
|
||||
}
|
||||
}
|
||||
// dd($ErrorMessages);
|
||||
|
||||
if ($CloseShipmentErr == count($M3CloseShipmentResp) && $typesErrors == count($M3TypesResponse) - 1) {
|
||||
$ErrorMessages .= '-M3 did not call any method or type ';
|
||||
if ($closeShipmentInactive === 7 && $inactiveTypes === 4) {
|
||||
$messages[] = '-M3 did not call any method or type';
|
||||
}
|
||||
|
||||
return $ErrorMessages;
|
||||
return $messages === [] ? '' : implode(' ', $messages) . ' ';
|
||||
}
|
||||
|
||||
private static function collectCloseShipmentErrors(object $responseResult, array &$messages): int
|
||||
{
|
||||
$closeShipment = $responseResult->CloseShipment ?? null;
|
||||
if (! is_object($closeShipment)) {
|
||||
return 7;
|
||||
}
|
||||
|
||||
$inactive = 0;
|
||||
foreach (['AddPackage', 'PickingListClose', 'TrailerNo', 'TrackingNo', 'ContentLabel', 'DeliveryNote', 'ShipLabel'] as $type) {
|
||||
$result = self::extractResultNode($closeShipment->{$type} ?? null);
|
||||
self::appendM3Error($messages, $type, $result);
|
||||
|
||||
if ($result['rawResult'] === 'N/A') {
|
||||
$inactive++;
|
||||
}
|
||||
}
|
||||
|
||||
return $inactive;
|
||||
}
|
||||
|
||||
private static function extractM3Result(object $responseResult, string $type): array
|
||||
{
|
||||
$node = $responseResult->{$type} ?? null;
|
||||
if ($type === 'MoveDock' && is_object($node)) {
|
||||
$node = $node->Move ?? null;
|
||||
}
|
||||
|
||||
return self::extractResultNode($node);
|
||||
}
|
||||
|
||||
private static function extractResultNode(mixed $node): array
|
||||
{
|
||||
if (! is_object($node)) {
|
||||
return ['error' => '', 'result' => '', 'rawResult' => 'N/A'];
|
||||
}
|
||||
|
||||
$error = trim((string) ($node->ErrorMessage ?? ''));
|
||||
$rawResult = trim((string) ($node->Result ?? ''));
|
||||
$result = in_array($rawResult, ['N/A', 'OK'], true) ? '' : $rawResult;
|
||||
|
||||
return ['error' => $error, 'result' => $result, 'rawResult' => $rawResult];
|
||||
}
|
||||
|
||||
private static function appendM3Error(array &$messages, string $type, array $result): void
|
||||
{
|
||||
if ($result['error'] === '' && $result['result'] === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
$messages[] = $type . '-' . $result['result'] . '-' . $result['error'];
|
||||
}
|
||||
|
||||
// Log All Success And Error to ICM699M
|
||||
|
||||
Reference in New Issue
Block a user