]> _ Git - fluidbook-toolbox.git/commitdiff
wait #6297 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 14 Dec 2023 15:59:05 +0000 (16:59 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 14 Dec 2023 15:59:05 +0000 (16:59 +0100)
app/Console/Kernel.php
app/Jobs/Maintenance/CheckPublicationsHashAndCid.php
app/Jobs/Maintenance/CleanDownloads.php
app/Jobs/Maintenance/CleanFTP.php
app/Jobs/Maintenance/EmailServerRefresh.php [new file with mode: 0644]
app/Models/TeamEmails.php

index 9dddd440741db6fa2a208003ed925d8d378f2728..2af0d6cf9738a7d5dc174c490fde0bdbc8c93981 100644 (file)
@@ -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();
index 606924bc7e7cba011e340e02bb4fe09214b8ce0e..1e61e73c092d8c73159f9f89e487ed32ae899e83 100644 (file)
@@ -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
 {
index 8a6d239a6900741c54890e6f39ebd0f43886327e..8c97c4e030a52d48d85be728326e816b61cac197 100644 (file)
@@ -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
 {
index 29cf98a852620eb42e1a3902d0228f06166065dd..513b58eef7c2672409b470bb25842c2d2374504e 100644 (file)
@@ -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 (file)
index 0000000..4117bca
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Jobs\Maintenance;
+
+use App\Jobs\Base;
+use App\Models\TeamEmails;
+
+class EmailServerRefresh extends Base
+{
+    public function handle()
+    {
+        /** @var TeamEmails $emails */
+        $emails = TeamEmails::findOrFail(1);
+        $emails->save();
+    }
+}
index 01d324727eb031f25ac41818abb60701702223b4..f62e6317f5ff411d29e883a0fa1f56d4b3b80896 100644 (file)
@@ -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;
+    }
 }