1<!DOCTYPE html> 2<html lang="en-gb"> 3<head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"> 7 <meta name="theme-color" content="#F5D76E"/> 8 <meta http-equiv="Referrer-Policy" content="same-origin"> 9 <title>mx300.hostspace.io - mail UI</title> 10 11 <link rel="stylesheet" href="/cache/3c8c8b3a1c6b3ce2aa532d167f918f5d056abec5.css"> 12
12<script> 13 // check if darkmode is preferred by OS or set by localStorage 14 if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches && localStorage.getItem("mailcow_theme") !== "light" || 15 localStorage.getItem("mailcow_theme") === "dark") { 16 var head = document.getElementsByTagName('head')[0]; 17 var link = document.createElement('link'); 18 link.id = 'dark-mode-theme'; 19 link.rel = 'stylesheet'; 20 link.type = 'text/css'; 21 link.href = '/css/themes/mailcow-darkmode.css'; 22 head.appendChild(link); 23 } 24 </script>
24 25 26 <link rel="shortcut icon" href="/favicon.png" type="image/png"> 27 <link rel="icon" href="/favicon.png" type="image/png"> 28</head> 29<body> 30<div class="overlay"></div> 31 32<form action="/" method="post" id="logout"><input type="hidden" name="logout"></form> 33 34 35<div class="container flex-grow-1 my-4"> 36<div class="row mb-4" style="margin-top: 60px"> 37 <div class="col-12 col-md-7 col-lg-6 col-xl-5 ms-auto me-auto"> 38 39 <div class="card"> 40 <div class="card-header d-flex align-items-center text-break"> 41 <i class="bi bi-person-fill me-2"></i> User Login 42 <div class="ms-auto form-check form-switch my-auto d-flex align-items-center"> 43 <label class="form-check-label"><i class="bi bi-moon-fill"></i></label> 44 <input class="form-check-input ms-2" type="checkbox" id="dark-mode-toggle"> 45 </div> 46 <div class="ms-4 d-grid d-sm-block"> 47 <button type="button" class="text-secondary btn p-0 border-0 bg-transparent ms-auto dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 48 <span class="flag-icon flag-icon-gb"></span> 49 </button> 50 <ul class="dropdown-menu ms-auto login"> 51 <li> 52 <a class="dropdown-item " href="?lang=bg-bg"> 53 <span class="flag-icon flag-icon-bg"></span>ÐÑлгаÑÑки (Bulgarian) 54 </a> 55 </li> 56 <li> 57 <a class="dropdown-item " href="?lang=cs-cz"> 58 <span class="flag-icon flag-icon-cz"></span>ÄeÅ¡tina (Czech) 59 </a> 60 </li> 61 <li> 62 <a class="dropdown-item " href="?lang=da-dk"> 63 <span class="flag-icon flag-icon-dk"></span>Dansk (Danish) 64 </a> 65 </li> 66 <li> 67 <a class="dropdown-item " href="?lang=de-de"> 68 <span class="flag-icon flag-icon-de"></span>Deutsch (German) 69 </a> 70 </li> 71 <li> 72 <a class="dropdown-item active" href="?lang=en-gb"> 73 <span class="flag-icon flag-icon-gb"></span>English 74 </a> 75 </li> 76 <li> 77 <a class="dropdown-item " href="?lang=es-es"> 78 <span class="flag-icon flag-icon-es"></span>Español (Spanish) 79 </a> 80 </li> 81 <li> 82 <a class="dropdown-item " href="?lang=fi-fi"> 83 <span class="flag-icon flag-icon-fi"></span>Suomi (Finish) 84 </a> 85 </li> 86 <li> 87 <a class="dropdown-item " href="?lang=fr-fr"> 88 <span class="flag-icon flag-icon-fr"></span>Français (French) 89 </a> 90 </li> 91 <li> 92 <a class="dropdown-item " href="?lang=gr-gr"> 93 <span class="flag-icon flag-icon-gr"></span>Îλληνικά (Greek) 94 </a> 95 </li> 96 <li> 97 <a class="dropdown-item " href="?lang=hu-hu"> 98 <span class="flag-icon flag-icon-hu"></span>Magyar (Hungarian) 99 </a> 100 </li> 101 <li> 102 <a class="dropdown-item " href="?lang=it-it"> 103 <span class="flag-icon flag-icon-it"></span>Italiano (Italian) 104 </a> 105 </li> 106 <li> 107 <a class="dropdown-item " href="?lang=ja-jp"> 108 <span class="flag-icon flag-icon-jp"></span>æ¥æ¬èª (Japanese) 109 </a> 110 </li> 111 <li> 112 <a class="dropdown-item " href="?lang=ko-kr"> 113 <span class="flag-icon flag-icon-kr"></span>íêµì´ (Korean) 114 </a> 115 </li> 116 <li> 117 <a class="dropdown-item " href="?lang=lv-lv">
118 <span class="flag-icon flag-icon-lv"></span>latvieÅ¡u (Latvian) 119 </a> 120 </li> 121 <li> 122 <a class="dropdown-item " href="?lang=lt-lt"> 123 <span class="flag-icon flag-icon-lt"></span>Lietuvių (Lithuanian) 124 </a> 125 </li> 126 <li> 127 <a class="dropdown-item " href="?lang=nb-no"> 128 <span class="flag-icon flag-icon-no"></span>Norsk (Norwegian) 129 </a> 130 </li> 131 <li> 132 <a class="dropdown-item " href="?lang=nl-nl"> 133 <span class="flag-icon flag-icon-nl"></span>Nederlands (Dutch) 134 </a> 135 </li> 136 <li> 137 <a class="dropdown-item " href="?lang=pl-pl"> 138 <span class="flag-icon flag-icon-pl"></span>JÄzyk Polski (Polish) 139 </a> 140 </li> 141 <li> 142 <a class="dropdown-item " href="?lang=pt-br"> 143 <span class="flag-icon flag-icon-br"></span>Português brasileiro (Brazilian Portuguese) 144 </a> 145 </li> 146 <li> 147 <a class="dropdown-item " href="?lang=pt-pt"> 148 <span class="flag-icon flag-icon-pt"></span>Português (Portuguese) 149 </a> 150 </li> 151 <li> 152 <a class="dropdown-item " href="?lang=ro-ro"> 153 <span class="flag-icon flag-icon-ro"></span>RomânÄ (Romanian) 154 </a> 155 </li> 156 <li> 157 <a class="dropdown-item " href="?lang=ru-ru"> 158 <span class="flag-icon flag-icon-ru"></span>PÑÑÑкий (Russian) 159 </a> 160 </li> 161 <li> 162 <a class="dropdown-item " href="?lang=si-si"> 163 <span class="flag-icon flag-icon-si"></span>SlovenÅ¡Äina (Slovenian) 164 </a> 165 </li> 166 <li> 167 <a class="dropdown-item " href="?lang=sk-sk"> 168 <span class="flag-icon flag-icon-sk"></span>SlovenÄina (Slovak) 169 </a> 170 </li> 171 <li> 172 <a class="dropdown-item " href="?lang=sv-se"> 173 <span class="flag-icon flag-icon-se"></span>Svenska (Swedish) 174 </a> 175 </li> 176 <li> 177 <a class="dropdown-item " href="?lang=tr-tr"> 178 <span class="flag-icon flag-icon-tr"></span>Türkçe (Turkish) 179 </a> 180 </li> 181 <li> 182 <a class="dropdown-item " href="?lang=uk-ua"> 183 <span class="flag-icon flag-icon-ua"></span>УкÑаÑнÑÑка (Ukrainian) 184 </a> 185 </li> 186 <li> 187 <a class="dropdown-item " href="?lang=uz-uz"> 188 <span class="flag-icon flag-icon-uz"></span>OÊ»zbekcha (Uzbek) 189 </a> 190 </li> 191 <li> 192 <a class="dropdown-item " href="?lang=vi-vn"> 193 <span class="flag-icon flag-icon-vn"></span>Tiếng Viá»t (Vietnamese) 194 </a> 195 </li> 196 <li> 197 <a class="dropdown-item " href="?lang=zh-cn"> 198 <span class="flag-icon flag-icon-cn"></span>ç®ä½ä¸æ (Simplified Chinese) 199 </a> 200 </li> 201 <li> 202 <a class="dropdown-item " href="?lang=zh-tw"> 203 <span class="flag-icon flag-icon-tw"></span>ç¹é«ä¸æ (Traditional Chinese) 204 </a> 205 </li> 206 </ul> 207 </div> 208 </div> 209 <div class="card-body"> 210 <div class="text-center mailcow-logo mb-4"> 211 <img class="main-logo" src="data:image/png;base64,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" alt="mailcow"> 212 <img class="main-logo-dark" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYYAAAB6CAYAAAC7p/QzAAAABHNCSVQICAgIfAhkiAAAIABJREFUeJztnXmcHUW1x7+/mkkgCZCwBdkJq6iAQJBFkhAICFkgE0hEcHvyRJGnoCgoIk
212Z9oiKg4kMFUQQXNIEsZGGVIYMRlAQEDcgiyL4FZEkmy8zUeX90R5Mwy73d1bfvJPX9fO4nMLfr1Om+1X2qq84iIpH65xBg2wBybgFeDyAnEqkXGoD9gIOcc3sAg83MSVoJPOO9fxBoAR4vU8lIJDiSpkmyvB/gXWWfSyQSiG2cc5dIerHC8f8A8Glgg0qENxareyQSiUQCMtA5d7aZnWlm/dO/vSTpRu/948BzwBvAVs65rcxsX+BwYC9JlwKfM7OvAL8BfClnEImEIL4xRCIAvEvS4+l49pKmAoeSLCd1x0bAJEkPrHY/zAQ2LlzjSKQoomGIRBgn6Y10LN8DHJhBhgM+ImlxKuevwE5BtYxEakU0DJH1nEMlrZBkzrnfAv1yyttF0t/S++JxYIsAOkYitSUahsh6zBBJL6dG4RJAgeRuImlhem/cStxvjvQ2omGIrKdI0l3p+J1Nz3sJq7MdsD/J8lGXx0h6Pr03vpxH0Uik5kTDEFlPOSEdu88Cm1TT0Dl3cTrme3JPPTzt43Vg8L/bV69rJBKJRAqmUdIFAGY2mcQFNQvWw/e3A7OATZxz5636YzQMkUgkUn8cA+wGPApclUNOj7EKZnZu+u/HSFxbo2GIRCKResM5NwlA0m+B9i4OGwacBnwQ2L6LYww4GPgfYBIwqJNj/gb8BRgAjMmudSRSQ+IeQ2R9Q9Kz6Zjdv5Ov+0m6KR3XT0t6U9Jykoc/8J89Bufc1ZLaJL262n7Fdp3InJwefzlEF6VIJFIdOwAfqLLNX4CbC9BlXWVLYBtgCXBvJ9+fCbzPzMYCc4D+kq6W9H0zuxH4x6oDzWxzM9saWAwcJ2mGc+4M7/0X1pLZkh6/D0TDEIlEquNjkr5aTQNJP/HeR8NQOUPSf5+jk81j59zbzcyAu9I/tZrZOcAC1toeMLP/IjEKADOBJ81sz076fCb9d2fWFhKJRCLdIWli2TqsB6xyTX2hsy+991cDHZLuc85dCAwlSav9HZLN6tVZstb/LyXdYF6L59J/B0I0DJFIpHL2At5RthLrAaveErp6Pt9uZgdKmm1mJ0u6R9ITwIdz9LkqeM5313EkEomsgXMuvi3UhtfSf7fu5ph7vfenm9m2ZjYUeE7SL0g8kLKwTfrvvyAahkgkUiFmdkLZOqwnrNo83oZOntGS7nLOXbPanxaa2QUkeZT2ytjnKk+lx+is00gkEumEvYHONi0j4XmNZM+gH528AUiab2YfBM4D3g7sL+l0oA2Yn6VD59zhqex7IRqGSCRSAXEZqbZI+j2Ac2782t95778k6QeSvijpIUkLgD3N7CRgUZb+zOy4VPZtefSORGpGDHArn/QBlOm6O+d+XLb+vZCR6fV7Ctiwi2P6kbzFbU91mVfX5sC0r1eAvhDfGCKRSM/sQ7JkEakddwALSR76p3dxzDLgIeBpoCNrR6sl6/shsBKiYYhEIj0Ql5FKwczsiwCSzgW2KqifJuBw4EXg4lV/jIYhEol0i5kdX7YO6ym3AXOBzSRdT8+1FaplD0k/BzCzrwJvrvoiGoZIJNId+xKXkUrDzD4CPAG81zn3U8KlMdpa0g3AIEm/Bi5f/ctoGCKRSJfEZaTSWWxmY4DXzexDkuYCm+aU+W5JdwO7kwTKnbr2AdEwRCKRLjGzaBjK5yEzO4okn9GRku4B3uLGWgH9gXMl/ZEkS+5tZnYk0Lr2gY0klYI6S6pUCdPpuojE2vQFRjjnDjWzdwG7kiSLGkiyu74MeErSI977B4Bmkh33emUgsB+wu3NuVzPbmSRd7hbAZqRuXynLgOUk4ebPS3rOe/8wSYGM+4CXa6j3LqneWbgfeKSK4/cDRjnn9k+vz2arffeMpMe89wtIPDDq+bcOQX+SZZmhzrndzGxHYKf07xsBfdLjXiPxMHkhdVV82nu/iCRz5sNUUJGrCg4Btu3m+61I7tNcmNkuQBYD8w86TztdBJuSjNf9nXNDzGx7YEc6/33aSe7jJ0l+nwdIPIj+Qc+lNLPyZzM7QNJ04D3pv/PN7AfATay2P9AJOwATJH2e9PeW9EPv/efo6vkt6dEcfuFHVHBC73TOXSHptQx9POWcu4DkladsBgMnOed+LunvknwI3/pUzt+cc5cCIyj+Le60HP7oUyqQPwg4R9I/qpS/CPhQZwLVe+MYhgBnSWpRUiwl7zm8nv4GJ5NmwcyDpOsDjeFCPs65H+X+BbrGAcOcc9+R9NdAOi92zv0GOInOK6WFoBE4VWkhn/SzXNKtzrnLgK8Apzvnvu6cu0rSwrV0nA+8t8delMMw9PDDDXHOTVGYB2iHpKlkzwOSlW2AMyTND3QelXyeAb5K8uZRBJkNg6Q3SYJqOqMf8GVJb+QYTxd0Jli9yzA44FhJNxc8Zt5M77/MaSq0fhqGrUiWU6qduFT7Weqc+wVwUAHnAEkZzjOUPPh7GmfLJM0ExlYsXTkMg6TneOsMV8CZqTKhL3a7c+7i9KIUhQOOkTRTUnuJN8ZS59y3yb7M1xV5DIPR+drmMEmP5z1n4OjOFFbvMQyjJN1b43HSkSZUe1u1ymr9MgybkZSvfL2Ec7kVOCDguazNVsBxwDnOue845y5zzn2LpB70CLqezHWN8hkGAw5dTdzGkubU4EI/QvibvBH4sHKE/hf0eZZqLH3P5DIMa2V1FHCewhjQNmDjzhRW/RuGLSRdV/I4eY2k2HvFaP0xDBMlvVwH5zOFNffZ6pbc69nOuQnpf24n6U5gdF6ZFbCbpLuAcaEEOucukHQ19eezvY2kG5xzF5EvH0oQzGwcycZ6H+fcLyV9gzB6/YXuN9DqlSMk/RUoOwhsoKTfpQ/T0sdJnTBI0g2SplDc0mzFmNlESQ8Aw8vWpSdyGwYzmwAcpMQvdp/8KlXMRkqiAYPckN77nxHW4yMkMrOz0vPtKqFWrRgEjHPO/crMTg4lVFJLKFk15MOSbiTDMk5RmNlpkqZR/jgpm12VuGUGmzwGYlslmVP/p2xFuiOEB8yO6ey9O7e3ougj6bfAkQFkPUwSfl7PHJeeb6nxJ5KuM7Oqli16wns/L6S8GvApJRWz+vR0YAkcmy75qWxFSuJd6TOpXutHNEr6IXBu2Yp0xboQ4NYo6XfAbnkFmdlFAfQpmuOcc98pW4nAGBkLjJTEiemNXbcP3jQw7fyy9SiBt0u6jTpYOuoJSd8Ezipbj85YFwwDwKbpOmLe2ds84E8B9CkUM/s8XXjw9FL+CrxSthIVspekq+gF946k84FhZetRQzZWEvhVVCbS4Ej6LkmG07qi7gd3FbwbODuvEDP7XgBdCkfS5YR3ZS2FXrS/MCCdgPSW9Xsn6Up6j755UJ06j/SEJP2MJBiybliXDAOSziMpbJGH6/hPMe56ZgfqfAOrUrz3vcIwOOe+Qe978OxO14Ve1iVOog5n3hWyqaQrylZidUKlcK0XNnTOne+9/3gOGR1m9kNJ3w+mVUFIOiuturS0bF1y8oeyFaiAPcwspCFeLOkn3vs5wJMkicwGAns65w5P0y0HWRKR9Hkz+zFrJUuT9KKZPd5N0/6E8bh6A1icoV2lbTaRdGEG+fXEKOD9wO/KVgTIH+BWh582ktl0HjaS9GoP/SyTdHfqN/5xEt/kfYGdgc1JknLtRBISf5qkGZJWhj5f4MNVnluuALcCPn/vSWHVQYCbpKmhzjnNp9NTLp1+wJcUJseSAZ/IcNpHBzrfQms+O+e+XgfjOMTnCepksr5OLSWlNDrn3pJfvEqWSPpJJ39fBkw3s5PMbLCZHeS9/xTwU6CFJFPq4yQbqf8C/gncDfzYzMab2Y5Kcj4FQ9IHQ8qrNeod+ws7EWiZQtI13vsPkmTp7I5lwLfMbBSdpEXO0O9H88qoUwaYWRFLZc9J+r6ZHW5mO5rZBma2lZnta2afA/5cQJ87kbw1lI+KfWNYkc6OPgS8k/+k8T2UJAPnHwvq93nyW96tlWQtNEkPkqzTbpJT5irOC3iuK6luE7rWbwxLlbx9dZpcjy4yqq6OSn5jcM59N9C1eJBkeaZaTgh0/tVmKe4NbwynBx6vK5xz36Sy/ELHSXoqcP+1SjPePSrGMPg0s+DWFahwuKS/hNaBJHlUXk4nSS0e3F/dOXdtwHM9qoquizYML6RxFiN4a7LDzUlSHX9d0oOp7jv2pLDKNQwKdfOT461D0qwA/Z9RZbd1bxgk3R1w7LaSrPVXwyBJC0LeQyST6HJReMPwBjChx47XpJ8C3fyrDcaLi7heARmiQHsOJGm6K6Uow/AGibtwpQXLRYXGO9TYIJthODjQ9XmEfEu3BwbQYVaVfda7YdhJ4VKbdwDvy6jHFpIeCXUvOee+FvIiZSH0HsPraam4aVW2W2ZmJwA3h1IkLYVXzzxBoPN1zuWO+s7JQjPbD7gQWFFhGyMJKKxrnHNjQsiRdB35cn
212H9GXg+pxrDqONo7QyMJdD5SLqM7PfjYjM7hUC51swsZDblTIQ0DGZmHyJ75LA3sw8DLwTSZ0/qPADMzG4PJGeXEHIycqOZjQAeK1GHwjCzg0PISd1Sc6mi/Bv1A6lg6a634JzruRJZZSz23n8pp4w7JV3T82EVsTddpKCvFcEMgxK//2pfVdfmJTML5Y/cAAwNJKso7gskZ3AgOdWyMH3T6+1xFF3hCDOGOgjzWz8XQMbeAWTUBWYWxDAoSYaYewx77y/Nrw2QOM4cGEhWZgVCYN77LwaSdSVJ8q8QNVP3JCk0H5oNgD1Ioqy3AbZ1zm1IMiNzJEapA1jivX+dZAngBeBRkqjqtlROqPxARVa064onzWwMAVwp65idCOOJ9goQYkmqEmeOnijz7TIkA8mf5QAA7/2VIeSQGP97CFOt7V3AbQHkZCJkMMXKQHLelHSzmeX253XO7eB9kGW/TYGjnHPvM7P9SQzOGgn7zKzThtJblkDbgUcl/dl7313UaTXU3DCkEdcv1rrfGrNTIDmDleRYykVXY6wanHPbBLonymbnQHKeI0m5HwRJvzez3IbBOTekzN+pLqLs1sZ7f4ekEIEeedZTG4Exkj5B4g7aEOLGTOXuaWZ7dmI0slJGxa4gF6PO2alsBQpgm7IVCEQow3B3IDkAeO/vCnFfm1mo88tEXRoGYGEIIWa2ecamoyR9j+KLx0fqmy3LViA0ZjawbB0CkfXeXgNJiwJN+Fbxt0BySq0nUa+G4eVAciqJXlydLZWkwK23coCRcqh2/PQG1pVzCrJ86r1/NYSc1Qglr4x9w39Tr4ahjE3Zd0i6hXJKlEbqEOdc/8CzyXpgXanNEOrB+a9AclbxOsk+Yt5nazQMnRBq8b3Su3oPSfPoBeUAIzVlXQoGW8W66lqclSISiYaYTZQ69uo1u2qoB3QlrpQbS7ohYJ+RdQTv/Tr3EJXUG4pQVUKo32azQHJWsQn5SwwDLAkgIzP1+sYQatOvR8PgnPummVWbdbISjCS18mskEdj9Kfn1MFI161yMhvc+GobVcM5tGtgtdNNAckqdlNSrYQgRIIKkV3pYI97ZzE4L0VfKQ2b2E6AZeJAkyG11tiTJnDhc0lgCnWekMEI5QdQTZRiGIlYmgvw2ZhY6k2koeaWOvbpcSpJ0WCBRT3b3pXPu0wQyjpK+bWZ7A5cCf+WtRgGSH/sO4Otm9h4zOzxE3+s6ktoDiar2FT9UAGI9UUZOqxBZDNYm1G9zSCA5ADjnguTWKnvJrx7fGAYBR4YQ5L1/qrvvzWxSiH4k/TJjEq5lIfpfDwi13lqtq2aom/P3ZnZOIFl56bGU6moEyWZgZkXs3/2DZLk27ybtYOAdJG/4uTGzw0LICZgVIRP1aBhCVkpb1M13OxIoCtR7Pzlj0yDF3tcDQhmGan/vZ0lcp/MGU21HoKDNGhNq4rIPyepEyMX8JSTGYde8gpxzp3jvz8qvEnsS7g0kVILNTNTbUtL2kj4XSFYH0F2ZvFDr+0+S8bXWObdfIB3Wdd4MJGePKo834A8B+t2NYpZTiibUBujmwP6BZP0bSXeGkGNmHyVAmut0aTqEm+kKYEEAOZmpJ8PQR9K1hHMf+xvdD+xQuUheytrQzEYH0mGdxnsf5I1B0hHVtjGzEA8fB5wYQE6tCRVoinPus6FkrcJ7H8QwAJs5576dU8ZQMzs1iDZJUablgWRlIpRhEPAFsofbD5R0IxCq8AaSuq3G5JwLtVyVVc4+FDCLWkd5I5CcEVSf/2pmiI7TZIz1NBGrhOcJ9IBKsyWHrqo4m/+ksM+FmX0SODpj84GSriJQMkszmx5CTh5CFuq5MK1reybVrZ03SVoAVD2b6w7vfU83dN9AXe1ChrccSd9h3YysLYJuvcuqwEm6giSmpFIeI5nB5eXdwGcCyOmOTYBPAscGkueBfwaS5ST9jsocSxqBj9JzkaSXCVezwEmaQfV1MwZKuolwCTc9kDtFe15Cz2C2k/Q9Sc9KuiUtaj2epGrUzsAOJH6+RzrnviHpAUnTCLCBtBZP00M63VDLEySD+BNVtvkc2QuPr4+EdN07WNKtwF6VNjCzq0N0LOlbQFMIWWvxHufcFel992NJFxCuFvIDIeSkDJJ0k3PuWhIDsWrfpS+JM8ho59z3JD0h6SrnXI/Lb2b2i4D6bSBpmnPuG1SWU+ooSQuBgwLqcCuJ00O5SHpUkq1LH6AS19H/DthnK3BYhZf805I6Ap9zNRG6pwW6xqGcBCqhj6Rlga9Zu6Q/pJOXj9H9TLa/pBdD9eucu4R8KVg2A97vnPu5EmPQ2e8Tav/qM0Xfr918HqpAvwZJjxXQ99POuQtJvIzeRmJoB5B4Hp0m6Y4izhmoi9gmSXqU8DP2MlluZjvQc+TgeyWF8DhZRZuki733P6Tz2rzvlvS/hCnxuDbLzKzS5ZHTJP0ob4dmdhZwSV45lSLpLsLOzNbmVjPrbg38S0pm4qFoBW4zs1uBR0iWbFpJHCYGkKRRGUCSYmE759yeZrYnyYNpCD2vZ99uZiGWZ/eV1J13X6GY2W70HJR3qqTLC1bFU/we0V1mFjTgLiv1GMeQC0k/MLNKwskXkmyshUpD3MfMvijpC8AiSQ+S5Enqn5b62zNQP+slkuabWWGGQdL9PaRPuQT4CNW7vHZFf+BYSRXtB2RI/304sB/du2xXwn0ktcp3yyknK2OAH/RwzM9I9lb2LVCPoo2CN7NavoV3S2/zkuiJV733F1Z47HKSnEahaQD2NrMTzeyTZvZholHIjff+xoLl/6WHQ1aYWdGbx0FxzgV50CjZNC4FSZW8YXeY2acIG0BXU5Q4RQQtM5qHdcowpDduxRWUAm9cRYrlTmBxgfLvr+CYWyT1NHutG1IX0R3yyvHeX06g9BgZGEFlwWd3p0u1vZGHvff1kjIFWLcMw/XAr6tsM51ysk1GqmelpCDeQZ2wnApzCHnvPw/MK0iP0DSm0bh5eabAa98Tfakwd5r3/mvALcWqE5wlZtZEuFidIKwrhuFvZvbfGdq1mdl5wbWJFIL3/jKKmbkuIinHWAntZjaeXpL7yMw+AQzMK8d7fz7hy2BWhHNubIWHejObCNxTpD4BWZnqW4n3VU1ZFwzDU2b2PpKN3iz8lkDRrZHCeULSz0ILldTT/sLavGZmRwMhffyLYmMgy6RpbV4ws7MDyKkaMzuGyp9Vb6S/TalJ6CpguZlNAG4qW5HO6O2G4R9pTYPO3EMrJk2i9XAQjaqjNR30LSX03Svx3p8LPBNYZrWGAWCxmb0XmBZSlyKQdCZhyk1emW6S1pq30XMU9Oq8ambDgRkF6ZOXxelkdk7ZinRFbzYMzWZ2IGH2CFbNAJ8IIKuaPscCN5nZ1Br229t5zcxOofKln0qoZOO5M5aY2UQz+zJJRsx6ZTsCBU557z8NzA0hqxqcc9XG/ywxs+PNbDKB8ikFosXM9qPOJ4O90TC0mdmXzWwUAbM/Av80s2GEyYvTEw+mRm2Vu+x0khTPkcq4xcxOJ8w1M7IbBkhcJC9Ib/b5AfQJzZ/SQLduk0pWwUoza5L020DyKiK936vFA19L41/y/MYhWGJmZ5jZSJKUPXVNSMMwk+IfbnPS8pkXUIzP8rNmNlzSdwk7I11Fu6TvmtlQkmjXf/dLHfkw9xKuSGNE8m5GP04Yj5AHzexQMzuSknPpk9wbt5nZsWZ2MHB7YPkrvfcfMLNPk0RrF8lTZnaOmY3LIeNeM9svrdhYay/ENklXpBHcl9JbYi0UJlfSqpM9VNLCwPlD2iVdDxxa40uzt6SZknyI66MkWWB3hcI/n0P+up4rqTv2kXRvjnO5vgCdBBzhnPuNwud46u6zEDiLZOmoVuzgnLtWYfN/dUhqBo4nUCrr1egLvF9Sc6B7u6vP08D5BKoSWXMU1jBA8hZytKTrJK3IKK9dSR6js0iyLpbJns65iyX9M8N5POucuwh4ewX97Jzj+q/PhgHSQjiSFmQ4j68UrNsgkoR3V0l6JuCDp0PSg865q0lSdWxd8Hn0xK7pfZL1HJdLmgucSrLZXAuGAGdIuk1Sa87fw6e/x0UkCTVDG7SaIoVJomdm1tmy1BbAMOfcwWm+oK1JbpRNSerJriRxM31W0j+9948AfyLxQw5VzjEk7wQOcs7ta2ZDSIxWv/TzOvCKpIe99w+QBEHdT3
212XLa8cCG2TQq4PKvWN2Icmhk5f7WXM5rF54O3CMpENJirwPYc1raiQJFu83s/nA1YSrOVAJbyO5/ns557ZPEz6+jSRp3gYk7qWtJL9pO8k+2mJJi733T5EklHuMpEJhqNTxIRGwO3Cgc+49ZrY7yf2+GUlesjdI7u1XJT2W3isPAH8lXCnRLDSS1FQ4wDm3K7BD+ttsTJLMcADJ77KSRP8XJD3pvX8S+AvJMyury3zdUbRhiETqgU1JHroiMQpF7B9FIusM61x21UikE0qJ2I1Eeitxlh+JRCKRNYiGIRKJRCJrEA1DJBKJRNYgGoZIJBKJrEE0DJFIJBJZg+iVFCmcCS03bW2+7WicGyazdxjaBmwjsDbQK8CjGAvBbp0+YuzdJIFndcHxLTP39tZwlLCDDO0ObEni+toKvIh4GNN85+zG64eNfbxcbf/DYc3NjZuqdSTyhxvaV0k8x+Ykk8HXgadBi5DNs462m2aMbKobH/zxzdMHob7HSAwHeyewPUlNiQ7gVcTj8rpPZre/woA77hg5sq7cj49tnrlrg3MHmrEt0taCFcKWI/eMl93XZ7PWv05956SyKuJVRIxjiBTG+OZZh8np88DRVBgJKnjC4EeNvvUnU0dOKiWAa+KiKX3bFvf/kNBnwPausJkh5svbJXuPWDhzsiaXkhOnaf7Ng9XWfqbJnwIaXGGz5YZNk+PC6cPGlZZsbnzznHerwc7GaCIJhquEFxE/a8R9f+rw0S8XqV93HD9v1m4enQqcSM8pSd4w2UyMX80YMa4uK85FwxAJzvF3zt7Ze/s/0DE5xLwo0xemHTbml8EUq4Dx82Yd5dBlluue0D2S/+S04ePuDadZ9xzW3Ny4aUPrZ2X2VUuidLNgMq5uM/vCrJHjiqyvvQYTW+Zu2W52EdiHSIIQs/AmZpMbX1r2g6mTJnWE1K87JjTP3c4a/IUYJ5JJd7tbpnOnHTa2uedja0c0DJGgNN0xeyLiSmCTQCKnNPrWU4p+e0gfrN/B7LNkfzitThvSOdOHj/leAFndcuwfZm7T0NHwW2BYIJHP4u3E6SPH/SGQvC6ZMG/OcMOuJViyOc1r9Jw4deSYF8LI65qmebM/Jrg0hyFehQkua+jTevbUQyYtC6JcTqJhiASjqWXOZzG7mDAP1n9jsKDD2zFFzWI/2ty84etu6e9IclUFxeBHM4aP+Z+i9k3SJYxbgJ0Ci15h0skzho8pIvssABNaZp1gpl+RLT9YlwieaPcdR90w8rjHQspdxcQpUxo6tur/I0sS/gWj6HFeDfFhHglCU8usT2J2CYGNAonAoX2cZh4zd27QBwgkN/kbbsmvKMAoAAg+NaFl9leLkD3x97O29dKthDcKABvI7NqmlhtGFCCbCS2zx5jpWgIbBQCDIY2u4ZZxzbO2CC17sk12HYP7XxnaKEAyzhudWprm31zp3lBhRMMQyU1Tyw0jMP1fkX0YHLLhAH95aLkdgwd8w9DxoeWujqHzm1pmnxhS5qkLFvRpb+Q6rNC09H0wd/3xd87eOaTQ4+fN2s2M31CgV6TBkIYGXXtYc3PQPh6Yd8D/mvhoSJlrsSftbdedumBBiBrdmYmGIZKLY+6euwnmfk1t8s9/pGne7I+EEnbcHbOHmeycUPK6QTKuHDfvhiGhBL689Pmvgw4KJa8bNveeayfb5CDPiolTpjR4dC3h9qC6RMaoQVp6fih541tmHVGj8TLs5aUvXFCDfrokGoZILjZc4b8CbFvDLr878dZbB+YVMtkmOycuo0b3gMGARlyQjeimO+fsDqploaT33D9v/1NCCGob3P9UYP8QsipB4uzxv5+7S145ExdN6SvTldTumXlmU/Psd9Wor7cQDUMkM023TdtccFqNu92yo8+K0/MKuX/e0OOBvQLoUw3HHd88Z2huKd7OJSlRWTvkvjJx0ZRcfZ66YEEfOWox416dDVyj/1JeIR0v9/9vitnL6YqVaqjJG2GnRMMQyU6fDT4ewFWvakycPnHKlHxLV1Ju45IF7yyXIZ34x5s2IwmiqjG2ffvi/mPzSHh5yQvjC94T6RSDDzXdNm3z7AJM5jg7oErd0Yp0SUdbx87Tho+5skZ9voVoGCJ5+EBJ/W7TtmW/zD77E5rnbgc2PKRCVXBCnpl3W1v7CRTgyVMRlvP3Vmnjpa/16Ts+a+MJLXOH1cCgtYJdKjXuOn34mLNuGHXciwX31y3RMEQykbjUWa2XYv6NnEZlbesbbBSwfxxbAAAHzUlEQVQFuNVWyCbtL/V7T9bGMo4MqUx1nTMq65ta2m5kYI0qRkbm8WIwIaQuq6OkzvVFNPYZMn3EuDOmDT/6+aL6qoZGM/sKNfAQiKxbqKPtACvv4QqQ4+Hqh5aqeoM7AMgWVSzy71FkZ9CKbTbeFXi42obtW/XfHRgUXqUKUfbxAv7A0ONFsNSwn6E+355eJ8ZgdRqB35atRKT3kWQaLTUJ6m7Zm2r3cGpkwMjUfxLg53cIrU41NJjfjQyGQbBbySlzd5y4aErfarOaTrbJ7v4WVZpIsRKWAJc1yF1cZtK/nohptyOZkPnNrNQXBrJvJsJmwbTIhGXqf6N+tml72cu/3jJddzPbHJU6XhraXxs4CHipmkZ/+tN7NtoQ3z9A/0vAft7o3bdqkccpL9EwRDJhxgbl2oWK0zJ3RjmbtylC/TI17OP70lHuRRfKdN0l19fKfcOk0VZWrftGSzs2bm/Mfc2vpm3lWdNHTXglr6BaETefI5kwuaUlq/Bm1obphl9pGPZGlnbty9vKvuaQ8bp7Wem6t5qq1r19w75tAbpusr5986SgrznRMEQyIfPPlaxC5v4tR9sgmGXqf58jHvgXUGpaZlPHs1nayVzZ46X1gEMXvF5to30OuWsxkLdC3CYyftnUMnvK+Obp5W3AV0E0DJFsGA+V2r9y9f9gMD2ykUn3tCpc1Ru/IelYaX/P0k5y5Y4X+HuWqnqTNdkLng6igTFRrs/CpjtmHRxEXoFEwxDJxPJlDfdQ4uxVnjszN/YqvABNd3SYz647Nj+cJtV2bQ9nDbyaNvzo5xH/CK1SpRi0ZG5rhLzmOyO1NM2b/e2yM6h2RzQMkUzcOHr0Csx+X1L35jvc3KyN2zf2LeTYo8iF2cO5Csh4NzugNtXh3Jxc7U2l6S5T5vFi4o6AqkDi9HPOy0tfaB7ffONOgWUHIRqGSGbkuLqcjpk/44jRmWefs4aOaxVMCalSpQhdk6f9v+h/GyXtkVgHuepvO1TOeIFnGl9aenvWxn1WbnAd0BpQn1W8V67j/vHzZgcv+pOXaBgimWl4Ydl04NFa9+u9XZhXhsHFQNVrzjlZ0mZ2RR4Bd4wc2Y70/VAKVY5umTFyzF/ySLh+xOj7gJq/ZUpcPHXSpI6s7aceeeTrSL8LqdNqbCK4vGne7F+FSCcfimgYIpmZOmlSh6HzatztnTNHjM29JDF9xNiHZOSavVeLjG+FqOfb3t9fhngyhE4V0mHOzg0hyGTnUluD/HhDY2vuyn/q0PkU89awipPb+q54YMK8OWUld1yDaBgiuZgxYswUIN/ac4UIlroGfxpSkEipBufOBmqTxdK4f1mruziEqHQp7HRqlJPE4Pszho1dGELWjOHj/mzGZSFkVUAHpk9OPWRSbieJaSNHPwMEKbTUFYIdDLu9qWX210KXJK2WaBgiuWn39lGDpwruxrz0kesPPXZRKIFTh49+2WQnk99PvQfsJXXouBtHj14RSuK04WPnkCyHFc2tr/kBXwwpcEWr+4LBgpAyO0X60vTDxtwaStyWA972NcEfQ8nrggaMz27CGzsV3E+3RMMQyc2skeMWm9wxQO5lki4xJs8YPub60GJnDB/3e5M+TnHLGyu86YRpR4wJvvSzz/AF5xiFrX0DPLLS8f47Ro4MajhvHD16hW/rGCvI7p3VI7pm+vAx3w0p8YqhQ9sa2m0SkCnIr0I6BB/M5bkWgGgYIkGYOXz0g9buDiJ88FgH8MXph439emC5/2bG8DG/cNg4IFOqim5YLHTUzMPG5ohb6JrJmuz7vLj0ZOA7BYif39HWMXzOsLH/KkA2N4w67kVrW3kQ0Bxeul3a+OLSj4WXC1OPGPes8zYKeKYA8e2ID04bMfaGAmRXRbkZuSLrHMfcPXeTDZd3/BopVxnIlMXO84HrR469LYCsHjlu3py9HDYD2Dm/NN0jrwnp2nThjG+Z81GZ/QjIlqBvDfSTLQds9Zkrhg4NkSeoWyYumtK3Y3H/HxqEcNlslemT0w4bk8utthKa5t88mPa2X0Gwwkkvm+wDM4aPKys2aA2iYYgUwoR5c04y7JtkK6DeJriqzduXQ3jxVMO4BbP6Ny7VucAZwEYZRLxs2Ddf8xtdFnoJpieOv3P2zt5zETCeLPe2cb85O6uMh1PTHXOORFwElqX2gWFcb9bwhRkjj/lnaN26YuKUKQ1tg/udJenLZC92ZsA1HW0d55RdznN1omGIFMapCxb0Wbz0xYkGHwEbCfSUAuBx4Fq166dFrMlXw7jmWVs0Op0COqmCh5UH/mTGL1tX9Lnmlve9r9RMosfNm7OXzD4uMQnYqofDW4XdiHTVtGFj5oby+MqEmSbcOWe0GR8DjgZ6qoPwPNhUvH46feTYv9VAw0459raZWzX0afgs2H+BBlfYbAVwnTm+F8rjKyTRMERqwlE33zygf7+VBzmvd5jYFhiE0SrHvzB7xLc3LMgTzVwkE1pu2hrfdpDJ7WHYFg42RnoNs5eEPeT69Ll76iFHv1q2nm/BTE13zHmnpH3N2a6YDTLU6EyvI5407xc1Dl7252qrmtWCY+bO3WDDfh0HyLl3YuzoZQOFtSO9ZvBog/P3Xf/ecQ+WasjW4pi5czfYYEDHCBmjEPsLDbH/lDNdLnjCxCLzau4wf2ut34ar4f8BDoZjqquGeKMAAAAASUVORK5CYII=" alt="mailcow-logo-dark"> 213 </div> 214 <legend>mx300.hostspace.io - mail UI</legend><hr /> 215 <form method="post" autofill="off"> 216 <div class="d-flex mt-3"> 217 <label class="visually-hidden" for="login_user">Username</label> 218 <div class="input-group"> 219 <div class="input-group-text">
219<i class="bi bi-person-fill"></i></div> 220 <input name="login_user" autocorrect="off" autocapitalize="none" type="text" id="login_user" class="form-control" placeholder="Email address" required="" autofocus="" autocomplete="username"> 221 </div> 222 </div> 223 <div class="d-flex mt-3"> 224 <label class="visually-hidden" for="pass_user">Password</label> 225 <div class="input-group"> 226 <div class="input-group-text"><i class="bi bi-lock-fill"></i></div> 227 <input name="pass_user" type="password" id="pass_user" class="form-control" placeholder="Password" required="" autocomplete="current-password"> 228 </div> 229 </div> 230 <div class="mt-2 text-muted" style="font-size: 0.9rem;"> 231 <a href="/reset-password">> Forgot Password?</a> 232 </div> 233 <div class="d-flex justify-content-between mt-4" style="position: relative"> 234 <button type="submit" class="btn btn-xs-lg btn-success w-100 mt-2 mx-auto" style="max-width: 400px;" value="Login">Login</button> 235 </div> 236 </form> 237 <div class="hr-title"><strong>
237or login with</strong></div> 238 <div class="d-flex flex-column align-items-center"> 239 <a class="btn btn-xs-lg btn-secondary w-100 mt-2" style="max-width: 400px;" href="/?iam_sso=1"><i class="bi bi-cloud-arrow-up-fill"></i> Single Sign-On</a> 240 <a class="btn btn-xs-lg btn-secondary w-100 mt-2" style="max-width: 400px;" href="#" id="fido2-login"><i class="bi bi-shield-fill-check"></i> FIDO2/WebAuthn Login</a> 241 </div> 242 <div class="my-4" id="fido2-alerts"></div> 243 </div> 244 </div> 245 246 <p class="text-center mt-3 text-muted" style="font-size: 0.9rem;"> 247 Not the correct login?<br> 248 <a href="/admin">Log in as admin</a> | <a href="/domainadmin">Log in as domain admin</a> </p> 249 </div> 250</div> 251</div> 252 253<div id="ConfirmDeleteModal" class="modal fade" role="dialog"> 254 <div class="modal-dialog"> 255 <div class="modal-content"> 256 <div class="modal-header"> 257 <h3 class="modal-title">Confirm deletion</h3> 258 <button type="button" class="btn-close" data-bs-dismiss="modal"></button> 259 </div> 260 <div class="modal-body"> 261 <p id="DeleteText">Please confirm your changes to the following object id</p> 262 <ul id="ItemsToDelete"></ul> 263 <hr> 264 <button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-danger" id="IsConfirmed">Delete now</button> 265 <button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary" id="isCanceled">Cancel</button> 266 </div> 267 </div> 268 </div> 269</div> 270<!-- version modal --> 271<div class="modal fade" id="showVersionModal" tabindex="-1" role="dialog" aria-hidden="true"> 272 <div class="modal-dialog modal-lg"> 273 <div class="modal-content"> 274 <div class="modal-header"> 275 <h5 class="modal-title"></h5> 276 <button type="button" class="btn-close" data-bs-dismiss="modal"></button> 277 </div> 278 <div class="modal-body d-flex flex-column mt-2 p-4"> 279 <div class="spinner-border mx-auto" role="status"> 280 <span class="visually-hidden">Loading...</span> 281 </div> 282 </div> 283 </div> 284 </div> 285</div><!-- version modal --> 286
287<script src="/cache/f75fc18841220092813e9074629be2caf3f65b5a.js"></script>
vendor: 1 bytes, line 287
287
288<script> 289 var lang_footer = {"cancel":"Cancel","confirm_delete":"Confirm deletion","delete_now":"Delete now","delete_these_items":"Please confirm your changes to the following object id","hibp_check":"Check against haveibeenpwned.com","hibp_nok":"Matched! This is a potentially dangerous password!","hibp_ok":"No match found.","loading":"Please wait...","nothing_selected":"Nothing selected","restart_container":"Restart container","restart_container_info":"<b>Important:<\/b> A graceful restart may take a while to complete, please wait for it to finish.","restart_now":"Restart now","restarting_container":"Restarting container, this may take a while"}; 290 var lang_acl = {"alias_domains":"Add alias domains","app_passwds":"Manage app passwords","bcc_maps":"BCC maps","delimiter_action":"Delimiter action","domain_desc":"Change domain description","domain_relayhost":"Change relayhost for a domain","eas_reset":"Reset EAS devices","extend_sender_acl":"Allow to extend sender ACL by external addresses","filters":"Filters","login_as":"Login as mailbox user","mailbox_relayhost":"Change relayhost for a mailbox","prohibited":"Prohibited by ACL","protocol_access":"Change protocol access","pushover":"Pushover","pw_reset":"Allow to reset mailcow user password","quarantine":"Quarantine actions","quarantine_attachments":"Quarantine attachments","quarantine_category":"Change quarantine notification category","quarantine_notification":"Change quarantine notifications","ratelimit":"Rate limit","recipient_maps":"Recipient maps","smtp_ip_access":"Change allowed hosts for SMTP","sogo_access":"Allow management of SOGo access","sogo_profile_reset":"Reset SOGo profile","spam_alias":"Temporary aliases","spam_policy":"Denylist\/Allowlist","spam_score":"Spam score","syncjobs":"Sync jobs","tls_policy":"TLS policy","unlimited_quota":"Unlimited quota for mailboxes"}; 291 var lang_tfa = {"authenticators":"Authenticators","api_register":"%s uses the Yubico Cloud API. Please get an API key for your key <a href=\"https:\/\/upgrade.yubico.com\/getapikey\/\" target=\"_blank\">here<\/a>","confirm":"Confirm","confirm_totp_token":"Please confirm your changes by entering the generated token","delete_tfa":"Disable TFA","disable_tfa":"Disable TFA until next successful login","force_tfa":"Force 2FA enrollment at login","force_tfa_info":"The user will be required to set up two-factor authentication before accessing the panel.","setup_title":"Two-Factor Authentication Required","setup_required":"Your account requires two-factor authentication. Please set up a 2FA method to continue.","cancel_setup":"Cancel and log out","enter_qr_code":"Your TOTP code if your device cannot scan QR codes","error_code":"Error code","init_webauthn":"Initializing, please wait...","key_id":"An identifier for your Device","key_id_totp":"An identifier for your key","none":"Deactivate","reload_retry":"- (reload browser if the error persists)","scan_qr_code":"Please scan the following code with your authenticator app or enter the code manually.","select":"Please select","set_tfa":"Set two-factor authentication method","start_webauthn_validation":"Start validation","tfa":"Two-factor authentication","tfa_token_invalid":"TFA token invalid","totp":"Time-based OTP (Google Authenticator, Authy, etc.)","u2f_deprecated":"It seems that your Key was registered using the deprecated U2F method. We will deactivate Two-Factor-Authenticaiton for you and delete your Key.","u2f_deprecated_important":"Please register your Key in the admin panel with the new WebAuthn method.","webauthn":"WebAuthn authentication","waiting_usb_auth":"<i>Waiting for USB device...<\/i><br><br>Please tap the button on your USB device now.","waiting_usb_register":"<i>Waiting for USB device...<\/i><br><br>Please enter your password above and confirm your registration by tapping the button on your USB device.","yubi_otp":"Yubico OTP authentication"}; 292 var lang_fido2 = {"confirm":"Confirm","fido2_auth":"Login with FIDO2","fido2_success":"Device successfully registered","fido2_validation_failed":"Validation failed","fn":"Friendly name","known_ids":"Known IDs","none":"Disabled","register_status":"Registration status","rename":"Rename","set_fido2":"Register FIDO2 device","set_fido2_touchid":"Register Touch ID on Apple M1","set_fn":"Set friendly name","start_fido2_val
292idation":"Start FIDO2 validation"}; 293 var lang_success = {"acl_saved":"ACL for object %s saved","admin_added":"Administrator %s has been added","admin_api_modified":"Changes to API have been saved","admin_modified":"Changes to administrator have been saved","admin_removed":"Administrator %s has been removed","alias_added":"Alias address %s (%d) has been added","alias_domain_removed":"Alias domain %s has been removed","alias_modified":"Changes to alias address %s have been saved","alias_removed":"Alias %s has been removed","aliasd_added":"Added alias domain %s","aliasd_modified":"Changes to alias domain %s have been saved","app_links":"Saved changes to app links","app_passwd_added":"Added new app password","app_passwd_removed":"Removed app password ID %s","bcc_deleted":"BCC map entries deleted: %s","bcc_edited":"BCC map entry %s edited","bcc_saved":"BCC map entry saved","cors_headers_edited":"CORS settings have been saved","custom_login_modified":"Login customisation was saved successfully","db_init_complete":"Database initialization completed","delete_filter":"Deleted filters ID %s","delete_filters":"Deleted filters: %s","deleted_syncjob":"Deleted syncjob ID %s","deleted_syncjobs":"Deleted syncjobs: %s","dkim_added":"DKIM key %s has been saved","domain_add_dkim_available":"A DKIM key did already exist","dkim_duplicated":"DKIM key for domain %s has been copied to %s","dkim_removed":"DKIM key %s has been removed","domain_added":"Added domain %s","domain_admin_added":"Domain administrator %s has been added","domain_admin_modified":"Changes to domain administrator %s have been saved","domain_admin_removed":"Domain administrator %s has been removed","domain_footer_modified":"Changes to domain footer %s have been saved","domain_modified":"Changes to domain %s have been saved","domain_removed":"Domain %s has been removed","dovecot_restart_success":"Dovecot was restarted successfully","eas_reset":"ActiveSync devices for user %s were reset","f2b_banlist_refreshed":"Banlist ID has been successfully refreshed.","f2b_modified":"Changes to Fail2ban parameters have been saved","forwarding_host_added":"Forwarding host %s has been added","forwarding_host_removed":"Forwarding host %s has been removed","global_filter_written":"Filter was successfully written to file","hash_deleted":"Hash deleted","iam_test_connection":"Connection successful","ip_check_opt_in_modified":"IP check was saved successfully","item_deleted":"Item %s successfully deleted","item_released":"Item %s released","items_deleted":"Item %s successfully deleted","items_released":"Selected items were released","learned_ham":"Successfully learned ID %s as ham","license_modified":"Changes to license have been saved","logged_in_as":"Logged in as %s","mailbox_added":"Mailbox %s has been added","mailbox_modified":"Changes to mailbox %s have been saved","mailbox_removed":"Mailbox %s has been removed","mailbox_renamed":"Mailbox was renamed from %s to %s","nginx_reloaded":"Nginx was reloaded","object_modified":"Changes to object %s have been saved","password_policy_saved":"Password policy was saved successfully","password_changed_success":"Password was successfully changed","pushover_settings_edited":"Pushover settings successfully set, please verify credentials.","qlearn_spam":"Message ID %s was learned as spam and deleted","queue_command_success":"Queue command completed successfully","recipient_map_entry_deleted":"Recipient map ID %s has been deleted","recipient_map_entry_saved":"Recipient map entry \"%s\" has been saved","recovery_email_sent":"Recovery email sent to %s","relayhost_added":"Map entry %s has been added","relayhost_removed":"Map entry %s has been removed","reset_main_logo":"Reset to default logo","resource_added":"Resource %s has been added","resource_modified":"Changes to mailbox %s have been saved","resource_removed":"Resource %s has been removed","rl_saved":"Rate limit for object %s saved","rspamd_ui_pw_set":"Rspamd UI password successfully set","saved_settings":"Saved settings","settings_map_added":"Added settings map entry","settings_map_removed":"Removed settings map ID %s","sogo_profile_reset"
293:"SOGo profile for user %s was reset","template_added":"Added template %s","template_modified":"Changes to template %s have been saved","template_removed":"Template ID %s has been deleted","tls_policy_map_entry_deleted":"TLS policy map ID %s has been deleted","tls_policy_map_entry_saved":"TLS policy map entry \"%s\" has been saved","ui_texts":"Saved changes to UI texts","upload_success":"File uploaded successfully","verified_fido2_login":"Verified FIDO2 login","verified_totp_login":"Verified TOTP login","verified_webauthn_login":"Verified WebAuthn login","verified_yotp_login":"Verified Yubico OTP login"}; 294 var lang_danger = {"access_denied":"Access denied or invalid form data","tfa_removal_blocked":"Two-factor authentication cannot be removed because it is required for your account.","alias_domain_invalid":"Alias domain %s is invalid","alias_empty":"Alias address must not be empty","alias_goto_identical":"Alias and goto address must not be identical","alias_invalid":"Alias address %s is invalid","aliasd_targetd_identical":"Alias domain must not be equal to target domain: %s","aliases_in_use":"Max. aliases must be greater or equal to %d","app_name_empty":"App name cannot be empty","app_passwd_id_invalid":"App password ID %s invalid","authsource_in_use":"The identity provider cannot be changed or deleted as it is currently in use by one or more users.","bcc_empty":"BCC destination cannot be empty","bcc_exists":"A BCC map %s exists for type %s","bcc_must_be_email":"BCC destination %s is not a valid email address","comment_too_long":"Comment too long, max 160 chars allowed","cors_invalid_method":"Invalid Allow-Method specified","cors_invalid_origin":"Invalid Allow-Origin specified","defquota_empty":"Default quota per mailbox must not be 0.","demo_mode_enabled":"Demo Mode is enabled","description_invalid":"Resource description for %s is invalid","dkim_domain_or_sel_exists":"A DKIM key for \"%s\" exists and will not be overwritten","dkim_domain_or_sel_invalid":"DKIM domain or selector invalid: %s","domain_cannot_match_hostname":"Domain cannot match hostname","domain_exists":"Domain %s already exists","domain_invalid":"Domain name is empty or invalid","domain_not_empty":"Cannot remove non-empty domain %s","domain_not_found":"Domain %s not found","domain_quota_m_in_use":"Domain quota must be greater or equal to %s MiB","extended_sender_acl_denied":"missing ACL to set external sender addresses","extra_acl_invalid":"External sender address \"%s\" is invalid","extra_acl_invalid_domain":"External sender \"%s\" uses an invalid domain","fido2_verification_failed":"FIDO2 verification failed: %s","file_open_error":"File cannot be opened for writing","filter_type":"Wrong filter type","from_invalid":"Sender must not be empty","generic_server_error":"An unexpected server error occurred. Please contact your administrator.","global_filter_write_error":"Could not write filter file: %s","global_map_invalid":"Global map ID %s invalid","global_map_write_error":"Could not write global map ID %s: %s","goto_empty":"An alias address must contain at least one valid goto address","goto_invalid":"Goto address %s is invalid","ham_learn_error":"Ham learn error: %s","iam_test_connection":"Connection failed","imagick_exception":"Error: Imagick exception while reading image","img_dimensions_exceeded":"Image exceeds the maximum image size","img_invalid":"Cannot validate image file","img_size_exceeded":"Image exceeds the maximum file size","img_tmp_missing":"Cannot validate image file: Temporary file not found","invalid_bcc_map_type":"Invalid BCC map type","invali
294d_destination":"Destination format \"%s\" is invalid","invalid_filter_type":"Invalid filter type","invalid_host":"Invalid host specified: %s","invalid_mime_type":"Invalid mime type","invalid_nexthop":"Next hop format is invalid","invalid_nexthop_authenticated":"Next hop exists with different credentials, please update the existing credentials for this next hop first.","invalid_recipient_map_new":"Invalid new recipient specified: %s","invalid_recipient_map_old":"Invalid original recipient specified: %s","invalid_reset_token":"Invalid reset token","ip_list_empty":"List of allowed IPs cannot be empty","is_alias":"%s is already known as an alias address","is_alias_or_mailbox":"%s is already known as an alias, a mailbox or an alias address expanded from an alias domain.","is_spam_alias":"%s is already known as a temporary alias address (spam alias address)","last_key":"Last key cannot be deleted, please deactivate TFA instead.","login_failed":"Login failed","mailbox_defquota_exceeds_mailbox_maxquota":"Default quota exceeds max quota limit","mailbox_invalid":"Mailbox name is invalid","mailbox_quota_exceeded":"Quota exceeds the domain limit (max. %d MiB)","mailbox_quota_exceeds_domain_quota":"Max. quota exceeds domain quota limit","mailbox_quota_left_exceeded":"Not enough space left (space left: %d MiB)","mailboxes_in_use":"Max. mailboxes must be greater or equal to %d","malformed_username":"Malformed username","map_content_empty":"Map content cannot be empty","max_age_invalid":"Max age %s is invalid","max_alias_exceeded":"Max. aliases exceeded","max_mailbox_exceeded":"Max. mailboxes exceeded (%d of %d)","max_quota_in_use":"Mailbox quota must be greater or equal to %d MiB","maxquota_empty":"Max. quota per mailbox must not be 0.","mode_invalid":"Mode %s is invalid","mx_invalid":"MX record %s is invalid","mysql_error":"MySQL error: %s","network_host_invalid":"Invalid network or host: %s","next_hop_interferes":"%s interferes with nexthop %s","next_hop_interferes_any":"An existing next hop interferes with %s","nginx_reload_failed":"Nginx reload failed: %s","no_user_defined":"No user defined","object_exists":"Object %s already exists","object_is_not_numeric":"Value %s is not numeric","password_complexity":"Password does not meet the policy","password_empty":"Password must not be empty","password_mismatch":"Confirmation password does not match","password_reset_invalid_user":"Mailbox not found or no recovery email is set","password_reset_na":"The password recovery is currently unavailable. Please contact your administrator.","policy_list_from_exists":"A record with given name exists","policy_list_from_invalid":"Record has invalid format","private_key_error":"Private key error: %s","pushover_credentials_missing":"Pushover token and or key missing","pushover_key":"Pushover key has a wrong format","pushover_token":"Pushover token has a wrong format","quarantine_category_invalid":"Quarantine category must be one of: add_header, reject, all","quota_not_0_not_numeric":"Quota must be numeric and >= 0","recipient_map_entry_exists":"A Recipient map entry \"%s\" exists","recovery_email_failed":"Could not send a recovery email. Please contact your administrator.","redis_error":"Redis error: %s","relayhost_invalid":"Map entry %s is invalid","release_send_failed":"Message could not be released: %s","required_data_missing":"Required data %s is missing","reset_f2b_regex":"Regex filter could not be reset in time, please try again or wait a few more seconds and reload the website.","reset_token_limit_exceeded":"Reset token limit has been exceeded. Please try again later.","resource_invalid":"Resource name %s is invalid","rl_timeframe":"Rate limit time frame is incorrect","rspamd_ui_pw_length":"Rspamd UI password should be at least 6 chars long","script_empty":"Script cannot be empty","sender_acl_invalid":"Sender ACL value %s is invalid","set_acl_failed":"Failed to set ACL","settings_map_invalid":"Settings map ID %s invalid","sieve_error":"Sieve parser error: %s","spam_learn_error":"Spam learn error: %s","subject_empty":"Subject must not be empty","target_domain_invali
294d":"Target domain %s is invalid","targetd_not_found":"Target domain %s not found","targetd_relay_domain":"Target domain %s is a relay domain","template_exists":"Template %s already exists","template_id_invalid":"Template ID %s invalid","template_name_invalid":"Template name invalid","temp_error":"Temporary error","text_empty":"Text must not be empty","tfa_token_invalid":"TFA token invalid","tls_policy_map_dest_invalid":"Policy destination is invalid","tls_policy_map_entry_exists":"A TLS policy map entry \"%s\" exists","tls_policy_map_parameter_invalid":"Policy parameter is invalid","to_invalid":"Recipient must not be empty","totp_verification_failed":"TOTP verification failed","transport_dest_exists":"Transport destination \"%s\" exists","webauthn_verification_failed":"WebAuthn verification failed: %s","webauthn_authenticator_failed":"The selected authenticator was not found","webauthn_publickey_failed":"No public key was stored for the selected authenticator","webauthn_username_failed":"The selected authenticator belongs to another account","unknown":"An unknown error occurred","unknown_tfa_method":"Unknown TFA method","unlimited_quota_acl":"Unlimited quota prohibited by ACL","username_invalid":"Username %s cannot be used","validity_missing":"Please assign a period of validity","value_missing":"Please provide all values","version_invalid":"Version %s is invalid","yotp_verification_failed":"Yubico OTP verification failed: %s"}; 295 var docker_timeout = 60 * 1000; 296 var mailcow_cc_role = ''; 297 var mailcow_info = { 298 version_tag: '', 299 last_version_tag: '', 300 updatedAt: '', 301 project_url: '', 302 project_owner: '', 303 project_repo: '', 304 branch: '' 305 }; 306 307$(window).scroll(function() { 308 sessionStorage.scrollTop = $(this).scrollTop(); 309}); 310// Select language and reopen active URL without POST 311function setLang(sel) { 312 $.post( '\/', {lang: sel} ); 313 window.location.href = window.location.pathname + window.location.search; 314} 315// FIDO2 functions 316function arrayBufferToBase64(buffer) { 317 let binary = ''; 318 let bytes = new Uint8Array(buffer); 319 let len = bytes.byteLength; 320 for (let i = 0; i < len; i++) { 321 binary += String.fromCharCode( bytes[ i ] ); 322 } 323 return window.btoa(binary); 324} 325function recursiveBase64StrToArrayBuffer(obj) { 326 let prefix = '=?BINARY?B?'; 327 let suffix = '?='; 328 if (typeof obj === 'object') { 329 for (let key in obj) { 330 if (typeof obj[key] === 'string') { 331 let str = obj[key]; 332 if (str.substring(0, prefix.length) === prefix && str.substring(str.length - suffix.length) === suffix) { 333 str = str.substring(prefix.length, str.length - suffix.length); 334 let binary_string = window.atob(str); 335 let len = binary_string.length; 336 let bytes = new Uint8Array(len); 337 for (let i = 0; i < len; i++) { 338 bytes[i] = binary_string.charCodeAt(i); 339 } 340 obj[key] = bytes.buffer; 341 } 342 } else { 343 recursiveBase64StrToArrayBuffer(obj[key]); 344 } 345 } 346 } 347} 348 $(window).on('load', function() { 349 $(".overlay").hide(); 350 }); 351 $(document).ready(function() { 352 $(document).on('shown.bs.modal', function(e) { 353 modal_id = $(e.relatedTarget).data('target'); 354 $(modal_id).attr("aria-hidden","false"); 355 }); 356 // TFA, CSRF, Alerts in footer.inc.php 357 // Other general functions in mailcow.js 358 359 // Confirm TFA modal 360 361 362 363 364 // Validate FIDO2 365 $("#fido2-login").click(function(){ 366 $('#fido2-alerts').html(); 367 if (!window.fetch || !navigator.credentials || !navigator.credentials.create) { 368 window.alert('Browser not supported.'); 369 return; 370 } 371 window.fetch("/api/v1/get/fido2-get-args", {method:'GET',cache:'no-cache'}).then(function(response) { 372 return response.json(); 373 }).then(function(json) { 374 if (json.success === false) { 375 throw new Error(); 376 } 377 recursiveBase64StrToArrayBuffer(json); 378 return json; 379 }).then(function(getCredentialArgs) { 380 return navigator.credentials.get(getCredentialArgs); 381 }).then(function(cred) { 382 return { 383 id: cred.rawId ? arrayBufferToBase64(cred.rawId) : null, 384 clientDataJSON: cred.response.clientDataJSON ? arrayBufferToBase64(cred.response.clientDataJSON) : null, 385 authenticatorData: cred.response.authenticatorData ? arrayBufferToBase64(cred.response.authenticatorData) : null, 386 signature : cred.response.signature ? arrayBufferToBase64(cred.response.signature) : null 387 }; 388 }).then(JSON.stringify).then(function(AuthenticatorAttestationResponse) { 389 var formData = new FormData(); 390 formData.append("token", AuthenticatorAttestationResponse); 391 formData.append("verify_fido2_login", "true"); 392 393 return window.fetch(window.location.href, {method:'POST', body: formData, cache:'no-cache'}); 394 }).then(function(response) { 395 window.location = window.location.href.split("#")[0]; 396 }).catch(function(err) { 397 if (typeof err.message === 'undefined') {
398 mailcow_alert_box(lang_fido2.fido2_validation_failed, "danger"); 399 } else { 400 mailcow_alert_box(lang_fido2.fido2_validation_failed + ":<br><i>" + err.message + "</i>", "danger"); 401 } 402 }); 403 }); 404 // Set TFA/FIDO2 405 $("#register-fido2, #register-fido2-touchid").click(function(){ 406 let t = $(this); 407 408 $("option:selected").prop("selected", false); 409 if (!window.fetch || !navigator.credentials || !navigator.credentials.create) { 410 window.alert('Browser not supported.'); 411 return; 412 } 413 414 window.fetch("/api/v1/get/fido2-registration/null", {method:'GET',cache:'no-cache'}).then(function(response) { 415 return response.json(); 416 }).then(function(json) { 417 if (json.success === false) { 418 throw new Error(json.msg); 419 } 420 recursiveBase64StrToArrayBuffer(json); 421 422 // set attestation to node if we are registering apple touch id 423 if(t.attr('id') === 'register-fido2-touchid') { 424 json.publicKey.attestation = 'none'; 425 json.publicKey.authenticatorSelection.authenticatorAttachment = "platform"; 426 } 427 428 return json; 429 }).then(function(createCredentialArgs) { 430 console.log(createCredentialArgs); 431 return navigator.credentials.create(createCredentialArgs); 432 }).then(function(cred) { 433 return { 434 clientDataJSON: cred.response.clientDataJSON ? arrayBufferToBase64(cred.response.clientDataJSON) : null, 435 attestationObject: cred.response.attestationObject ? arrayBufferToBase64(cred.response.attestationObject) : null 436 }; 437 }).then(JSON.stringify).then(function(AuthenticatorAttestationResponse) { 438 return window.fetch("/api/v1/add/fido2-registration", {method:'POST', body: AuthenticatorAttestationResponse, cache:'no-cache'}); 439 }).then(function(response) { 440 return response.json(); 441 }).then(function(json) { 442 if (json.success) { 443 window.location = window.location.href.split("#")[0]; 444 } else { 445 throw new Error(json.msg); 446 } 447 }).catch(function(err) { 448 $('#fido2-alerts').html('<span class="text-danger"><b>' + err.message + '</b></span>'); 449 }); 450 }); 451 $('#selectTFA').change(function () { 452 if ($(this).val() == "yubi_otp") { 453 $('#YubiOTPModal').modal('show'); 454 $("option:selected").prop("selected", false); 455 } 456 if ($(this).val() == "totp") { 457 $('#TOTPModal').modal('show'); 458 request_token = $('#tfa-qr-img').data('totp-secret'); 459 $.ajax({ 460 url: '/inc/ajax/qr_gen.php', 461 data: { 462 token: request_token, 463 }, 464 }).done(function (result) { 465 $("#tfa-qr-img").attr("src", result); 466 }); 467 $("option:selected").prop("selected", false); 468 } 469 if ($(this).val() == "webauthn") { 470 // check if Browser is supported 471 if (!window.fetch || !navigator.credentials || !navigator.credentials.create) { 472 window.alert('Browser not supported.'); 473 return; 474 } 475 476 // show modal 477 $('#WebAuthnModal').modal('show'); 478 $("option:selected").prop("selected", false); 479 480 $("#start_webauthn_register").click(() => { 481 var key_id = document.getElementsByName('key_id')[1].value; 482 var confirm_password = document.getElementsByName('confirm_password')[1].value; 483 484 // fetch WebAuthn create args 485 window.fetch("/api/v1/get/webauthn-tfa-registration/null", {method:'GET',cache:'no-cache'}).then(response => { 486 return response.json(); 487 }).then(json => { 488 console.log(json); 489 if (json.success === false) throw new Error(json.msg); 490 recursiveBase64StrToArrayBuffer(json); 491 492 return json; 493 }).then(createCredentialArgs => { 494 // create credentials 495 return navigator.credentials.create(createCredentialArgs); 496 }).then(cred => { 497 return { 498 clientDataJSON: cred.response.clientDataJSON ? arrayBufferToBase64(cred.response.clientDataJSON) : null, 499 attestationObject: cred.response.attestationObject ? arrayBufferToBase64(cred.response.attestationObject) : null, 500 key_id: key_id, 501 tfa_method: "webauthn", 502 confirm_password: confirm_password 503 }; 504 }).then(JSON.stringify).then(AuthenticatorAttestationResponse => { 505 // send request 506 return window.fetch("/api/v1/add/webauthn-tfa-registration", {method:'POST', body: AuthenticatorAttestationResponse, cache:'no-cache'}); 507 }).then(response => { 508 return response.json(); 509 }).then(json => { 510 if (json.success) { 511 // reload on success 512 window.location = window.location.href.split("#")[0]; 513 } else { 514 throw new Error(json.msg); 515 } 516 }).catch(function(err) { 517 console.log(err); 518 var webauthn_return_code = document.getElementById('webauthn_return_code'); 519 webauthn_return_code.style.display = webauthn_return_code.style.display === 'none' ? '' : null; 520 webauthn_return_code.innerHTML = lang_tfa.error_code + ': ' + err + ' ' + lang_tfa.reload_retry; 521 }); 522 }); 523 } 524 if ($(this).val() == "none") { 525 $('#DisableTFAModal').modal('show'); 526 $("option:selected").prop("selected", false); 527 } 528 }); 529 530 531 // CSRF 532 $('<input type="hidden" value="a795e99907e7d704bf79987af7907351509fd14238ff83d08dac87b28cbffc60">').attr('name', 'csrf_token').appendTo('form'); 533 if (sessionStorage.scrollTop != "undefined") { 534 $(window).scrollTop(sessionStorage.scrollTop); 535 } 536 }); 537</script>
537 538 539<div class="container footer"> 540 </div> 541</body> 542</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.