]> _ Git - fluidbook-toolbox.git/commitdiff
wip #7408 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 21 Mar 2025 11:15:26 +0000 (12:15 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 21 Mar 2025 11:15:26 +0000 (12:15 +0100)
app/Models/TeamEmails.php

index c2416aeaaefdfdfd52fd55622b8cdef3ba0a0456..f09c493afd045f957bc0f3ff957ddaf8fdad2cc7 100644 (file)
@@ -35,6 +35,8 @@ class TeamEmails extends CubistMagicAbstractModel
         $this->addField('spam_whitelist', Table::class, __('Liste blanche SPAM'), ['tab' => __('Listes blanches'), 'entity_singular' => __('un e-mail'), 'columns' => ['email' => __('E-mail')], 'translatable' => false, 'hint' => __('Les e-mails provenant de ces expéditeurs ne sont jamais considérés comme des spam (expressions régulières possibles)')]);
         $this->addField('auth_whitelist', Table::class, __('Liste blanche DMARC/DKIM'), ['tab' => __('Listes blanches'), 'entity_singular' => __('un domaine'), 'columns' => ['domain' => __('Domaine')], 'translatable' => false, 'hint' => __('Les e-mails provenant de ces domaines ne sont pas vérifiés par DMARC et DKIM')]);
         $this->addField('spam_blacklist', Table::class, __('Liste noire SPAM'), ['tab' => __('Listes noires'), 'entity_singular' => __('un e-mail'), 'columns' => ['email' => __('E-mail')], 'translatable' => false, 'hint' => __('Ces e-mails sont toujours considérés comme des spam (expressions régulières possibles)')]);
+        $this->addField('mailboxes_other', Table::class, __('Autres comptes'), ['tab' => __('Clients'), 'entity_singular' => __('un e-mail'), 'columns' => ['mailbox' => __('E-mail'), 'password' => __('Mot de passe')], 'translatable' => false]);
+        $this->addField('aliases_other', Table::class, __('Redirections'), ['entity_singular' => __('une redirection'), 'columns' => ['from' => __('Alias'), 'dest' => __('Destinations')], 'translatable' => false, 'tab' => __('Clients')]);
 
     }
 
@@ -49,8 +51,10 @@ class TeamEmails extends CubistMagicAbstractModel
         $maindomain = 'cubedesigners.com';
 
         $mailboxes = json_decode($this->mailboxes, true);
+        $mailboxes_other = json_decode($this->mailboxes_other, true);
         $domains = json_decode($this->domains, true);
         $a = json_decode($this->aliases, true);
+        $a_other = json_decode($this->aliases_other, true);
         $ip = json_decode($this->ip_whitelist, true);
         $spam_whitelist = json_decode($this->spam_whitelist, true);
         $spam_whitelist = self::getWhitelistFromClients($spam_whitelist);
@@ -95,12 +99,33 @@ class TeamEmails extends CubistMagicAbstractModel
             $accounts[$m['mailbox']] = $password;
             $mailboxes[$k] = $m;
         }
+
         usort($mailboxes, function ($a, $b) {
             return strcmp($a['mailbox'], $b['mailbox']);
         });
 
         $this->mailboxes = json_encode($mailboxes);
 
+        foreach ($mailboxes_other as $k => $m) {
+            $password = $m['password'] = trim($m['password']);
+            if ($m['password'] === '') {
+                $m['password'] = Str::random(12);
+            }
+            if ($m['password'] !== '' && !preg_match('/^\{([A-Z0-9-]+)\}\$\d/', $m['password'])) {
+                $p = $m['password'];
+                $m['password'] = $password = "{SHA512-CRYPT}" . crypt($p, "$6$" . substr(sha1(rand()), 0, 16));
+            }
+            $accounts[$m['mailbox']] = $password;
+            $mailboxes_other[$k] = $m;
+        }
+
+        usort($mailboxes_other, function ($a, $b) {
+            return strcmp($a['mailbox'], $b['mailbox']);
+        });
+
+        $this->mailboxes_other = json_encode($mailboxes_other);
+
+
         $accountFile = [];
         foreach ($accounts as $account => $password) {
             $accountFile[] = $account . '@' . $maindomain . '|' . $password;
@@ -127,10 +152,32 @@ class TeamEmails extends CubistMagicAbstractModel
         }
         $this->aliases = json_encode($savedAliases);
 
+        $aliases_other = [];
+        foreach ($a_other as $item) {
+            $from = trim($item['from']);
+            if (!isset($aliases_other[$from])) {
+                $aliases_other[$from] = [];
+            }
+            $dest = $item['dest'];
+            if (!is_array($dest)) {
+                $dest = explode(',', $dest);
+            }
+            $aliases_other[$from] = array_merge($aliases_other[$from], $dest);
+        }
+        ksort($aliases_other);
+        $savedAliases = [];
+        foreach ($aliases_other as $from => $dest) {
+            $savedAliases[] = ['from' => $from, 'dest' => $dest];
+        }
+        $this->aliases_other = json_encode($savedAliases);
+
         $allAliases = [];
         foreach ($domains as $d) {
             $domain = $d['domaine'];
             foreach ($accounts as $account => $password) {
+                if (stristr($account, '@')) {
+                    continue;
+                }
                 if (!isset($allAliases[$account . '@' . $domain])) {
                     $allAliases[$account . '@' . $domain] = [];
                 }
@@ -142,12 +189,22 @@ class TeamEmails extends CubistMagicAbstractModel
                 }
                 $allAliases[$from . '@' . $domain] = array_merge($allAliases[$from . '@' . $domain], $dest);
             }
+
             $allAliases['@' . $domain] = ['spam@' . $maindomain];
         }
+
+        foreach ($aliases_other as $from => $dest) {
+            if (!isset($allAliases[$from])) {
+                $allAliases[$from] = [];
+            }
+            $allAliases[$from] = array_merge($allAliases[$from], $dest);
+        }
+
         $aliasesFile = [];
         foreach ($allAliases as $from => $dest) {
             $domaineDest = [];
             foreach ($dest as $d) {
+                $d = trim($d);
                 if (stristr($d, '@')) {
                     $domaineDest[] = $d;
                 } else {