m3 Security Fixes

This commit is contained in:
Mark Gregory
2026-09-16 17:16:25 +01:00
parent d68687f062
commit 8f37245e13
64 changed files with 4247 additions and 4426 deletions
+98 -114
View File
@@ -2,32 +2,18 @@
namespace Modules\M3\Console;
use Illuminate\Console\Command;
use Modules\M3\Http\Controllers\Controller;
use DB;
use Config;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Log;
use Str;
use File;
use DateTime;
use Storage;
use Cache;
use Picqer\Barcode\BarcodeGeneratorPNG;
use Dompdf\Dompdf;
use Ayeo\Barcode;
use PDF;
use App;
use Zebra\Client;
use Zebra\Zpl\Image;
use Zebra\Zpl\Builder;
use Zebra\Zpl\GdDecoder;
use Ayeo\Barcode;
use Cache;
use Config;
use DB;
use Dompdf\Dompdf;
use File;
use Illuminate\Console\Command;
use Log;
use PDF;
use Picqer\Barcode\BarcodeGeneratorPNG;
use Str;
class GenerateGS1Cmd extends Command
{
@@ -62,7 +48,7 @@ class GenerateGS1Cmd extends Command
*/
public function handle()
{
//$this->info('Start CallCloseAPI...');
// $this->info('Start CallCloseAPI...');
ini_set('max_execution_time', Config::get('arrays.PHPTimeOutCL'));
ini_set('max_input_time', Config::get('arrays.PHPTimeOutCL'));
ini_set('default_socket_timeout', Config::get('arrays.PHPTimeOutCL'));
@@ -70,44 +56,43 @@ class GenerateGS1Cmd extends Command
try {
$this->info('>>> Run GS1 Label creation Command...');
Log::channel('LabelCron')->info(">>> Run GS1 Label creation Command...");
Log::channel('LabelCron')->info('>>> Run GS1 Label creation Command...');
# Get the Calling User
$userId = $this->argument('user');
$SHUSER = isset($userId) ? $userId : (m3_user() !== '' ? Str::upper(trim(m3_user())) : 'TWOSHIP');
$this->info('User: '.$SHUSER);
// Get the Calling User
$userId = $this->argument('user');
$SHUSER = isset($userId) ? $userId : (m3_user() !== '' ? Str::upper(trim(m3_user())) : 'TWOSHIP');
$this->info('User: ' . $SHUSER);
# Get Manifest Array
$GSArray1 = $this->option('gsarray');
$GSArray = json_decode($GSArray1, true);
// Get Manifest Array
$GSArray1 = $this->option('gsarray');
$GSArray = json_decode($GSArray1, true);
// dump($GSArray);
# MAK : Used for debug only
$GSArray = ["Macpkr"=> "55555","Recipient_Address1"=>"9571 Pan American DR", "Recipient_Address2"=>"C/O AEE Solar","Recipient_City"=>"El Paso",
"Recipient_CompanyName"=>"SNAPRACK EL PASO PRODUCTION","Recipient_CountryCode"=>"US","Recipient_PostalCode"=>"79927","Recipient_State"=>"TX",
"Sender_Address1"=>"6800 Arnold Miller Pkwy","Sender_Address2"=>"","Sender_City"=>"Solon",
"Sender_CompanyName"=>"Erico International","Sender_Country"=>"US","Sender_PostalCode"=>"44139","Sender_State"=>"OH",
"CarrierName"=>"R&L Carriers","trackingno"=>"306539838","BOLnumber"=>"693103848064454","ShipmentPONumber"=>"4523039092",
"PackagesArray"=> ["package 1" , "package 2"]
// MAK : Used for debug only
$GSArray = ['Macpkr' => '55555', 'Recipient_Address1' => '9571 Pan American DR', 'Recipient_Address2' => 'C/O AEE Solar', 'Recipient_City' => 'El Paso',
'Recipient_CompanyName' => 'SNAPRACK EL PASO PRODUCTION', 'Recipient_CountryCode' => 'US', 'Recipient_PostalCode' => '79927', 'Recipient_State' => 'TX',
'Sender_Address1' => '6800 Arnold Miller Pkwy', 'Sender_Address2' => '', 'Sender_City' => 'Solon',
'Sender_CompanyName' => 'Erico International', 'Sender_Country' => 'US', 'Sender_PostalCode' => '44139', 'Sender_State' => 'OH',
'CarrierName' => 'R&L Carriers', 'trackingno' => '306539838', 'BOLnumber' => '693103848064454', 'ShipmentPONumber' => '4523039092',
'PackagesArray' => ['package 1', 'package 2'],
];
if ($SHUSER!='') {
# Get User CO & WH from Table ICM428M
if ($SHUSER != '') {
// Get User CO & WH from Table ICM428M
$ICM428M = DB::connection(config('m3.connection', 'pgsql'))->table('icm428m')
->select('R428US','R428CO', 'R428WH','R428PL')
->where('R428US','=',$SHUSER)
->select('R428US', 'R428CO', 'R428WH', 'R428PL')
->where('R428US', '=', $SHUSER)
->first();
$R428US = isset($ICM428M->R428US) ? $ICM428M->R428US : ''; # User
$COMPANY = isset($ICM428M->R428CO) ? $ICM428M->R428CO : ''; # Company
$PLANT = isset($ICM428M->R428PL) ? $ICM428M->R428PL : ''; # Plant
$WHS = isset($ICM428M->R428WH) ? $ICM428M->R428WH : ''; # WareHouse
$R428US = isset($ICM428M->R428US) ? $ICM428M->R428US : ''; // User
$COMPANY = isset($ICM428M->R428CO) ? $ICM428M->R428CO : ''; // Company
$PLANT = isset($ICM428M->R428PL) ? $ICM428M->R428PL : ''; // Plant
$WHS = isset($ICM428M->R428WH) ? $ICM428M->R428WH : ''; // WareHouse
$Macpkr = $GSArray['Macpkr'];
$packageType = '0';
$manufactID = '0826528'; # MAK : get ID from Nvent and save to Config File
$total_length = 9;
$Macpkr = $GSArray['Macpkr'];
$packageType = '0';
$manufactID = '0826528'; // MAK : get ID from Nvent and save to Config File
$total_length = 9;
$html = '
<html>
@@ -137,74 +122,74 @@ class GenerateGS1Cmd extends Command
</head>
<body style="font-family: Arial, sans-serif;">';
# Get number of Pallets
// Get number of Pallets
$packageCount = count($GSArray['PackagesArray']);
$packageNum = 1;
$packageNum = 1;
foreach ($GSArray['PackagesArray'] as $key => $value) {
$table_style = $packageNum < $packageCount ? ' style="page-break-after: always;" ' : '';
$table_style = $packageNum < $packageCount ? ' style="page-break-after: always;" ' : '';
if (Cache::has('GS1SEQUENCE')) {
$GS1SEQUENCE = Cache::get('GS1SEQUENCE');
$GS1SEQUENCE = Cache::get('GS1SEQUENCE');
$GS1SEQUENCE++;
$GS1SEQUENCEID = str_pad($GS1SEQUENCE, $total_length, "0", STR_PAD_LEFT);
$GS1SEQUENCEID = str_pad($GS1SEQUENCE, $total_length, '0', STR_PAD_LEFT);
}
# Box Number Not Found Get it from DB
else{
$GS1SEQUENCE = 1;
$GS1SEQUENCEID = str_pad($GS1SEQUENCE, $total_length, "0", STR_PAD_LEFT);
// Box Number Not Found Get it from DB
else {
$GS1SEQUENCE = 1;
$GS1SEQUENCEID = str_pad($GS1SEQUENCE, $total_length, '0', STR_PAD_LEFT);
}
Cache::forever('GS1SEQUENCE', $GS1SEQUENCEID);
$this->info(">>> GS1 sequence Id: ".$GS1SEQUENCEID);
$this->info('>>> GS1 sequence Id: ' . $GS1SEQUENCEID);
$gs1_128_bc_1 = '00' .$packageType . $manufactID . $GS1SEQUENCEID;
$gs1_128_bc_1 = '00' . $packageType . $manufactID . $GS1SEQUENCEID;
# Calculate Check Digit
// Calculate Check Digit
$digits = str_split($gs1_128_bc_1);
$sum = 0;
$sum = 0;
$length = count($digits);
# Loop through each digit starting from the right
// Loop through each digit starting from the right
for ($i = 0; $i < $length; $i++) {
$digit = $digits[$length - $i - 1];
# Assign a weight of 3 or 1 alternately
// Assign a weight of 3 or 1 alternately
$weight = ($i % 2 == 0) ? 3 : 1;
# Add the product of the digit and its weight to the sum
// Add the product of the digit and its weight to the sum
$sum += $digit * $weight;
}
# Calculate the remainder when sum is divided by 10
// Calculate the remainder when sum is divided by 10
$remainder = $sum % 10;
# If remainder is 0, check digit is 0; otherwise, subtract remainder from 10
// If remainder is 0, check digit is 0; otherwise, subtract remainder from 10
$checkDigit = ($remainder == 0) ? 0 : 10 - $remainder;
$gs1_128_bc = $gs1_128_bc_1 . $checkDigit;
$gs1_128_bc_desc = '(00)' .$packageType . $manufactID . $GS1SEQUENCEID .$checkDigit;
$gs1_128_bc = $gs1_128_bc_1 . $checkDigit;
$gs1_128_bc_desc = '(00)' . $packageType . $manufactID . $GS1SEQUENCEID . $checkDigit;
$data = [
'ship_to' => $GSArray["Recipient_CompanyName"].'<br>'.$GSArray["Recipient_Address1"].'<br>'.
$GSArray["Recipient_City"].','. $GSArray["Recipient_State"]
.'<br>'.$GSArray["Recipient_PostalCode"] ,
'from' => $GSArray["Sender_CompanyName"].'<br>'.$GSArray["Sender_Address1"].'<br>'.
$GSArray["Sender_City"].','. $GSArray["Sender_State"]
.'<br>'.$GSArray["Sender_PostalCode"] ,
'ship_to_lbl' => '420'.$GSArray["Recipient_PostalCode"],
'ship_to_desc' => '(420)'.$GSArray["Recipient_PostalCode"],
'pro' => '190071217845706',
'item_number' => '10000B',
'upc' => '098506095310',
'quantity' => '1',
'serial_shipping_container' => $gs1_128_bc_desc
'ship_to' => $GSArray['Recipient_CompanyName'] . '<br>' . $GSArray['Recipient_Address1'] . '<br>' .
$GSArray['Recipient_City'] . ',' . $GSArray['Recipient_State']
. '<br>' . $GSArray['Recipient_PostalCode'],
'from' => $GSArray['Sender_CompanyName'] . '<br>' . $GSArray['Sender_Address1'] . '<br>' .
$GSArray['Sender_City'] . ',' . $GSArray['Sender_State']
. '<br>' . $GSArray['Sender_PostalCode'],
'ship_to_lbl' => '420' . $GSArray['Recipient_PostalCode'],
'ship_to_desc' => '(420)' . $GSArray['Recipient_PostalCode'],
'pro' => '190071217845706',
'item_number' => '10000B',
'upc' => '098506095310',
'quantity' => '1',
'serial_shipping_container' => $gs1_128_bc_desc,
];
# Initialize barcode generator
$generator = new BarcodeGeneratorPNG();
// Initialize barcode generator
$generator = new BarcodeGeneratorPNG;
# Generate barcodes
$shipToPostalCodeBarcode = $generator->getBarcode($data['ship_to_lbl'], $generator::TYPE_CODE_128);
$serialShippingContainerBarcode = $generator->getBarcode($data['serial_shipping_container'], $generator::TYPE_CODE_128, 2 ,50);
// Generate barcodes
$shipToPostalCodeBarcode = $generator->getBarcode($data['ship_to_lbl'], $generator::TYPE_CODE_128);
$serialShippingContainerBarcode = $generator->getBarcode($data['serial_shipping_container'], $generator::TYPE_CODE_128, 2, 50);
# HTML content for the label
// HTML content for the label
$html .= '
<table '.$table_style.'>
<table ' . $table_style . '>
<tr>
<td colspan="2" class="border_btm border_rght align_lft">
FROM:<br>' . $data['from'] . '
@@ -219,18 +204,18 @@ class GenerateGS1Cmd extends Command
' . $data['ship_to_desc'] . '
</td>
<td class="border_btm margin_t align_lft">
Carrier: '.$GSArray["CarrierName"].' <br>
PRO #: '.$GSArray["ShipmentPONumber"].' <br>
B/L #: '.$GSArray["BOLnumber"].'
Carrier: ' . $GSArray['CarrierName'] . ' <br>
PRO #: ' . $GSArray['ShipmentPONumber'] . ' <br>
B/L #: ' . $GSArray['BOLnumber'] . '
</td>
</tr>
<tr>
<td colspan="2" class="border_btm margin_t align_lft border_rght">
PURCHASE ORDER: '.$GSArray["Macpkr"].' <br>
PURCHASE ORDER: ' . $GSArray['Macpkr'] . ' <br>
Vendor: ' . $manufactID . '
</td>
<td colspan="2" class="border_btm margin_t align_center">
Pallet # : '.$packageNum.' of '.$packageCount.'
Pallet # : ' . $packageNum . ' of ' . $packageCount . '
</td>
</tr>
<tr>
@@ -244,32 +229,32 @@ class GenerateGS1Cmd extends Command
$packageNum++;
}
$html .='</body> </html>';
$html .= '</body> </html>';
// dump($html);
// App::call('App\Http\Controllers\utilitiesContoller@generateGS128');
ob_start();
# Initialize Dompdf
$dompdf = new Dompdf();
// Initialize Dompdf
$dompdf = new Dompdf;
$dompdf->loadHtml($html);
$dompdf->setPaper('a6', 'portrait');
# Render the HTML as PDF
// Render the HTML as PDF
$dompdf->render();
# Output the generated PDF to Browser
// Output the generated PDF to Browser
// $dompdf->stream();
$pdfContent = $dompdf->output();
$pdfContent = $dompdf->output();
// dump($pdfContent);
$labelsPath = Config::get('arrays.PdfPath');
# Put the PDF in labels/CarrierLabel
$GSFolder = "GSLabel";
$carrierFileName = $GSFolder.'_'.$Macpkr.'_'.$COMPANY.'_'.$WHS;
file_put_contents($labelsPath.$GSFolder.'/'.$carrierFileName.'.pdf',$pdfContent);
// Put the PDF in labels/CarrierLabel
$GSFolder = 'GSLabel';
$carrierFileName = $GSFolder . '_' . $Macpkr . '_' . $COMPANY . '_' . $WHS;
file_put_contents($labelsPath . $GSFolder . '/' . $carrierFileName . '.pdf', $pdfContent);
# Check if the PDF was generated correctly
// Check if the PDF was generated correctly
// if (!file_exists($tempPdfPath) || filesize($tempPdfPath) === 0) {
// throw new Exception('PDF generation failed.');
// }
@@ -277,11 +262,10 @@ class GenerateGS1Cmd extends Command
ob_end_clean();
}
Log::channel('LabelCron')->info("<<< GS1-128...End of Label Creation");
$this->info("<<< GS1-128...End of Label Creation");
Log::channel('LabelCron')->info('<<< GS1-128...End of Label Creation');
$this->info('<<< GS1-128...End of Label Creation');
}
catch (\Throwable $th) {
} catch (\Throwable $th) {
// Log::error($th);
Log::channel('LabelCron')->error($th);
}