]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5265 @0.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 3 May 2022 08:03:42 +0000 (10:03 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 3 May 2022 08:03:42 +0000 (10:03 +0200)
.idea/workspace.xml
app/Models/CubedesignersEmails.php
composer.lock
resources/emailconfig/fail2ban-jail.cf [new file with mode: 0644]
resources/emailconfig/postfix-main.cf [new file with mode: 0644]

index a8cc5c65d78339569addb1bcb6adebd31277a723..d0e4cda46d3f3638fdef997ba6ad505fe321eb83 100644 (file)
     <select />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="5d2ecd5e-a05a-4f96-a195-fa6372618165" name="Default Changelist" comment="wip #5265 @2">
-      <change afterPath="$PROJECT_DIR$/storage/emailconfig/postfix-virtual.cf" afterDir="false" />
+    <list default="true" id="5d2ecd5e-a05a-4f96-a195-fa6372618165" name="Default Changelist" comment="wip #5265 @1">
+      <change afterPath="$PROJECT_DIR$/resources/emailconfig/fail2ban-jail.cf" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/resources/emailconfig/postfix-main.cf" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/app/Models/CubedesignersEmails.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Models/CubedesignersEmails.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/composer.lock" beforeDir="false" afterPath="$PROJECT_DIR$/composer.lock" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
       <workItem from="1650692345830" duration="3144000" />
       <workItem from="1651220888006" duration="13646000" />
       <workItem from="1651245559675" duration="70000" />
-      <workItem from="1651245652352" duration="3531000" />
-    </task>
-    <task id="LOCAL-00222" summary="wip #5045 @0.25">
-      <created>1642787576704</created>
-      <option name="number" value="00222" />
-      <option name="presentableId" value="LOCAL-00222" />
-      <option name="project" value="LOCAL" />
-      <updated>1642787576704</updated>
+      <workItem from="1651245652352" duration="3588000" />
+      <workItem from="1651398713511" duration="1801000" />
+      <workItem from="1651561264763" duration="3619000" />
     </task>
     <task id="LOCAL-00223" summary="wip #5045 @0.5">
       <created>1643367039977</created>
       <option name="project" value="LOCAL" />
       <updated>1651241026985</updated>
     </task>
-    <option name="localTasksCounter" value="271" />
+    <task id="LOCAL-00271" summary="wip #5265 @1">
+      <created>1651314767532</created>
+      <option name="number" value="00271" />
+      <option name="presentableId" value="LOCAL-00271" />
+      <option name="project" value="LOCAL" />
+      <updated>1651314767532</updated>
+    </task>
+    <option name="localTasksCounter" value="272" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
     <option name="CHECK_NEW_TODO" value="false" />
     <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
-    <MESSAGE value="wip #5041" />
     <MESSAGE value="wip #5041 @0.5" />
     <MESSAGE value="wip #5041 @1" />
     <MESSAGE value="wip #5093 @2" />
     <MESSAGE value="wait #5189 @0.25" />
     <MESSAGE value="wait #5264 @2" />
     <MESSAGE value="wip #5265 @2" />
-    <option name="LAST_COMMIT_MESSAGE" value="wip #5265 @2" />
+    <MESSAGE value="wip #5265 @1" />
+    <option name="LAST_COMMIT_MESSAGE" value="wip #5265 @1" />
   </component>
   <component name="XSLT-Support.FileAssociations.UIState">
     <expand />
index d8fb05cf75581f88fbda8f7207c5170ef9443185..1acaaf53aa28a8567d09455efcd8a14dbd701ec6 100644 (file)
@@ -2,8 +2,11 @@
 
 namespace App\Models;
 
+use Cubist\Backpack\Magic\Fields\Code;
 use Cubist\Backpack\Magic\Fields\Table;
+use Cubist\Backpack\Magic\Fields\Textarea;
 use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
+use Cubist\Net\Util;
 use Cubist\Util\Crypt;
 use Cubist\Util\Files\Files;
 use Cubist\Util\Str;
@@ -22,9 +25,12 @@ class CubedesignersEmails extends CubistMagicAbstractModel
     {
         parent::setFields();
 
-        $this->addField('domains', Table::class, __('Domaines'), ['entity_singular' => __('un domaine'), 'columns' => ['domaine' => __('Domaine')], 'translatable' => false,]);
-        $this->addField('mailboxes', Table::class, __('Boîtes mail'), ['entity_singular' => __('une boîte mail'), 'columns' => ['mailbox' => __('E-mail'), 'password' => __('Mot de passe')], 'translatable' => false, 'hint' => __('Laisser le mot de passe vide pour utiliser celui du compte "Toolbox"')]);
-        $this->addField('aliases', Table::class, __('Redirections'), ['entity_singular' => __('une redirection'), 'columns' => ['from' => __('Alias'), 'dest' => __('Destinations')], 'translatable' => false,]);
+        $this->addField('domains', Table::class, __('Domaines'), ['entity_singular' => __('un domaine'), 'columns' => ['domaine' => __('Domaine')], 'translatable' => false, 'tab' => __('Comptes et redirections')]);
+        $this->addField('mailboxes', Table::class, __('Boîtes mail'), ['entity_singular' => __('une boîte mail'), 'columns' => ['mailbox' => __('E-mail'), 'password' => __('Mot de passe')], 'translatable' => false, 'hint' => __('Laisser le mot de passe vide pour utiliser celui du compte "Toolbox"'), 'tab' => __('Comptes et redirections')]);
+        $this->addField('aliases', Table::class, __('Redirections'), ['entity_singular' => __('une redirection'), 'columns' => ['from' => __('Alias'), 'dest' => __('Destinations')], 'translatable' => false, 'tab' => __('Comptes et redirections')]);
+        $this->addField('ip_whitelist', Table::class, __('Liste blanche IP'), ['tab' => __('Paramètres avancés'), 'entity_singular' => __('une IP'), 'columns' => ['ip' => __('IP ou nom d\'hôte')], 'translatable' => false,]);
+        $this->addField('postgrey_whitelist', Code::class, __('Liste blanche postgrey'), ['translatable' => false, 'tab' => __('Paramètres avancés'), 'language' => 'properties']);
+
     }
 
     public function preSave()
@@ -33,6 +39,10 @@ class CubedesignersEmails extends CubistMagicAbstractModel
         $maindomain = 'cubedesigners.com';
 
         $mailboxes = json_decode($this->mailboxes, true);
+        $domains = json_decode($this->domains, true);
+        $a = json_decode($this->aliases, true);
+        $ip = json_decode($this->ip_whitelist, true);
+
         $accounts = [];
         foreach ($mailboxes as $k => $m) {
             if (!isset($m['password'])) {
@@ -71,9 +81,6 @@ class CubedesignersEmails extends CubistMagicAbstractModel
         }
         Files::mkdir(storage_path('emailconfig'));
         file_put_contents(storage_path('emailconfig/postfix-accounts.cf'), implode("\n", $accountFile));
-        //
-        $domains = json_decode($this->domains, true);
-        $a = json_decode($this->aliases, true);
 
 
         $aliases = [];
@@ -123,6 +130,33 @@ class CubedesignersEmails extends CubistMagicAbstractModel
         }
 
         file_put_contents(storage_path('emailconfig/postfix-virtual.cf'), implode("\n", $aliasesFile));
+
+        // Postgrey whitelist
+        file_put_contents(storage_path('emailconfig/whitelist_clients.local'), str_replace("\r\n", "\n", $this->postgrey_whitelist));
+
+        // IP Whitelist
+        $my_networks = [];
+        foreach ($ip as $item) {
+            $resolved = Util::resolve($item['ip']);
+            if ($resolved) {
+                $my_networks[] = $resolved;
+            }
+        }
+        $my_networks = array_unique($my_networks);
+
+        $this->_replaceInFile('postfix-main.cf',['my_networks'=> implode(', ', $my_networks)]);
+        $this->_replaceInFile('fail2ban-jail.cf',['ignoreip'=> implode(',', $my_networks)]);
+
         touch(storage_path('emailconfig/__UPDATED__'));
     }
