From 23e56d6e96c7ce4fccb2c7d2f4262b9ea8f66e87 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Thu, 14 Dec 2023 16:59:05 +0100 Subject: [PATCH] wait #6297 @2 --- app/Console/Kernel.php | 2 + .../CheckPublicationsHashAndCid.php | 1 - app/Jobs/Maintenance/CleanDownloads.php | 1 - app/Jobs/Maintenance/CleanFTP.php | 1 - app/Jobs/Maintenance/EmailServerRefresh.php | 16 ++++++ app/Models/TeamEmails.php | 52 ++++++++++++++++--- 6 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 app/Jobs/Maintenance/EmailServerRefresh.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 9dddd4407..2af0d6cf9 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -34,6 +34,8 @@ class Kernel extends \Cubist\Backpack\Console\Kernel $schedule->command('job:dispatchNow Maintenance\\\\CleanDownloads')->dailyAt('4:00'); $schedule->command('job:dispatchNow Maintenance\\\\CleanFTP')->dailyAt('4:30'); $schedule->command('job:dispatchNow Maintenance\\\\RemoveDuplicates')->monthly(); + // Email config + $schedule->command('job:dispatchNow Maintenance\\\\EmailServerRefresh')->twiceDailyAt(); // WS to Toolbox migration $schedule->command('ws:migrate --publications=v2 --documents=missing')->dailyAt('1:00'); $schedule->command('ws:migrate --publications=missing --documents=missing')->everyTwoHours(); diff --git a/app/Jobs/Maintenance/CheckPublicationsHashAndCid.php b/app/Jobs/Maintenance/CheckPublicationsHashAndCid.php index 606924bc7..1e61e73c0 100644 --- a/app/Jobs/Maintenance/CheckPublicationsHashAndCid.php +++ b/app/Jobs/Maintenance/CheckPublicationsHashAndCid.php @@ -8,7 +8,6 @@ use App\Models\ELearningPackage; use App\Models\FluidbookCollection; use App\Models\FluidbookPublication; use App\Models\Quiz; -use Illuminate\Support\Facades\Log; class CheckPublicationsHashAndCid extends Base { diff --git a/app/Jobs/Maintenance/CleanDownloads.php b/app/Jobs/Maintenance/CleanDownloads.php index 8a6d239a6..8c97c4e03 100644 --- a/app/Jobs/Maintenance/CleanDownloads.php +++ b/app/Jobs/Maintenance/CleanDownloads.php @@ -4,7 +4,6 @@ namespace App\Jobs\Maintenance; use App\Jobs\Base; use Cubist\Util\Files\Files; -use Illuminate\Support\Facades\Notification; class CleanDownloads extends Base { diff --git a/app/Jobs/Maintenance/CleanFTP.php b/app/Jobs/Maintenance/CleanFTP.php index 29cf98a85..513b58eef 100644 --- a/app/Jobs/Maintenance/CleanFTP.php +++ b/app/Jobs/Maintenance/CleanFTP.php @@ -4,7 +4,6 @@ namespace App\Jobs\Maintenance; use App\Jobs\Base; use App\Models\File; -use Cubist\Util\Files\Files; class CleanFTP extends Base { diff --git a/app/Jobs/Maintenance/EmailServerRefresh.php b/app/Jobs/Maintenance/EmailServerRefresh.php new file mode 100644 index 000000000..4117bcab1 --- /dev/null +++ b/app/Jobs/Maintenance/EmailServerRefresh.php @@ -0,0 +1,16 @@ +save(); + } +} diff --git a/app/Models/TeamEmails.php b/app/Models/TeamEmails.php index 01d324727..f62e6317f 100644 --- a/app/Models/TeamEmails.php +++ b/app/Models/TeamEmails.php @@ -6,8 +6,11 @@ use Cubist\Backpack\Magic\Fields\Code; use Cubist\Backpack\Magic\Fields\Table; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; use Cubist\Net\Util; +use Cubist\Util\Cache; use Cubist\Util\Files\Files; use Cubist\Util\Str; +use Cubist\Util\Text; +use Cubist\Util\Url; // __('!! Équipe') class TeamEmails extends CubistMagicAbstractModel @@ -35,9 +38,14 @@ class TeamEmails extends CubistMagicAbstractModel } - public function preSave() + public function onSaving(): bool { + $this->refreshServerSettings(); + return parent::onSaving(); + } + public function refreshServerSettings() + { $maindomain = 'cubedesigners.com'; $mailboxes = json_decode($this->mailboxes, true); @@ -45,6 +53,8 @@ class TeamEmails extends CubistMagicAbstractModel $a = json_decode($this->aliases, true); $ip = json_decode($this->ip_whitelist, true); $spam_whitelist = json_decode($this->spam_whitelist, true); + $spam_whitelist = self::getWhitelistFromClients($spam_whitelist); + $spam_blacklist = json_decode($this->spam_blacklist, true); $auth_whitelist = json_decode($this->auth_whitelist, true); @@ -54,7 +64,7 @@ class TeamEmails extends CubistMagicAbstractModel } $spam_wl = []; foreach ($spam_whitelist as $item) { - $spam_wl[] = 'whitelist_from ' . $item['email']; + $spam_wl[] = 'whitelist_from ' . $item; } $auth_wl = []; @@ -62,7 +72,6 @@ class TeamEmails extends CubistMagicAbstractModel $auth_wl[] = $item['domain']; } - $accounts = []; foreach ($mailboxes as $k => $m) { if (!isset($m['password'])) { @@ -72,7 +81,7 @@ class TeamEmails extends CubistMagicAbstractModel $email = $m['mailbox'] . '@' . $maindomain; $password = $m['password'] = trim($m['password']); if ($m['password'] === '') { - $user = User::where('email', $email)->first(); + $user = User::withoutGlobalScopes()->where('email', $email)->first(); if (null === $user) { $m['password'] = Str::random(12); } else { @@ -99,14 +108,17 @@ class TeamEmails extends CubistMagicAbstractModel Files::mkdir(storage_path('emailconfig')); file_put_contents(storage_path('emailconfig/postfix-accounts.cf'), implode("\n", $accountFile)); - $aliases = []; foreach ($a as $item) { $from = trim($item['from']); if (!isset($aliases[$from])) { $aliases[$from] = []; } - $aliases[$from] = array_merge($aliases[$from], explode(',', str_replace('@' . $maindomain, '', $item['dest']))); + $dest = str_replace('@' . $maindomain, '', $item['dest']); + if (!is_array($dest)) { + $dest = explode(',', $dest); + } + $aliases[$from] = array_merge($aliases[$from], $dest); } ksort($aliases); $savedAliases = []; @@ -180,4 +192,32 @@ class TeamEmails extends CubistMagicAbstractModel $content = str_replace("\r\n", "\n", $content); file_put_contents(storage_path('emailconfig/' . $filename), $content); } + + protected static function getWhitelistFromClients($additional = []) + { + $res = []; + foreach ($additional as $item) { + $res[] = $item['email']; + } + $freeproviders = \Illuminate\Support\Facades\Cache::rememberForever('freeemailproviders', function () { + return Text::splitLines(file_get_contents('https://gist.githubusercontent.com/drakodev/e85c1fd6d9ac8634786d6139e0066fa0/raw/1f345fa275fafda8196af754674fcf04d05b7fba/free-disposable-email-providers.txt')); + }); + foreach (User::withoutGlobalScopes()->where('created_ok', '1')->where('enabled', '1')->get() as $user) { + $email = trim(mb_strtolower($user->email)); + $e = explode('@', $email); + if (count($e) < 2) { + continue; + } + $domain = $e[1]; + if (in_array($domain, $freeproviders)) { + $res[] = $email; + } else { + $res[] = '*@' . $domain; + } + } + + $res = array_unique($res); + sort($res); + return $res; + } } -- 2.39.5