From: Vincent Vanwaelscappel Date: Fri, 21 Mar 2025 11:15:26 +0000 (+0100) Subject: wip #7408 @2 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=688f801766d36d70027218a11cf0bfded7f760a4;p=fluidbook-toolbox.git wip #7408 @2 --- diff --git a/app/Models/TeamEmails.php b/app/Models/TeamEmails.php index c2416aeaa..f09c493af 100644 --- a/app/Models/TeamEmails.php +++ b/app/Models/TeamEmails.php @@ -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 {