+
+    protected function _replaceInFile($filename, $variables)
+    {
+        $content = file_get_contents(resource_path('emailconfig/' . $filename));
+        foreach ($variables as $k => $v) {
+            $content = str_replace('$' . $k, $v, $content);
+        }
+        $content = str_replace("\r\n", "\n", $content);
+        file_put_contents(storage_path('emailconfig/' . $filename), $content);
+    }
 }
index 4d13254f061ca311ff4da469fef450f67b4ce65e..6bce8e607e8be0f5556e570728d97e884d8dfef6 100644 (file)
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubedesigners_userdatabase.git",
-                "reference": "12b0f50ef76e91f80723b1c08c4b1d342d6f8f15"
+                "reference": "2824e18424135d6b8f0b513953f284658a028b18"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubedesigners/userdatabase/cubedesigners-userdatabase-dev-master-dcad2b.tar",
-                "reference": "12b0f50ef76e91f80723b1c08c4b1d342d6f8f15",
-                "shasum": "6a40b2da679e05c97882eec78990ef6092b15547"
+                "url": "https://composer.cubedesigners.com/dist/cubedesigners/userdatabase/cubedesigners-userdatabase-dev-master-812708.tar",
+                "reference": "2824e18424135d6b8f0b513953f284658a028b18",
+                "shasum": "2e701126458211eb0dfe7170e0e9747f1d08e06a"
             },
             "require": {
                 "cubist/cms-back": "dev-master"
                 }
             ],
             "description": "Cubedesigners common users database",
