M3 Security Fixes for Pass 39

This commit is contained in:
Mark Gregory
2026-09-17 13:08:40 +01:00
parent e0d8e1a725
commit 34c3460760
63 changed files with 655 additions and 503 deletions
@@ -17,9 +17,7 @@ use Str;
class CloseShipment extends Controller
{
private const ZERO_PAD = '000000';
private const JSON_CONTENT_TYPE = 'application/json';
private const NULL_M3_RESPONSE = 'M3 API responded with null value';
// CloseShipmentCoChargeAPI : with URL PARAMS COCharge
@@ -56,6 +54,7 @@ class CloseShipment extends Controller
$pdfFilePath = Config::get('arrays.PdfPath');
$dELIVERYNO = $mANIFEST != '' ? $mANIFEST : self::ZERO_PAD;
if ($urlParams != '') {
// Write to Logs : JSON
$jSONIN = json_encode([
@@ -217,6 +216,7 @@ class CloseShipment extends Controller
}
$iCM695M1TMP = $iCM695M1TMPF;
$freightTermsTMP = DB::connection(config('m3.connection', 'pgsql'))->table('icm321m')
->selectRaw('TRIM(ARCODE) as FREIGHTTERMS,ARCHARGE as BILLABLE')
->get();
@@ -261,9 +261,7 @@ class CloseShipment extends Controller
// PFC : Check that Picked / Packed are all Equal
foreach ($iCM688M2SL as $key => $ICM688M2SLR) {
$a5PACKED = isset($ICM688M2SLR->A5PACKED) ? $ICM688M2SLR->A5PACKED : 0;
$a5PICKED = isset($ICM688M2SLR->A5PICKED) ? $ICM688M2SLR->A5PICKED : 0;
$a5PKLN = isset($ICM688M2SLR->A5PKLN) ? $ICM688M2SLR->A5PKLN : 0;
$a5RSVQTY = isset($ICM688M2SLR->A5RSVQTY) ? $ICM688M2SLR->A5RSVQTY : 0;
$a5ShortShipQty = (int) $a5RSVQTY - (int) $a5PICKED;
@@ -607,10 +605,10 @@ class CloseShipment extends Controller
Helper::logToICM699M($data);
$response = Http::withHeaders([
'accept' => self::JSON_CONTENT_TYPE,
'Content-Type' => self::JSON_CONTENT_TYPE,
'Connection' => 'close',
])
'accept' => self::JSON_CONTENT_TYPE,
'Content-Type' => self::JSON_CONTENT_TYPE,
'Connection' => 'close',
])
->withToken($token)
->withBody($jSONCS, self::JSON_CONTENT_TYPE)
->timeout(Config::get('arrays.curlTimeOut'))
@@ -828,10 +826,10 @@ class CloseShipment extends Controller
Helper::logToICM699M($data);
$response = Http::withHeaders([
'accept' => self::JSON_CONTENT_TYPE,
'Content-Type' => self::JSON_CONTENT_TYPE,
'Connection' => 'close',
])
'accept' => self::JSON_CONTENT_TYPE,
'Content-Type' => self::JSON_CONTENT_TYPE,
'Connection' => 'close',
])
->withToken($token)
->withBody($jSONCS, self::JSON_CONTENT_TYPE)
->timeout(Config::get('arrays.curlTimeOut'))
@@ -5,6 +5,7 @@ namespace Modules\M3\Http\Controllers\API;
use Config;
use DB;
use Illuminate\Http\Request;
use Log;
use Modules\M3\Helpers\Helper;
use Modules\M3\Http\Controllers\Controller;
use Modules\M3\Services\PostgresProgramBridge;
@@ -13,7 +14,6 @@ use Str;
class M3Controller extends Controller
{
private const FIELD_PREFIX = 'Field: ';
private const M3_LIST_SUFFIX = ' M3-Lis-JSN';
// Split Data and Write to ICM666M2
@@ -258,14 +258,12 @@ class M3Controller extends Controller
$partNumber = isset($product['PartNumber']) ? $product['PartNumber'] : '';
$orderLine = isset($product['OrderLine']) ? $product['OrderLine'] : '';
$partWeight = isset($product['PartWeight']) ? $product['PartWeight'] : '';
$pickerLine = isset($product['PickerLine']) ? $product['PickerLine'] : '';
$primaryLocation = isset($product['PrimaryLocation']) ? $product['PrimaryLocation'] : '';
$allocation = isset($product['Allocation']) ? $product['Allocation'] : '';
$allocatedTo = isset($product['AllocatedTo']) ? $product['AllocatedTo'] : '';
$locationSeq = isset($product['LocationSeq']) ? $product['LocationSeq'] : '';
$zone = isset($product['Zone']) ? $product['Zone'] : '';
$baseUnitPrice = isset($product['BaseUnitPrice']) ? $product['BaseUnitPrice'] : '';
$frgnUnitPrice = isset($product['FrgnUnitPrice']) ? $product['FrgnUnitPrice'] : '';
$sellUOM = isset($product['SellUOM']) ? $product['SellUOM'] : '';
$partConv = isset($product['PartConv']) ? $product['PartConv'] : '';
$uOM = isset($product['UOM']) ? $product['UOM'] : '';
@@ -461,7 +459,6 @@ class M3Controller extends Controller
$params[] = $conn->AddParameterChar('in', 11, 'PickerNumber', '', $pickerNumberNoZero);
// Start Time Tracking
$start = microtime(true);
// ICM700C EWOBJTST ICM700C ICM700CSBM
$result = $conn->PgmCall('ICM700CSBM', env('OBJLIB'), $params, [], []);
@@ -15,7 +15,6 @@ use Str;
class ReplenAPI extends Controller
{
private const ZERO_PAD = '000000';
private const JSON_CONTENT_TYPE = 'application/json';
// M3Replenishement with URL Params
@@ -85,9 +84,9 @@ class ReplenAPI extends Controller
$token = $ionToken;
$response = Http::withHeaders([
'accept' => self::JSON_CONTENT_TYPE,
'Content-Type' => self::JSON_CONTENT_TYPE,
])
'accept' => self::JSON_CONTENT_TYPE,
'Content-Type' => self::JSON_CONTENT_TYPE,
])
->withToken($token)
->withBody($jSON, self::JSON_CONTENT_TYPE)
->timeout(Config::get('arrays.curlTimeOut'))
@@ -138,7 +137,7 @@ class ReplenAPI extends Controller
if ($key2 != 'Locations') {
$dataToWrite[$key2] = $content;
} else {
foreach ($content as $key3 => $content2) {
foreach ($content as $content2) {
$dataToWrite2[] = array_merge($dataToWrite, $content2);
}
}
@@ -16,11 +16,8 @@ use Str;
class TransferAPI extends Controller
{
private const ZERO_PAD = '000000';
private const JSON_CONTENT_TYPE = 'application/json';
private const ORDER_CATEGORY_LABEL = ' Order Category: ';
private const NO_URL_PARAMETERS = 'No URL Parameters Sent';
// TransferAPIURL : with URL PARAMS
@@ -474,7 +471,7 @@ class TransferAPI extends Controller
}
$iCM688M1SL = $iCM688M1SLTMP->get();
// Loop ICM688M1 to get all A4MACPKR
foreach ($iCM688M1SL as $key => $ICM688M1) {
foreach ($iCM688M1SL as $ICM688M1) {
$allMacpkrs[] = $ICM688M1->A4MACPKR;
}
}
@@ -98,7 +98,6 @@ class GetContentsController extends Controller
}
$row = $result[0];
$aggCode = trim($row->A4SHPAGGCD);
return [
'orderNumber' => trim($row->A4MACPKR),
@@ -14,7 +14,6 @@ class M3GetPDFFromCacheController extends Controller
public static function index(Request $request)
{
// Parse PDF file and build necessary objects.
$parser = new Parser;
$aggno = $aggmsg = '';
$iC670M = $pDFArray = $carrier = $trackingno = $iCM688M1 = [];
@@ -36,7 +35,6 @@ class M3GetPDFFromCacheController extends Controller
->where('R428US', '=', $sHUSER)
->first();
$r428US = isset($iCM428M->R428US) ? $iCM428M->R428US : '';
$cOMPANY = isset($iCM428M->R428CO) ? $iCM428M->R428CO : ''; // Company
$pLANT = isset($iCM428M->R428PL) ? $iCM428M->R428PL : ''; // Plant
$wHS = isset($iCM428M->R428WH) ? $iCM428M->R428WH : ''; // WareHouse
@@ -98,6 +96,7 @@ class M3GetPDFFromCacheController extends Controller
->get();
}
if (count($iCM695M1) > 0) {
$tmpCacheArr = $carrier = $trackingno = [];
// Loop the Results from $ICM595M1TMP
@@ -242,6 +242,8 @@ class OrderLinesOfClosedOrder extends Controller
// MAK Store the File to Storage
app(SpreadsheetExport::class)->store($iCM688M2Col, $prevMonthFile, 'publicCL');
return back();
} catch (\Throwable $th) {
Log::error($th);
@@ -296,7 +298,6 @@ class OrderLinesOfClosedOrder extends Controller
if (Storage::disk('publicCL')->exists($fileName)) {
// File exists, retrieve content or URL
// $content = Storage::disk('publicCL')->get($fileName);
$fileUrl = Storage::disk('publicCL')->url($fileName);
$fileNameOnly = strpos($fileName, '/') != false ? substr($fileName, strpos($fileName, '/') + 1) : $fileName;
// Download the file
@@ -69,15 +69,15 @@ class ReplenishSettingsController extends Controller
public function update(Request $request)
{
$r658PN = (trim($request->R658PN) ?? trim($request->R658PN)) != null ? trim($request->R658PN) : '';
$r658CO = (trim($request->R658CO) ?? trim($request->R658CO)) != null ? trim($request->R658CO) : '';
$r658PL = (trim($request->R658PL) ?? trim($request->R658PL)) != null ? trim($request->R658PL) : '';
$r658WH = (trim($request->R658WH) ?? trim($request->R658WH)) != null ? trim($request->R658WH) : '';
$r658PN = trim((string) ($request->R658PN ?? ''));
$r658CO = trim((string) ($request->R658CO ?? ''));
$r658PL = trim((string) ($request->R658PL ?? ''));
$r658WH = trim((string) ($request->R658WH ?? ''));
$r658MQ = trim($request->R658MQ);
$r658RQ = trim($request->R658RQ);
$r658RMQ = trim($request->R658RMQ);
$r658TL = trim($request->R658TL);
$r658IZLCF = (trim($request->R658IZLCF) ?? trim($request->R658IZLCF)) != null ? trim($request->R658IZLCF) : '0';
$r658IZLCF = trim((string) ($request->R658IZLCF ?? '0'));
DB::connection(config('m3.connection', 'pgsql'))->table('icm658m')
->where('R658PN', $r658PN)
@@ -176,6 +176,7 @@ class ReplenishSettingsController extends Controller
// $rEFCAT658 = DB::connection(config('m3.connection', 'pgsql'))->select($sqlstmt);
// dd($rEFCAT658);
return Datatables::of($rEFCAT658)->addIndexColumn()->make(true);
}
}
@@ -10,7 +10,6 @@ use Str;
class execSummaryController extends Controller
{
private const WAREHOUSE_IN_CLAUSE = "' and a5whs in (";
public static function index(Request $request)
{
$iC670M = collect();
@@ -24,7 +23,7 @@ class execSummaryController extends Controller
if ($request->ajax()) {
$wHDDA = isset($request->WHDDA) ? $request->WHDDA : [];
$wHArr = [];
foreach ($wHDDA as $key => $WHDDAV) {
foreach ($wHDDA as $WHDDAV) {
$cO = substr($WHDDAV, 0, 3);
$wHArr[] = substr($WHDDAV, 6, 3);
}
@@ -145,7 +144,6 @@ class execSummaryController extends Controller
->where('R428US', '=', $sHUSER)
->first();
$r428US = isset($iCM428M->R428US) ? $iCM428M->R428US : ''; // User
$cOMPANY = isset($iCM428M->R428CO) ? $iCM428M->R428CO : '110'; // Company
$pLANT = isset($iCM428M->R428PL) ? $iCM428M->R428PL : '144'; // Plant
$wHS = isset($iCM428M->R428WH) ? $iCM428M->R428WH : '322'; // WareHouse
@@ -10,11 +10,8 @@ use Str;
class execSummaryLineController extends Controller
{
private const WAREHOUSE_IN_CLAUSE = "' and a5whs in (";
private const FIRST_DAY_THIS_MONTH = 'first day of this month';
private const LAST_DAY_THIS_MONTH = 'last day of this month';
private const ONE_YEAR_AGO = '-1 year';
public static function index(Request $request)
@@ -24,7 +21,7 @@ class execSummaryLineController extends Controller
if ($request->ajax()) {
$wHDDA = isset($request->WHDDA) ? $request->WHDDA : [];
$wHArr = [];
foreach ($wHDDA as $key => $WHDDAV) {
foreach ($wHDDA as $WHDDAV) {
$cO = substr($WHDDAV, 0, 3);
$wHArr[] = substr($WHDDAV, 6, 3);
}
@@ -186,7 +183,6 @@ class execSummaryLineController extends Controller
->where('R428US', '=', $sHUSER)
->first();
$r428US = isset($iCM428M->R428US) ? $iCM428M->R428US : ''; // User
$cOMPANY = isset($iCM428M->R428CO) ? $iCM428M->R428CO : '110'; // Company
$pLANT = isset($iCM428M->R428PL) ? $iCM428M->R428PL : '144'; // Plant
$wHS = isset($iCM428M->R428WH) ? $iCM428M->R428WH : '322'; // WareHouse
@@ -31,7 +31,7 @@ class fillBOL2Controller extends Controller
'bol_number' => $request->input('BOL_number') ?? '1234567890',
'shipper_no' => $request->input('shipper_no') ?? '1234567890',
'date' => now()->format('m/d/Y') ?? '01/01/2000',
'master_bill_no' => $request->input('master_bill_no') ? 'X' : 'X',
'master_bill_no' => 'X',
'master_bill_yes' => $request->input('master_bill_yes') ? 'X' : '',
'master_bill_drops' => $request->input('master_bill_drops') ?? '',
'consignor_name' => $request->input('consignor_name') ?? 'ERICO INTERNATIONAL CORP',
@@ -42,7 +42,7 @@ class fillBOL2Controller extends Controller
'consignee_address1' => $request->input('consignee_address1') ?? 'JULES VERNEWEG 75',
'consignee_address2' => $request->input('consignee_address2') ?? '',
'consignee_address3' => $request->input('consignee_address3') ?? 'TILBURG . 5015 BG',
'freight_collect' => $request->input('freight_collect') ? 'X' : 'X',
'freight_collect' => 'X',
'carrier_name' => $request->input('carrier_name') ?? 'ICL / Expeditors',
'pieces' => $request->input('pieces') ?? '20',
@@ -6,6 +6,7 @@ use Illuminate\Http\Request;
use mikehaertl\pdftk\Pdf;
use Storage;
class fillBOLController extends Controller
{
public static function index(Request $request)
@@ -31,6 +32,7 @@ class fillBOLController extends Controller
dd($error);
}
$newfile = "BOL-{$bOL['BOL_number']}.pdf";
var_dump($newfile);
@@ -41,6 +43,7 @@ class fillBOLController extends Controller
dd($error);
}
$result = $pdf->fillForm([
'DTESHIPED.1' => date('d/m/Y'),
'invoice_number' => $bOL['BOL_number'],
@@ -207,7 +210,6 @@ class fillBOLController extends Controller
dd($error);
} else {
return response()->file(Storage::disk('public')->path($newfile));
dd('step 4');
}
}
@@ -12,13 +12,9 @@ use Modules\M3\Services\PostgresProgramBridge;
class userControlController extends Controller
{
private const AUTH_FAILURE_MESSAGE = 'Could not connect due to wrong user or password.';
private const DATABASE_NOT_FOUND_MESSAGE = 'Database not found. Try WRKRDBDIRE to check.';
private const CONNECTION_ERROR_PREFIX = 'Could not connect. Error: ';
private const PROGRAM_ERROR_PREFIX = 'Error calling program. Code: ';
private const MESSAGE_SEPARATOR = ' Msg: ';
public static function index(Request $request)
@@ -197,6 +193,7 @@ class userControlController extends Controller
}
}
// Add LIB
// $result = $conn->CLCommand('ADDLIBLE LIB(MPDAT10)');
@@ -212,9 +209,11 @@ class userControlController extends Controller
// Add Delivery Note Param
// $params[] = $conn->AddParameterPackDec('in', 11, 0, 'ParamIn','','00000087125');
// Start Time Tracking
// $start = microtime(true);
// Config::get('eproconf.misc.PGM1'), Config::get('eproconf.misc.libname4')
// ICM700C EWOBJTST ICM700C ICM700CSBM
$result = $conn->PgmCall('ICMCHGPRF', 'EWOBJ', $params, [], []);
@@ -224,7 +223,6 @@ class userControlController extends Controller
echo "<script>alert($pGMERRORS);</script>";
return 'error';
exit();
}
// Successful Call
else {
@@ -256,6 +254,7 @@ class userControlController extends Controller
$pGMERRORS = '';
// echo "B3<br>";
// connect to toolkit using DB2 credentials (can also leave blank for default authority)
try {
@@ -300,7 +299,6 @@ class userControlController extends Controller
}
}
private static function programBridgeConnectionError(\Throwable $exception): string
{
$code = (int) $exception->getCode();
@@ -311,4 +309,5 @@ class userControlController extends Controller
default => 'error profile5',
};
}
}
@@ -9,6 +9,7 @@ use DB;
use Dompdf\Dompdf;
use File;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Log;
use Modules\M3\Services\PostgresProgramBridge;
use PDF;
@@ -64,6 +65,7 @@ class utilitiesContoller extends Controller
// Add Delivery Note Param
$params[] = $conn->AddParameterPackDec('in', 11, 0, 'ParamIn', '', '00000087125');
// Start Time Tracking
$start = microtime(true);
@@ -98,6 +100,7 @@ class utilitiesContoller extends Controller
// Parse PDF file and build necessary objects.
$parser = new Parser;
$pdfFile = File::get('/www/sentm3test/htdocs/labels/' . $pdfFileName . '.pdf');
// Transform content to base64
@@ -196,7 +199,6 @@ class utilitiesContoller extends Controller
->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
@@ -392,6 +394,7 @@ class utilitiesContoller extends Controller
// DB::connection(config('m3.connection', 'pgsql'))->table('icm695m3')
// ->insert(['A2CO'=> $cOMPANY,'A2WHS'=> $wHS,'A2MACPKR'=> $macpkr,'A2GS1LABEL'=> $gs1_128_bc]);
return json_encode(['result' => 'success', 'GS1File' => $gS1FileNameNoRoot]);
} catch (\Throwable $th) {
@@ -406,6 +409,8 @@ class utilitiesContoller extends Controller
{
print_r('>>> Generate PDF');
$data = [
'from' => 'Any Vendor<br>123 Any Street<br>SomeTown, ST 01234',
'ship_to' => 'True Value Hardware<br>123 Any Street<br>SomeTown, ST 01234',
@@ -494,6 +499,7 @@ class utilitiesContoller extends Controller
</body>
</html>';
// Initialize Dompdf
$dompdf = new Dompdf;
$dompdf->loadHtml($html);
@@ -12,7 +12,6 @@ class whsePerfDetailsController extends Controller
{
$date_in = isset($request->date) ? date('Y-m-d', strtotime($request->date)) : date('Y-m-d');
$date_in_minus_4_months = date('Y-m-d', strtotime($date_in . ' -4 months'));
$for = isset($request->for) ? $request->for : 'a';
$username = m3_user() !== '' ? Str::upper(trim(m3_user())) : '';
@@ -22,9 +21,6 @@ class whsePerfDetailsController extends Controller
->where('R428US', '=', $username)
->first();
$co = isset($iCM428M->R428CO) ? $iCM428M->R428CO : '';
$whseno = isset($iCM428M->R428WH) ? $iCM428M->R428WH : '';
$plantno = isset($iCM428M->R428PL) ? $iCM428M->R428PL : '';
$all = "tempfile4 as (
select a5macpkr, a4shshnm, a4shipvia1, interco, a4shiptype, sum(dollarvalue) as dollarvalue, sum(weight) as weight, max(source) as source