diff --git a/admin/database_updates.php b/admin/database_updates.php index dd6442a3..f97ce66b 100644 --- a/admin/database_updates.php +++ b/admin/database_updates.php @@ -3983,11 +3983,20 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.3'"); } + + if (CURRENT_DATABASE_VERSION == '2.3.3') { + + mysqli_query($mysqli, "ALTER TABLE settings + ADD `config_smtp_provider` ENUM('standard_smtp','google_oauth','microsoft_oauth') NULL DEFAULT NULL AFTER `config_start_page` + "); + + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.4'"); + } - // if (CURRENT_DATABASE_VERSION == '2.3.3') { - // // Insert queries here required to update to DB version 2.3.3 + // if (CURRENT_DATABASE_VERSION == '2.3.4') { + // // Insert queries here required to update to DB version 2.3.4 // // Then, update the database to the next sequential version - // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.4'"); + // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.5'"); // } } else { diff --git a/admin/post/settings_mail.php b/admin/post/settings_mail.php index 7954aafb..daf479e3 100644 --- a/admin/post/settings_mail.php +++ b/admin/post/settings_mail.php @@ -3,114 +3,87 @@ defined('FROM_POST_HANDLER') || die("Direct file access is not allowed"); if (isset($_POST['edit_mail_smtp_settings'])) { - + validateCSRFToken($_POST['csrf_token']); - $config_smtp_host = sanitizeInput($_POST['config_smtp_host']); - $config_smtp_port = intval($_POST['config_smtp_port']); - $config_smtp_encryption = sanitizeInput($_POST['config_smtp_encryption']); - $config_smtp_username = sanitizeInput($_POST['config_smtp_username']); - $config_smtp_password = sanitizeInput($_POST['config_smtp_password']); + $config_smtp_provider = sanitizeInput($_POST['config_smtp_provider'] ?? 'standard_smtp'); + $config_smtp_host = sanitizeInput($_POST['config_smtp_host']); + $config_smtp_port = intval($_POST['config_smtp_port'] ?? 0); + $config_smtp_encryption = sanitizeInput($_POST['config_smtp_encryption']); + $config_smtp_username = sanitizeInput($_POST['config_smtp_username']); + $config_smtp_password = sanitizeInput($_POST['config_smtp_password']); - mysqli_query($mysqli,"UPDATE settings SET config_smtp_host = '$config_smtp_host', config_smtp_port = $config_smtp_port, config_smtp_encryption = '$config_smtp_encryption', config_smtp_username = '$config_smtp_username', config_smtp_password = '$config_smtp_password' WHERE company_id = 1"); + // Shared OAuth fields + $config_mail_oauth_client_id = sanitizeInput($_POST['config_mail_oauth_client_id']); + $config_mail_oauth_client_secret = sanitizeInput($_POST['config_mail_oauth_client_secret']); + $config_mail_oauth_tenant_id = sanitizeInput($_POST['config_mail_oauth_tenant_id']); + $config_mail_oauth_refresh_token = sanitizeInput($_POST['config_mail_oauth_refresh_token']); + $config_mail_oauth_access_token = sanitizeInput($_POST['config_mail_oauth_access_token']); - logAction("Settings", "Edit", "$session_name edited SMTP mail settings"); + mysqli_query($mysqli, " + UPDATE settings SET + config_smtp_provider = " . ($config_smtp_provider === 'none' ? "NULL" : "'$config_smtp_provider'") . ", + config_smtp_host = '$config_smtp_host', + config_smtp_port = $config_smtp_port, + config_smtp_encryption = '$config_smtp_encryption', + config_smtp_username = '$config_smtp_username', + config_smtp_password = '$config_smtp_password', + config_mail_oauth_client_id = '$config_mail_oauth_client_id', + config_mail_oauth_client_secret = '$config_mail_oauth_client_secret', + config_mail_oauth_tenant_id = '$config_mail_oauth_tenant_id', + config_mail_oauth_refresh_token = '$config_mail_oauth_refresh_token', + config_mail_oauth_access_token = '$config_mail_oauth_access_token' + WHERE company_id = 1 + "); + logAction("Settings", "Edit", "$session_name edited SMTP settings"); + flash_alert("SMTP Mail Settings updated"); - + redirect(); } if (isset($_POST['edit_mail_imap_settings'])) { - + validateCSRFToken($_POST['csrf_token']); - // Provider ('' -> NULL allowed) - $config_imap_provider = sanitizeInput($_POST['config_imap_provider']); - $allowed_providers = ['standard_imap','google_oauth','microsoft_oauth']; - if ($config_imap_provider !== '' && !in_array($config_imap_provider, $allowed_providers, true)) { - $config_imap_provider = 'standard_imap'; // fallback - } + $config_imap_provider = sanitizeInput($_POST['config_imap_provider'] ?? 'standard_imap'); + $config_imap_host = sanitizeInput($_POST['config_imap_host']); + $config_imap_port = intval($_POST['config_imap_port'] ?? 0); + $config_imap_encryption = sanitizeInput($_POST['config_imap_encryption']); + $config_imap_username = sanitizeInput($_POST['config_imap_username']); + $config_imap_password = sanitizeInput($_POST['config_imap_password']); - // Standard IMAP fields (kept for all providers; OAuth still needs these endpoints) - $config_imap_host = sanitizeInput($_POST['config_imap_host']); - $config_imap_port = (int) sanitizeInput($_POST['config_imap_port']); - $config_imap_encryption = sanitizeInput($_POST['config_imap_encryption']); // '', 'tls', 'ssl' - $config_imap_username = sanitizeInput($_POST['config_imap_username']); - $config_imap_password = sanitizeInput($_POST['config_imap_password']); // ignored if OAuth selected + // Shared OAuth fields + $config_mail_oauth_client_id = sanitizeInput($_POST['config_mail_oauth_client_id']); + $config_mail_oauth_client_secret = sanitizeInput($_POST['config_mail_oauth_client_secret']); + $config_mail_oauth_tenant_id = sanitizeInput($_POST['config_mail_oauth_tenant_id']); + $config_mail_oauth_refresh_token = sanitizeInput($_POST['config_mail_oauth_refresh_token']); + $config_mail_oauth_access_token = sanitizeInput($_POST['config_mail_oauth_access_token']); - // Shared OAuth fields (may or may not be present in your form yet) - $config_mail_oauth_client_id = sanitizeInput($_POST['config_mail_oauth_client_id']); - $config_mail_oauth_client_secret = sanitizeInput($_POST['config_mail_oauth_client_secret']); - $config_mail_oauth_tenant_id = sanitizeInput($_POST['config_mail_oauth_tenant_id']); // M365 only; harmless to keep when Google - $config_mail_oauth_refresh_token = sanitizeInput($_POST['config_mail_oauth_refresh_token']); - $config_mail_oauth_access_token = sanitizeInput($_POST['config_mail_oauth_access_token']); // optional manual paste - $config_mail_oauth_access_token_expires_at = sanitizeInput($_POST['config_mail_oauth_access_token_expires_at']); // 'YYYY-mm-dd HH:ii:ss' optional - - // If provider is not OAuth, purge OAuth values on save - $is_oauth = ($config_imap_provider === 'google_oauth' || $config_imap_provider === 'microsoft_oauth'); - - // Detect refresh token change to invalidate access token cache - // (Relies on $config_mail_oauth_refresh_token loaded earlier with settings) - $refresh_changed = false; - if ($is_oauth) { - $prev_refresh = isset($config_mail_oauth_refresh_token_current) ? $config_mail_oauth_refresh_token_current : ($config_mail_oauth_refresh_token ?? ''); - // If you already load settings into $config_mail_oauth_refresh_token, use that: - if (isset($config_mail_oauth_refresh_token)) { - $prev_refresh = $config_mail_oauth_refresh_token; - } - $refresh_changed = ($config_mail_oauth_refresh_token !== '' && $config_mail_oauth_refresh_token !== $prev_refresh) - || ($config_mail_oauth_refresh_token === '' && $prev_refresh !== ''); - } - - // If OAuth refresh changed or provider just switched to non-OAuth, clear access token values - if (!$is_oauth || $refresh_changed) { - $config_mail_oauth_access_token = ''; - $config_mail_oauth_access_token_expires_at = ''; - } - - // Helper for NULL / quoted values - $q = fn($v) => ($v !== '' ? "'" . mysqli_real_escape_string($mysqli, $v) . "'" : "NULL"); - - // Build UPDATE with correct NULL handling - $sql = " + mysqli_query($mysqli, " UPDATE settings SET - config_imap_provider = " . ($config_imap_provider !== '' ? $q($config_imap_provider) : "NULL") . ", - config_imap_host = " . $q($config_imap_host) . ", - config_imap_port = " . (int)$config_imap_port . ", - config_imap_encryption = " . $q($config_imap_encryption) . ", - config_imap_username = " . $q($config_imap_username) . ", - config_imap_password = " . ($is_oauth ? "NULL" : $q($config_imap_password)) . ", - - -- Shared OAuth fields (kept even if provider is Google or Microsoft; NULL if not used) - config_mail_oauth_client_id = " . ($is_oauth ? $q($config_mail_oauth_client_id) : "NULL") . ", - config_mail_oauth_client_secret = " . ($is_oauth ? $q($config_mail_oauth_client_secret) : "NULL") . ", - config_mail_oauth_tenant_id = " . ($is_oauth ? $q($config_mail_oauth_tenant_id) : "NULL") . ", - config_mail_oauth_refresh_token = " . ($is_oauth ? $q($config_mail_oauth_refresh_token) : "NULL") . ", - config_mail_oauth_access_token = " . ($is_oauth ? $q($config_mail_oauth_access_token) : "NULL") . ", - config_mail_oauth_access_token_expires_at = " . ($is_oauth ? $q($config_mail_oauth_access_token_expires_at) : "NULL") . " + config_imap_provider = " . ($config_imap_provider === 'none' ? "NULL" : "'$config_imap_provider'") . ", + config_imap_host = '$config_imap_host', + config_imap_port = $config_imap_port, + config_imap_encryption = '$config_imap_encryption', + config_imap_username = '$config_imap_username', + config_imap_password = '$config_imap_password', + config_mail_oauth_client_id = '$config_mail_oauth_client_id', + config_mail_oauth_client_secret = '$config_mail_oauth_client_secret', + config_mail_oauth_tenant_id = '$config_mail_oauth_tenant_id', + config_mail_oauth_refresh_token = '$config_mail_oauth_refresh_token', + config_mail_oauth_access_token = '$config_mail_oauth_access_token' WHERE company_id = 1 - "; - - mysqli_query($mysqli, $sql); - - logAction("Settings", "Edit", "$session_name edited IMAP/OAuth mail settings"); - - // Friendly hint about what was saved - if ($config_imap_provider === '') { - flash_alert("IMAP monitoring disabled (provider not configured)."); - } elseif ($config_imap_provider === 'standard_imap') { - flash_alert("IMAP settings updated (standard username/password)."); - } elseif ($config_imap_provider === 'google_oauth') { - flash_alert("IMAP settings updated for Google Workspace (OAuth)."); - } elseif ($config_imap_provider === 'microsoft_oauth') { - flash_alert("IMAP settings updated for Microsoft 365 (OAuth)."); - } else { - flash_alert("IMAP settings updated."); - } + "); + logAction("Settings", "Edit", "$session_name edited IMAP settings"); + + flash_alert("IMAP Mail Settings updated"); + redirect(); + } if (isset($_POST['edit_mail_from_settings'])) { diff --git a/admin/settings_mail.php b/admin/settings_mail.php index ec18b8bb..1b6acea1 100644 --- a/admin/settings_mail.php +++ b/admin/settings_mail.php @@ -10,61 +10,87 @@ require_once "includes/inc_all_admin.php";