-            "time": "2022-02-28T15:49:33+00:00"
+            "time": "2022-04-29T09:25:56+00:00"
         },
         {
             "name": "cubist/azuretts",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubist_cms-back.git",
-                "reference": "98514570fafaaf9c1fd24e05fed8ffdb5ef022d1"
+                "reference": "d6ac96d0b09b770798c1cfd44135200360420356"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-master-7e7271.tar",
-                "reference": "98514570fafaaf9c1fd24e05fed8ffdb5ef022d1",
-                "shasum": "e33ad2961ddec346f263d0b618f49c939a6c3e23"
+                "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-master-5ba384.tar",
+                "reference": "d6ac96d0b09b770798c1cfd44135200360420356",
+                "shasum": "ee933ea3c77e6e3e58eebdd2506b5bc81348a0bc"
             },
             "require": {
                 "backpack/backupmanager": "^3.0",
                 }
             ],
             "description": "Cubist Backpack extension",
-            "time": "2022-04-19T10:23:43+00:00"
+            "time": "2022-04-30T11:23:11+00:00"
         },
         {
             "name": "cubist/cms-front",
                 "type": "tar",
                 "url": "https://composer.cubedesigners.com/dist/cubist/cms-front/cubist-cms-front-dev-master-fd0910.tar",
                 "reference": "170ea37eedfd3273c65188a57eba230a23caf208",
-                "shasum": "a6ae4b35b3aaf08dd06d39d709889d11997ea2fb"
+                "shasum": "97d92a7b8d892b3ebb6ae2efb9192dcaa8ed0038"
             },
             "require": {
                 "cubist/gtag": "dev-master",
                 "type": "tar",
                 "url": "https://composer.cubedesigners.com/dist/cubist/gtag/cubist-gtag-dev-master-f93bcf.tar",
                 "reference": "c8a9c4585bc335a0d2b26bcdca524627c8b2b37c",
-                "shasum": "aacfd1744a3bfe2c2f0b6b18f09a26c91b2d1fec"
+                "shasum": "7d7e997fc9470728d9389f68d8ccd4524feaf571"
             },
             "require": {
                 "laravel/framework": "~5.8|^6.0|^7.0|^8.0",
                 "type": "tar",
                 "url": "https://composer.cubedesigners.com/dist/cubist/laravel-backpack-dropzone-field/cubist-laravel-backpack-dropzone-field-dev-master-4e7eb3.tar",
                 "reference": "f9afa4a011b86450e813378e04543b1d7a56f95c",
-                "shasum": "b19b9bdd77859f7ed50e595b0e664f72e7156406"
+                "shasum": "f0d3975d38a4f5452039106a7cde64dac9245b4b"
             },
             "require": {
                 "backpack/crud": "^4.1.54",
                 "type": "tar",
                 "url": "https://composer.cubedesigners.com/dist/cubist/locale/cubist-locale-dev-master-7c0deb.tar",
                 "reference": "2d38aafdf39c770483f1638f0f5936a7e9beae81",
-                "shasum": "870c8ebbfa40b3a2cc148a5a538babbaa9a59cc1"
+                "shasum": "3b8a9cd7ff893dc1ef48a90ce5dc0ab83dc2fa34"
             },
             "require": {
                 "barryvdh/laravel-debugbar": "*",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubist_net.git",
-                "reference": "4e815d62a6f868789ecce6bdcb9f0a81ddffc64a"
+                "reference": "2df4884f5dd6c515bdcdc238884a852cc918a35b"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubist/net/cubist-net-dev-master-28d1c1.tar",
-                "reference": "4e815d62a6f868789ecce6bdcb9f0a81ddffc64a",
-                "shasum": "1343a65b42cf1ca2354ba7b8d5b1407e09ceeb16"
+                "url": "https://composer.cubedesigners.com/dist/cubist/net/cubist-net-dev-master-4d699f.tar",
+                "reference": "2df4884f5dd6c515bdcdc238884a852cc918a35b",
+                "shasum": "79d35212b27d002ac9befbb0e63177e79b846252"
             },
             "require": {
                 "ext-ssh2": "*",
                 }
             ],
             "description": "net cubist composer package",
