Skip to content

Commit 60563e3

Browse files
authored
Merge pull request #1284 from itflow-org/develop
Bump Version
2 parents 885a002 + a02d78b commit 60563e3

7 files changed

Lines changed: 35 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
This file documents all notable changes made to ITFlow.
44

5+
## [26.05.1] Stable Release
6+
- Security Fixes.
7+
58
## [26.05] Stable Release
69
### Bug Fixes
710
- Stripe Payment: Fix adding saved cards on client portal.

agent/ajax.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,12 @@
454454

455455
foreach ($positions as $position) {
456456
$ticket_id = intval($position['ticket_id']);
457+
458+
// Client perms check
459+
$client_query = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT ticket_client_id FROM tickets WHERE ticket_id = $ticket_id"));
460+
$client_id = intval($client_query['ticket_client_id']);
461+
enforceClientAccess();
462+
457463
$kanban = intval($position['ticket_order']); // ticket kanban position
458464
$status = intval($position['ticket_status']); // ticket statuses
459465
$oldStatus = intval($position['ticket_oldStatus']); // ticket old status if moved

agent/post/invoice.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,8 @@
542542
$invoice_number = intval($row['invoice_number']);
543543
$invoice_scope = sanitizeInput($row['invoice_scope']);
544544
$invoice_status = sanitizeInput($row['invoice_status']);
545-
$invoice_date = sanitizeInput($row['invoice_date']);
546-
$invoice_due = sanitizeInput($row['invoice_due']);
545+
$invoice_date = sanitizeInput(validateDate($row['invoice_date']));
546+
$invoice_due = sanitizeInput(validateDate($row['invoice_due']));
547547
$invoice_amount = floatval($row['invoice_amount']);
548548
$invoice_url_key = sanitizeInput($row['invoice_url_key']);
549549
$invoice_currency_code = sanitizeInput($row['invoice_currency_code']);

agent/post/recurring_invoice.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
enforceUserPermission('module_sales', 2);
1414

1515
$invoice_id = intval($_POST['invoice_id']);
16-
$recurring_invoice_frequency = sanitizeInput($_POST['frequency']);
16+
$recurring_invoice_frequency = ($_POST['frequency'] === 'year') ? 'year' : 'month';
1717

1818
$sql = mysqli_query($mysqli,"SELECT * FROM invoices WHERE invoice_id = $invoice_id");
1919
$row = mysqli_fetch_assoc($sql);
2020
$invoice_prefix = sanitizeInput($row['invoice_prefix']);
2121
$invoice_number = intval($row['invoice_number']);
22-
$invoice_date = sanitizeInput($row['invoice_date']);
22+
$invoice_date = sanitizeInput(validateDate($row['invoice_date']));
2323
$invoice_amount = floatval($row['invoice_amount']);
2424
$invoice_currency_code = sanitizeInput($row['invoice_currency_code']);
2525
$invoice_scope = sanitizeInput($row['invoice_scope']);
@@ -394,7 +394,7 @@
394394
$row = mysqli_fetch_assoc($sql_recurring_invoices);
395395
$recurring_invoice_id = intval($row['recurring_invoice_id']);
396396
$recurring_invoice_scope = sanitizeInput($row['recurring_invoice_scope']);
397-
$recurring_invoice_frequency = sanitizeInput($row['recurring_invoice_frequency']);
397+
$recurring_invoice_frequency = ($_POST['frequency'] === 'year') ? 'year' : 'month';
398398
$recurring_invoice_status = sanitizeInput($row['recurring_invoice_status']);
399399
$recurring_invoice_last_sent = sanitizeInput($row['recurring_invoice_last_sent']);
400400
$recurring_invoice_next_date = sanitizeInput($row['recurring_invoice_next_date']);
@@ -480,7 +480,7 @@
480480
$invoice_prefix = sanitizeInput($row['invoice_prefix']);
481481
$invoice_number = intval($row['invoice_number']);
482482
$invoice_scope = sanitizeInput($row['invoice_scope']);
483-
$invoice_date = sanitizeInput($row['invoice_date']);
483+
$invoice_date = sanitizeInput(validateDate($row['invoice_date']));
484484
$invoice_due = sanitizeInput($row['invoice_due']);
485485
$invoice_amount = floatval($row['invoice_amount']);
486486
$invoice_url_key = sanitizeInput($row['invoice_url_key']);

client/post.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -524,12 +524,6 @@
524524
$contact_extension = preg_replace("/[^0-9]/", '',$row['contact_extension']);
525525
$contact_mobile = sanitizeInput(formatPhoneNumber($row['contact_mobile'], $row['contact_mobile_country_code']));
526526

527-
// Check to make sure saved payment method belongs to logged in client
528-
if ($client_id !== $session_client_id) {
529-
flash_alert("Saved Payment method does not belong to you!", 'danger');
530-
redirect();
531-
}
532-
533527
// Get ITFlow company details
534528
$sql = mysqli_query($mysqli,"SELECT * FROM companies WHERE company_id = 1");
535529
$row = mysqli_fetch_assoc($sql);
@@ -548,7 +542,7 @@
548542
$config_invoice_from_email = sanitizeInput($config_invoice_from_email);
549543

550544
// Get Client Payment Details
551-
$sql = mysqli_query($mysqli, "SELECT * FROM client_saved_payment_methods LEFT JOIN payment_providers ON saved_payment_provider_id = payment_provider_id LEFT JOIN client_payment_provider ON saved_payment_client_id = client_id WHERE saved_payment_id = $saved_payment_id LIMIT 1");
545+
$sql = mysqli_query($mysqli, "SELECT * FROM client_saved_payment_methods LEFT JOIN payment_providers ON saved_payment_provider_id = payment_provider_id LEFT JOIN client_payment_provider ON saved_payment_client_id = client_id WHERE saved_payment_id = $saved_payment_id AND saved_payment_client_id = $session_client_id LIMIT 1");
552546
$row = mysqli_fetch_assoc($sql);
553547

554548
$public_key = sanitizeInput($row['payment_provider_public_key']);
@@ -561,9 +555,17 @@
561555
$payment_provider_client = sanitizeInput($row['payment_provider_client']);
562556
$saved_payment_method = sanitizeInput($row['saved_payment_provider_method']);
563557
$saved_payment_description = sanitizeInput($row['saved_payment_description']);
558+
$payment_client_id = intval($row['saved_payment_client_id']);
564559

565560
// Sanity checks
566-
if (!$payment_provider_client || !$saved_payment_method) {
561+
// Check to make invoice belongs to logged in client
562+
if ($client_id !== $session_client_id) {
563+
flash_alert("Invoice does not belong to you!", 'danger');
564+
redirect();
565+
} elseif ($payment_client_id !== $session_client_id) {
566+
flash_alert("Saved Payment method does not belong to you!", 'danger');
567+
redirect();
568+
} elseif (!$payment_provider_client || !$saved_payment_method) {
567569
flash_alert("Stripe not enabled or no client card saved", 'error');
568570
redirect();
569571
} elseif ($invoice_status !== 'Sent' && $invoice_status !== 'Viewed') {

functions.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,8 +1512,8 @@ function logAction($type, $action, $description, $client_id = 0, $entity_id = 0)
15121512
function logApp($category, $type, $details) {
15131513
global $mysqli;
15141514

1515-
$category = substr($category, 0, 200);
1516-
$details = substr($details, 0, 1000);
1515+
$category = mysqli_real_escape_string($mysqli, substr($category, 0, 200));
1516+
$details = mysqli_real_escape_string($mysqli, substr($details, 0, 1000));
15171517

15181518
mysqli_query($mysqli, "INSERT INTO app_logs SET app_log_category = '$category', app_log_type = '$type', app_log_details = '$details'");
15191519
}
@@ -2073,3 +2073,10 @@ function formatDuration($time) {
20732073

20742074
return implode(' ', $parts);
20752075
}
2076+
2077+
function validateDate($date) {
2078+
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) {
2079+
return $date;
2080+
}
2081+
return date('Y-m-d'); // Fallback
2082+
}

includes/app_version.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
* Update this file each time we merge develop into master. Format is YY.MM (add a .v if there is more than one release a month.
66
*/
77

8-
DEFINE("APP_VERSION", "26.05");
8+
DEFINE("APP_VERSION", "26.05.1");

0 commit comments

Comments
 (0)