-            "time": "2020-12-03T12:49:18+00:00"
+            "time": "2022-05-03T07:33:01+00:00"
         },
         {
             "name": "cubist/pdf",
                 "type": "tar",
                 "url": "https://composer.cubedesigners.com/dist/cubist/pdf/cubist-pdf-dev-master-9b081e.tar",
                 "reference": "9465884f94b7a6303fb48b809761042da2271e3c",
-                "shasum": "d45565edffffc7b58823f704c2db8827d20c9763"
+                "shasum": "a2856f0e539a32ab491e22bb3d6ceb5e4c81790e"
             },
             "require": {
                 "cubist/util": "dev-master",
                 "type": "tar",
                 "url": "https://composer.cubedesigners.com/dist/cubist/scorm/cubist-scorm-dev-master-f4bbb3.tar",
                 "reference": "89e09a4a45bffa8d89ebd7b1ca0a77ba4121dd01",
-                "shasum": "bb4d1cd1f259d18e7979a5b3027d8d6d741a03fd"
+                "shasum": "58ca5ee5898d00abb6bfdaa48dbd24efbfc2f958"
             },
             "require": {
                 "ext-mbstring": "*",
                 "type": "tar",
                 "url": "https://composer.cubedesigners.com/dist/cubist/util/cubist-util-dev-master-b0c165.tar",
                 "reference": "932cc70c7eae2c97fa672078bc4319fa8405bd64",
-                "shasum": "1aa9e45041867679daabf218518517fbb60685c4"
+                "shasum": "5b0ab612690b9c13db532a65d0ef7bcf675affee"
             },
             "require": {
                 "cubist/net": "dev-master",
         },
         {
             "name": "doctrine/dbal",
-            "version": "3.3.5",
+            "version": "3.3.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "719663b15983278227669c8595151586a2ff3327"
+                "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/719663b15983278227669c8595151586a2ff3327",
-                "reference": "719663b15983278227669c8595151586a2ff3327",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21",
+                "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21",
                 "shasum": ""
             },
             "require": {
                 "composer-runtime-api": "^2",
                 "doctrine/cache": "^1.11|^2.0",
-                "doctrine/deprecations": "^0.5.3",
+                "doctrine/deprecations": "^0.5.3|^1",
                 "doctrine/event-manager": "^1.0",
                 "php": "^7.3 || ^8.0",
                 "psr/cache": "^1|^2|^3",
             },
             "require-dev": {
                 "doctrine/coding-standard": "9.0.0",
-                "jetbrains/phpstorm-stubs": "2021.1",
-                "phpstan/phpstan": "1.5.3",
-                "phpstan/phpstan-strict-rules": "^1.1",
-                "phpunit/phpunit": "9.5.16",
+                "jetbrains/phpstorm-stubs": "2022.1",
+                "phpstan/phpstan": "1.6.3",
+                "phpstan/phpstan-strict-rules": "^1.2",
+                "phpunit/phpunit": "9.5.20",
                 "psalm/plugin-phpunit": "0.16.1",
                 "squizlabs/php_codesniffer": "3.6.2",
                 "symfony/cache": "^5.2|^6.0",
                 "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0",
-                "vimeo/psalm": "4.22.0"
+                "vimeo/psalm": "4.23.0"
             },
             "suggest": {
                 "symfony/console": "For helpful console commands such as SQL execution and import of files."
             ],
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.3.5"
+                "source": "https://github.com/doctrine/dbal/tree/3.3.6"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-04-05T09:50:18+00:00"
+            "time": "2022-05-02T17:21:01+00:00"
         },
         {
             "name": "doctrine/deprecations",
-            "version": "v0.5.3",
+            "version": "v1.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/deprecations.git",
-                "reference": "9504165960a1f83cc1480e2be1dd0a0478561314"
+                "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314",
-                "reference": "9504165960a1f83cc1480e2be1dd0a0478561314",
+                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
+                "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.1|^8.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^6.0|^7.0|^8.0",
-                "phpunit/phpunit": "^7.0|^8.0|^9.0",
-                "psr/log": "^1.0"
+                "doctrine/coding-standard": "^9",
+                "phpunit/phpunit": "^7.5|^8.5|^9.5",
+                "psr/log": "^1|^2|^3"
             },
             "suggest": {
                 "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
             "homepage": "https://www.doctrine-project.org/",
             "support": {
                 "issues": "https://github.com/doctrine/deprecations/issues",
-                "source": "https://github.com/doctrine/deprecations/tree/v0.5.3"
+                "source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
             },
-            "time": "2021-03-21T12:59:47+00:00"
+            "time": "2022-05-02T15:47:09+00:00"
         },
         {
             "name": "doctrine/event-manager",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/fluidbook_tools.git",
-                "reference": "8a63511222625005b3055ae2d09b16cc048c86a7"
+                "reference": "978a21686a9ec12e2bbd141c373f7b3e71e9e3e3"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/fluidbook/tools/fluidbook-tools-dev-master-e09ac8.tar",
-                "reference": "8a63511222625005b3055ae2d09b16cc048c86a7",
-                "shasum": "25dca88b497fb7bd405daf6b6fd9a36b25978eec"
+                "url": "https://composer.cubedesigners.com/dist/fluidbook/tools/fluidbook-tools-dev-master-44e744.tar",
+                "reference": "978a21686a9ec12e2bbd141c373f7b3e71e9e3e3",
+                "shasum": "c8202fdb33ccda7aa5426cf9dee516a2822f7e7f"
             },
             "require": {
                 "barryvdh/laravel-debugbar": "^3.6",
                 }
             ],
             "description": "Fluidbook Tools",
-            "time": "2022-04-19T10:55:38+00:00"
+            "time": "2022-04-19T12:37:24+00:00"
         },
         {
             "name": "genealabs/laravel-model-caching",
         },
         {
             "name": "laravel/framework",
-            "version": "v8.83.8",
+            "version": "v8.83.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "cf430301ad17656b3d918995bcdd0454c3c119b9"
+                "reference": "148ae59b7da6c3db6736374d357c5aaef9506fb7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/cf430301ad17656b3d918995bcdd0454c3c119b9",
-                "reference": "cf430301ad17656b3d918995bcdd0454c3c119b9",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/148ae59b7da6c3db6736374d357c5aaef9506fb7",
+                "reference": "148ae59b7da6c3db6736374d357c5aaef9506fb7",
                 "shasum": ""
             },
             "require": {
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2022-04-12T13:49:56+00:00"
+            "time": "2022-04-27T14:07:37+00:00"
         },
         {
             "name": "laravel/serializable-closure",
         },
         {
             "name": "league/glide",
-            "version": "1.7.0",
+            "version": "1.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/glide.git",
-                "reference": "ae5e26700573cb678919d28e425a8b87bc71c546"
+                "reference": "257e0c3612ef3dc57eb7f90cb741198151a45a5f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/glide/zipball/ae5e26700573cb678919d28e425a8b87bc71c546",
-                "reference": "ae5e26700573cb678919d28e425a8b87bc71c546",
+                "url": "https://api.github.com/repos/thephpleague/glide/zipball/257e0c3612ef3dc57eb7f90cb741198151a45a5f",
+                "reference": "257e0c3612ef3dc57eb7f90cb741198151a45a5f",
                 "shasum": ""
             },
             "require": {
                     "name": "Jonathan Reinink",
                     "email": "jonathan@reinink.ca",
                     "homepage": "http://reinink.ca"
+                },
+                {
+                    "name": "Titouan Galopin",
+                    "email": "galopintitouan@gmail.com",
+                    "homepage": "https://titouangalopin.com"
                 }
             ],
             "description": "Wonderfully easy on-demand image manipulation library with an HTTP based API.",
             ],
             "support": {
                 "issues": "https://github.com/thephpleague/glide/issues",
-                "source": "https://github.com/thephpleague/glide/tree/1.7.0"
+                "source": "https://github.com/thephpleague/glide/tree/1.7.1"
             },
-            "time": "2020-11-05T17:34:03+00:00"
+            "time": "2022-04-27T04:03:46+00:00"
         },
         {
             "name": "league/mime-type-detection",
         },
         {
             "name": "phpoffice/phpspreadsheet",
-            "version": "1.22.0",
+            "version": "1.23.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
-                "reference": "3a9e29b4f386a08a151a33578e80ef1747037a48"
+                "reference": "21e4cf62699eebf007db28775f7d1554e612ed9e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/3a9e29b4f386a08a151a33578e80ef1747037a48",
-                "reference": "3a9e29b4f386a08a151a33578e80ef1747037a48",
+                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/21e4cf62699eebf007db28775f7d1554e612ed9e",
+                "reference": "21e4cf62699eebf007db28775f7d1554e612ed9e",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.3 || ^8.0",
                 "psr/http-client": "^1.0",
                 "psr/http-factory": "^1.0",
-                "psr/simple-cache": "^1.0"
+                "psr/simple-cache": "^1.0 || ^2.0"
             },
             "require-dev": {
                 "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
             ],
             "support": {
                 "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
-                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.22.0"
+                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.23.0"
             },
-            "time": "2022-02-18T12:57:07+00:00"
+            "time": "2022-04-24T13:53:10+00:00"
         },
         {
             "name": "phpoption/phpoption",
         },
         {
             "name": "symfony/console",
-            "version": "v5.4.7",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6"
+                "reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/900275254f0a1a2afff1ab0e11abd5587a10e1d6",
-                "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6",
+                "url": "https://api.github.com/repos/symfony/console/zipball/ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b",
+                "reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b",
                 "shasum": ""
             },
             "require": {
                 "terminal"
             ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v5.4.7"
+                "source": "https://github.com/symfony/console/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-31T17:09:19+00:00"
+            "time": "2022-04-12T16:02:29+00:00"
         },
         {
             "name": "symfony/css-selector",
         },
         {
             "name": "symfony/debug",
-            "version": "v4.4.37",
+            "version": "v4.4.41",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "5de6c6e7f52b364840e53851c126be4d71e60470"
+                "reference": "6637e62480b60817b9a6984154a533e8e64c6bd5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/5de6c6e7f52b364840e53851c126be4d71e60470",
-                "reference": "5de6c6e7f52b364840e53851c126be4d71e60470",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/6637e62480b60817b9a6984154a533e8e64c6bd5",
+                "reference": "6637e62480b60817b9a6984154a533e8e64c6bd5",
                 "shasum": ""
             },
             "require": {
             "description": "Provides tools to ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/debug/tree/v4.4.37"
+                "source": "https://github.com/symfony/debug/tree/v4.4.41"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:41:36+00:00"
+            "time": "2022-04-12T15:19:55+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
         },
         {
             "name": "symfony/error-handler",
-            "version": "v5.4.7",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/error-handler.git",
-                "reference": "060bc01856a1846e3e4385261bc9ed11a1dd7b6a"
+                "reference": "c1fcde614dfe99d62a83b796a53b8bad358b266a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/060bc01856a1846e3e4385261bc9ed11a1dd7b6a",
-                "reference": "060bc01856a1846e3e4385261bc9ed11a1dd7b6a",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1fcde614dfe99d62a83b796a53b8bad358b266a",
+                "reference": "c1fcde614dfe99d62a83b796a53b8bad358b266a",
                 "shasum": ""
             },
             "require": {
             "description": "Provides tools to manage errors and ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v5.4.7"
+                "source": "https://github.com/symfony/error-handler/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-18T16:21:29+00:00"
+            "time": "2022-04-12T15:48:08+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
         },
         {
             "name": "symfony/finder",
-            "version": "v5.4.3",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
+                "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
-                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9",
+                "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9",
                 "shasum": ""
             },
             "require": {
             "description": "Finds files and directories via an intuitive fluent interface",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/finder/tree/v5.4.3"
+                "source": "https://github.com/symfony/finder/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-26T16:34:36+00:00"
+            "time": "2022-04-15T08:07:45+00:00"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v5.4.6",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465"
+                "reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465",
-                "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2",
+                "reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2",
                 "shasum": ""
             },
             "require": {
             "description": "Defines an object-oriented layer for the HTTP specification",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v5.4.6"
+                "source": "https://github.com/symfony/http-foundation/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-05T21:03:43+00:00"
+            "time": "2022-04-22T08:14:12+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v5.4.7",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "509243b9b3656db966284c45dffce9316c1ecc5c"
+                "reference": "cf7e61106abfc19b305ca0aedc41724ced89a02a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/509243b9b3656db966284c45dffce9316c1ecc5c",
-                "reference": "509243b9b3656db966284c45dffce9316c1ecc5c",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cf7e61106abfc19b305ca0aedc41724ced89a02a",
+                "reference": "cf7e61106abfc19b305ca0aedc41724ced89a02a",
                 "shasum": ""
             },
             "require": {
             "description": "Provides a structured process for converting a Request into a Response",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v5.4.7"
+                "source": "https://github.com/symfony/http-kernel/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-04-02T06:04:20+00:00"
+            "time": "2022-04-27T17:22:21+00:00"
         },
         {
             "name": "symfony/mime",
-            "version": "v5.4.7",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mime.git",
-                "reference": "92d27a34dea2e199fa9b687e3fff3a7d169b7b1c"
+                "reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/92d27a34dea2e199fa9b687e3fff3a7d169b7b1c",
-                "reference": "92d27a34dea2e199fa9b687e3fff3a7d169b7b1c",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/af49bc163ec3272f677bde3bc44c0d766c1fd662",
+                "reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662",
                 "shasum": ""
             },
             "require": {
                 "mime-type"
             ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v5.4.7"
+                "source": "https://github.com/symfony/mime/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-11T16:08:05+00:00"
+            "time": "2022-04-12T15:48:08+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
         },
         {
             "name": "symfony/process",
-            "version": "v5.4.7",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb"
+                "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/38a44b2517b470a436e1c944bf9b9ba3961137fb",
-                "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb",
+                "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3",
+                "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3",
                 "shasum": ""
             },
             "require": {
             "description": "Executes commands in sub-processes",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/process/tree/v5.4.7"
+                "source": "https://github.com/symfony/process/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-18T16:18:52+00:00"
+            "time": "2022-04-08T05:07:18+00:00"
         },
         {
             "name": "symfony/routing",
-            "version": "v5.4.3",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "44b29c7a94e867ccde1da604792f11a469958981"
+                "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981",
-                "reference": "44b29c7a94e867ccde1da604792f11a469958981",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7",
+                "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7",
                 "shasum": ""
             },
             "require": {
                 "url"
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v5.4.3"
+                "source": "https://github.com/symfony/routing/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:53:40+00:00"
+            "time": "2022-04-18T21:45:37+00:00"
         },
         {
             "name": "symfony/service-contracts",
         },
         {
             "name": "symfony/string",
-            "version": "v6.0.3",
+            "version": "v6.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/string.git",
-                "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2"
+                "reference": "ac0aa5c2282e0de624c175b68d13f2c8f2e2649d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2",
-                "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2",
+                "url": "https://api.github.com/repos/symfony/string/zipball/ac0aa5c2282e0de624c175b68d13f2c8f2e2649d",
+                "reference": "ac0aa5c2282e0de624c175b68d13f2c8f2e2649d",
                 "shasum": ""
             },
             "require": {
                 "utf8"
             ],
             "support": {
-                "source": "https://github.com/symfony/string/tree/v6.0.3"
+                "source": "https://github.com/symfony/string/tree/v6.0.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:55:41+00:00"
+            "time": "2022-04-22T08:18:02+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v6.0.7",
+            "version": "v6.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "b2792b39d74cf41ea3065f27fd2ddf0b556ac7a1"
+                "reference": "3d38cf8f8834148c4457681d539bc204de701501"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/b2792b39d74cf41ea3065f27fd2ddf0b556ac7a1",
-                "reference": "b2792b39d74cf41ea3065f27fd2ddf0b556ac7a1",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/3d38cf8f8834148c4457681d539bc204de701501",
+                "reference": "3d38cf8f8834148c4457681d539bc204de701501",
                 "shasum": ""
             },
             "require": {
             "description": "Provides tools to internationalize your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v6.0.7"
+                "source": "https://github.com/symfony/translation/tree/v6.0.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-31T17:18:25+00:00"
+            "time": "2022-04-22T08:18:02+00:00"
         },
         {
             "name": "symfony/translation-contracts",
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v5.4.6",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0"
+                "reference": "cdcadd343d31ad16fc5e006b0de81ea307435053"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0",
-                "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cdcadd343d31ad16fc5e006b0de81ea307435053",
+                "reference": "cdcadd343d31ad16fc5e006b0de81ea307435053",
                 "shasum": ""
             },
             "require": {
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v5.4.6"
+                "source": "https://github.com/symfony/var-dumper/tree/v5.4.8"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-02T12:42:23+00:00"
+            "time": "2022-04-26T13:19:20+00:00"
         },
         {
             "name": "tijsverkoyen/css-to-inline-styles",
diff --git a/resources/emailconfig/fail2ban-jail.cf b/resources/emailconfig/fail2ban-jail.cf
new file mode 100644 (file)
index 0000000..34f45a9
--- /dev/null
@@ -0,0 +1,37 @@
+[DEFAULT]
+
+# "bantime" is the number of seconds that a host is banned.
+bantime = 3h
+
+# A host is banned if it has generated "maxretry" during the last "findtime"
+# seconds.
+findtime = 10m
+
+# "maxretry" is the number of failures before a host get banned.
+maxretry = 3
+
+# "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
+# will not ban a host which matches an address in this list. Several addresses
+# can be defined using space (and/or comma) separator.
+ignoreip = $ignoreip
+
+# default ban action
+# nftables-multiport: block IP only on affected port
+# nftables-allports:  block IP on all ports
+banaction = nftables-allports
+
+[dovecot]
+enabled = true
+
+[postfix]
+enabled = true
+
+[postfix-sasl]
+enabled = true
+
+# This jail is used for manual bans.
+# To ban an IP address use: setup.sh fail2ban ban <IP>
+[custom]
+enabled = true
+bantime = 180d
+port = smtp,pop3,pop3s,imap,imaps,submission,submissions,sieve
diff --git a/resources/emailconfig/postfix-main.cf b/resources/emailconfig/postfix-main.cf
new file mode 100644 (file)
index 0000000..42c4528
--- /dev/null
@@ -0,0 +1,3 @@
+smtp_bind_address=54.37.95.146
+enable_original_recipient = yes
+my_networks = $my_networks