Compare commits

...

8 Commits

Author SHA1 Message Date
Michael Kaufmann
b30d7a8252 set version to 2.0.13 for maintenance release
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-03-03 13:05:09 +01:00
Michael Kaufmann
b03e11c18d fix email-domain navigation and descriptions
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-03-03 13:03:12 +01:00
Michael Kaufmann
bf7d22a794 typecast parameter values for sizeReadable(), fixes #1103
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-02-28 08:15:31 +01:00
Michael Kaufmann
fb57a8a3b5 update dependencies
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-02-26 10:24:44 +01:00
Mickey
0d625797b0 Add command to remove debians prerotate script (#1101)
Co-authored-by: Mickey Knox <mickey@netfreaks.org>
2023-02-22 10:01:25 +01:00
Michael Kaufmann
6777fbf229 type-safe comparsion of md5-compatibility hash-validation
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-02-22 09:35:27 +01:00
Michael Kaufmann
23f1f79eff specify clearly which tls settings are being overwritten/ignored depending on the 'Override system TLS settings' flag when adding/updating Domains
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-02-19 12:27:56 +01:00
Michael Kaufmann
a5af104d53 keep search-fields/text in pagination links of displaying a search-result
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-02-19 12:06:47 +01:00
21 changed files with 1217 additions and 1429 deletions

750
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -71,7 +71,7 @@ if ($page == 'overview' || $page == 'emails') {
'listing' => Listing::format($collection, $emaildomain_list_data, 'emaildomain_list'),
'actions_links' => CurrentUser::canAddResource('emails') ? [
[
'href' => $linker->getLink(['section' => 'email', 'page' => $page, 'action' => 'add']),
'href' => $linker->getLink(['section' => 'email', 'page' => 'email_domain', 'action' => 'add']),
'label' => lng('emails.emails_add')
]
] : null,
@@ -123,7 +123,7 @@ if ($page == 'email_domain') {
}
if (CurrentUser::canAddResource('emails')) {
$actions_links[] = [
'href' => $linker->getLink(['section' => 'email', 'page' => 'email_domain', 'action' => 'add']),
'href' => $linker->getLink(['section' => 'email', 'page' => 'email_domain', 'action' => 'add', 'domainid' => $email_domainid]),
'label' => lng('emails.emails_add')
];
}
@@ -192,7 +192,11 @@ if ($page == 'email_domain') {
"cid" => $userinfo['customerid']
]);
$domains = [];
$selected_domain = "";
while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
if ($email_domainid == $row['id']) {
$selected_domain = $row['domain'];
}
$domains[$row['domain']] = $idna_convert->decode($row['domain']);
}

View File

@@ -697,7 +697,7 @@ opcache.validate_timestamps'),
('system', 'distribution', ''),
('system', 'update_channel', 'stable'),
('system', 'updatecheck_data', ''),
('system', 'update_notify_last', '2.0.12'),
('system', 'update_notify_last', '2.0.13'),
('system', 'traffictool', 'goaccess'),
('api', 'enabled', '0'),
('api', 'customer_default', '1'),
@@ -742,7 +742,7 @@ opcache.validate_timestamps'),
('panel', 'logo_overridetheme', '0'),
('panel', 'logo_overridecustom', '0'),
('panel', 'settings_mode', '0'),
('panel', 'version', '2.0.12'),
('panel', 'version', '2.0.13'),
('panel', 'db_version', '202302030');

View File

@@ -400,3 +400,8 @@ if (Froxlor::isFroxlorVersion('2.0.11')) {
Update::showUpdateStep("Updating from 2.0.11 to 2.0.12", false);
Froxlor::updateToVersion('2.0.12');
}
if (Froxlor::isFroxlorVersion('2.0.12')) {
Update::showUpdateStep("Updating from 2.0.12 to 2.0.13", false);
Froxlor::updateToVersion('2.0.13');
}

View File

@@ -33,8 +33,6 @@ namespace Froxlor\Cron\Traffic;
use Exception;
use Froxlor\Cron\FroxlorCron;
use Froxlor\Database\Database;
use Froxlor\FileDir;
use Froxlor\Froxlor;
use Froxlor\FroxlorLogger;
use Froxlor\PhpHelper;
use Froxlor\Settings;
@@ -99,8 +97,8 @@ class ReportsCron extends FroxlorCron
'COMPANY' => $rep_userinfo['company'],
'USERNAME' => $rep_userinfo['loginname'],
'CUSTOMER_NO' => $rep_userinfo['customernumber'],
'TRAFFIC' => PhpHelper::sizeReadable($row['traffic'], null, 'bi'),
'TRAFFICUSED' => PhpHelper::sizeReadable($row['traffic_used'], null, 'bi'),
'TRAFFIC' => PhpHelper::sizeReadable((int)$row['traffic'], null, 'bi'),
'TRAFFICUSED' => PhpHelper::sizeReadable((int)$row['traffic_used'], null, 'bi'),
'USAGE_PERCENT' => round(($row['traffic_used'] * 100) / $row['traffic'], 2),
'MAX_PERCENT' => Settings::Get('system.report_trafficmax')
];
@@ -182,8 +180,8 @@ class ReportsCron extends FroxlorCron
if (isset($row['traffic']) && $row['traffic'] > 0 && (($row['traffic_used_total'] * 100) / ($row['traffic'])) >= (int)Settings::Get('system.report_trafficmax')) {
$replace_arr = [
'NAME' => $row['name'],
'TRAFFIC' => PhpHelper::sizeReadable($row['traffic'], null, 'bi'),
'TRAFFICUSED' => PhpHelper::sizeReadable($row['traffic_used_total'], null, 'bi'),
'TRAFFIC' => PhpHelper::sizeReadable((int)$row['traffic'], null, 'bi'),
'TRAFFICUSED' => PhpHelper::sizeReadable((int)$row['traffic_used_total'], null, 'bi'),
'USAGE_PERCENT' => round(($row['traffic_used_total'] * 100) / $row['traffic'], 2),
'MAX_PERCENT' => Settings::Get('system.report_trafficmax')
];
@@ -265,10 +263,10 @@ class ReportsCron extends FroxlorCron
while ($customer = $customers_stmt->fetch(PDO::FETCH_ASSOC)) {
$customer['traffic'] *= 1024;
$t = $customer['traffic_used_total'] * 1024;
$t = (int) $customer['traffic_used_total'] * 1024;
if ($customer['traffic'] > 0) {
$p = (($t * 100) / $customer['traffic']);
$tg = $customer['traffic'];
$tg = (int) $customer['traffic'];
$str = sprintf('%s ( %00.1f %% )', PhpHelper::sizeReadable($t, null, 'bi'), $p);
$mail_body .= sprintf('%-15s', $customer['loginname']) . ' ' . sprintf('%-25s', $str) . ' ' . sprintf('%s', PhpHelper::sizeReadable($tg, null, 'bi')) . "\n";
} elseif ($customer['traffic'] == 0) {
@@ -282,10 +280,10 @@ class ReportsCron extends FroxlorCron
$mail_body .= '---------------------------------------------------------------' . "\n";
$t = $row['traffic_used_total'];
$t = (int) $row['traffic_used_total'];
if ($row['traffic'] > 0) {
$p = (($t * 100) / $row['traffic']);
$tg = $row['traffic'];
$tg = (int) $row['traffic'];
$str = sprintf('%s ( %00.1f %% )', PhpHelper::sizeReadable($t, null, 'bi'), $p);
$mail_body .= sprintf('%-15s', $row['loginname']) . ' ' . sprintf('%-25s', $str) . ' ' . sprintf('%s', PhpHelper::sizeReadable($tg, null, 'bi')) . "\n";
} elseif ($row['traffic'] == 0) {
@@ -369,8 +367,8 @@ class ReportsCron extends FroxlorCron
'COMPANY' => $rep_userinfo['company'],
'USERNAME' => $rep_userinfo['loginname'],
'CUSTOMER_NO' => $rep_userinfo['customernumber'],
'DISKAVAILABLE' => PhpHelper::sizeReadable($row['diskspace'], null, 'bi'),
'DISKUSED' => PhpHelper::sizeReadable($row['diskspace_used'], null, 'bi'),
'DISKAVAILABLE' => PhpHelper::sizeReadable((int)$row['diskspace'], null, 'bi'),
'DISKUSED' => PhpHelper::sizeReadable((int)$row['diskspace_used'], null, 'bi'),
'USAGE_PERCENT' => round(($row['diskspace_used'] * 100) / $row['diskspace'], 2),
'MAX_PERCENT' => Settings::Get('system.report_webmax')
];
@@ -443,8 +441,8 @@ class ReportsCron extends FroxlorCron
if (isset($row['diskspace']) && $row['diskspace_used'] != null && $row['diskspace_used'] > 0 && (($row['diskspace_used'] * 100) / $row['diskspace']) >= (int)Settings::Get('system.report_webmax')) {
$replace_arr = [
'NAME' => $row['name'],
'DISKAVAILABLE' => PhpHelper::sizeReadable($row['diskspace'], null, 'bi'),
'DISKUSED' => PhpHelper::sizeReadable($row['diskspace_used'], null, 'bi'),
'DISKAVAILABLE' => PhpHelper::sizeReadable((int)$row['diskspace'], null, 'bi'),
'DISKUSED' => PhpHelper::sizeReadable((int)$row['diskspace_used'], null, 'bi'),
'USAGE_PERCENT' => ($row['diskspace_used'] * 100) / $row['diskspace'],
'MAX_PERCENT' => Settings::Get('system.report_webmax')
];

View File

@@ -78,7 +78,7 @@ class TrafficCron extends FroxlorCron
// Fork failed
return 1;
}
} else if (!defined('CRON_NOFORK_FLAG')) {
} elseif (!defined('CRON_NOFORK_FLAG')) {
if (extension_loaded('pcntl')) {
$msg = "PHP compiled with pcntl but pcntl_fork function is not available.";
} else {
@@ -406,7 +406,7 @@ class TrafficCron extends FroxlorCron
} else {
// Use the old fashioned way with "du"
if (file_exists($row['documentroot']) && is_dir($row['documentroot'])) {
$back = FileDir::safe_exec('du -sk ' . escapeshellarg($row['documentroot']) . '');
$back = FileDir::safe_exec('du -sk ' . escapeshellarg($row['documentroot']));
foreach ($back as $backrow) {
$webspaceusage = explode(' ', $backrow);
}
@@ -426,7 +426,7 @@ class TrafficCron extends FroxlorCron
$maildir = FileDir::makeCorrectDir(Settings::Get('system.vmail_homedir') . $row['loginname']);
if (file_exists($maildir) && is_dir($maildir)) {
$back = FileDir::safe_exec('du -sk ' . escapeshellarg($maildir) . '');
$back = FileDir::safe_exec('du -sk ' . escapeshellarg($maildir));
foreach ($back as $backrow) {
$emailusage = explode(' ', $backrow);
}
@@ -627,7 +627,7 @@ class TrafficCron extends FroxlorCron
* @param string $caption Caption for webalizer output
* @param array $monthyear_arr
* @param int $current_stamp
*
*
* @return int Used traffic
*/
private static function callGoaccessGetTraffic($customerid, $logfile, $outputdir, $caption, array $monthyear_arr = [], int $current_stamp = 0)
@@ -705,7 +705,7 @@ class TrafficCron extends FroxlorCron
* @param string $outputdir Place where stats should be build
* @param string $caption Caption for webalizer output
* @param array $usersdomainlist
*
*
* @return float Used traffic
*/
private static function callWebalizerGetTraffic($logfile, $outputdir, $caption, array $usersdomainlist = [])

View File

@@ -31,7 +31,7 @@ final class Froxlor
{
// Main version variable
const VERSION = '2.0.12';
const VERSION = '2.0.13';
// Database version (YYYYMMDDC where C is a daily counter)
const DBVERSION = '202302030';

View File

@@ -198,7 +198,7 @@ class Crypt
$update_hash = true;
}
if ($pwd_hash == $pwd_check || password_verify($password, $pwd_hash)) {
if ($pwd_hash === $pwd_check || password_verify($password, $pwd_hash)) {
// check for update of hash (only if our database is ready to handle the bigger string)
$is_ready = Froxlor::versionCompare2("0.9.33", Froxlor::getVersion()) <= 0;
if ((password_needs_rehash($pwd_hash, $algo) || $update_hash) && $is_ready) {

View File

@@ -89,6 +89,8 @@ class Pagination
}
if (!empty($this->searchtext) && !empty($this->searchfield)) {
$this->addSearch($this->searchtext, $this->searchfield);
$pagination_additional_params[] = 'searchfield=' . $this->searchfield;
$pagination_additional_params[] = 'searchtext=' . $this->searchtext;
}
// check other ordering requests

View File

@@ -4599,6 +4599,7 @@ UPLOADGID=
<command><![CDATA[sed -i.bak 's/^DirData/# DirData/' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[sed -i.bak 's|^\\(DirIcons=\\).*$|\\1\\"/awstats-icon\\"|' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[rm /etc/cron.d/awstats]]></command>
<command><![CDATA[rm /etc/logrotate.d/httpd-prerotate/awstats]]></command>
</daemon>
<!-- libnss-extrausers -->
<daemon name="libnssextrausers"

View File

@@ -3241,6 +3241,7 @@ UPLOADGID=
<command><![CDATA[sed -i.bak 's/^DirData/# DirData/' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[sed -i.bak 's|^\\(DirIcons=\\).*$|\\1\\"/awstats-icon\\"|' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[rm /etc/cron.d/awstats]]></command>
<command><![CDATA[rm /etc/logrotate.d/httpd-prerotate/awstats]]></command>
</daemon>
<!-- libnss-extrausers -->
<daemon name="libnssextrausers"

View File

@@ -4811,6 +4811,7 @@ UPLOADGID=
<command><![CDATA[sed -i.bak 's/^DirData/# DirData/' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[sed -i.bak 's|^\\(DirIcons=\\).*$|\\1\\"/awstats-icon\\"|' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[rm /etc/cron.d/awstats]]></command>
<command><![CDATA[rm /etc/logrotate.d/httpd-prerotate/awstats]]></command>
</daemon>
<!-- libnss-extrausers -->
<daemon name="libnssextrausers"

View File

@@ -4802,6 +4802,7 @@ UPLOADGID=
<command><![CDATA[sed -i.bak 's/^DirData/# DirData/' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[sed -i.bak 's|^\\(DirIcons=\\).*$|\\1\\"/awstats-icon\\"|' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[rm /etc/cron.d/awstats]]></command>
<command><![CDATA[rm /etc/logrotate.d/httpd-prerotate/awstats]]></command>
</daemon>
<!-- libnss-extrausers -->
<daemon name="libnssextrausers"

View File

@@ -4030,6 +4030,7 @@ UPLOADGID=
<command><![CDATA[sed -i.bak 's/^DirData/# DirData/' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[sed -i.bak 's|^\\(DirIcons=\\).*$|\\1\\"/awstats-icon\\"|' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[rm /etc/cron.d/awstats]]></command>
<command><![CDATA[rm /etc/logrotate.d/httpd-prerotate/awstats]]></command>
</daemon>
<!-- libnss-extrausers -->
<daemon name="libnssextrausers"

View File

@@ -4022,6 +4022,7 @@ UPLOADGID=
<command><![CDATA[sed -i.bak 's/^DirData/# DirData/' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[sed -i.bak 's|^\\(DirIcons=\\).*$|\\1\\"/awstats-icon\\"|' {{settings.system.awstats_conf}}/awstats.model.conf]]></command>
<command><![CDATA[rm /etc/cron.d/awstats]]></command>
<command><![CDATA[rm /etc/logrotate.d/httpd-prerotate/awstats]]></command>
</daemon>
<!-- libnss-extrausers -->
<daemon name="libnssextrausers"

View File

@@ -250,7 +250,7 @@ return [
'ssl_protocols' => [
'visible' => !empty($ssl_ipsandports) && $userinfo['change_serversettings'] == '1' && Settings::Get('system.webserver') != 'lighttpd',
'label' => lng('serversettings.ssl.ssl_protocols.title'),
'desc' => lng('serversettings.ssl.ssl_protocols.description'),
'desc' => lng('serversettings.ssl.ssl_protocols.description').lng('admin.domain_override_tls_addinfo'),
'type' => 'checkbox',
'value' => [
'TLSv1.2'
@@ -278,14 +278,14 @@ return [
'ssl_cipher_list' => [
'visible' => !empty($ssl_ipsandports) && $userinfo['change_serversettings'] == '1',
'label' => lng('serversettings.ssl.ssl_cipher_list.title'),
'desc' => lng('serversettings.ssl.ssl_cipher_list.description'),
'desc' => lng('serversettings.ssl.ssl_cipher_list.description').lng('admin.domain_override_tls_addinfo'),
'type' => 'text',
'value' => Settings::Get('system.ssl_cipher_list')
],
'tlsv13_cipher_list' => [
'visible' => !empty($ssl_ipsandports) && $userinfo['change_serversettings'] == '1' && Settings::Get('system.webserver') == "apache2" && Settings::Get('system.apache24') == 1,
'label' => lng('serversettings.ssl.tlsv13_cipher_list.title'),
'desc' => lng('serversettings.ssl.tlsv13_cipher_list.description'),
'desc' => lng('serversettings.ssl.tlsv13_cipher_list.description').lng('admin.domain_override_tls_addinfo'),
'type' => 'text',
'value' => Settings::Get('system.tlsv13_cipher_list')
],

View File

@@ -277,7 +277,7 @@ return [
'ssl_protocols' => [
'visible' => !empty($ssl_ipsandports) && $userinfo['change_serversettings'] == '1' && Settings::Get('system.webserver') != 'lighttpd',
'label' => lng('serversettings.ssl.ssl_protocols.title'),
'desc' => lng('serversettings.ssl.ssl_protocols.description'),
'desc' => lng('serversettings.ssl.ssl_protocols.description').lng('admin.domain_override_tls_addinfo'),
'type' => 'checkbox',
'value' => !empty($result['ssl_protocols']) ? explode(",", $result['ssl_protocols']) : explode(",", Settings::Get('system.ssl_protocols')),
'values' => [
@@ -303,14 +303,14 @@ return [
'ssl_cipher_list' => [
'visible' => !empty($ssl_ipsandports) && $userinfo['change_serversettings'] == '1',
'label' => lng('serversettings.ssl.ssl_cipher_list.title'),
'desc' => lng('serversettings.ssl.ssl_cipher_list.description'),
'desc' => lng('serversettings.ssl.ssl_cipher_list.description').lng('admin.domain_override_tls_addinfo'),
'type' => 'text',
'value' => !empty($result['ssl_cipher_list']) ? $result['ssl_cipher_list'] : Settings::Get('system.ssl_cipher_list')
],
'tlsv13_cipher_list' => [
'visible' => !empty($ssl_ipsandports) && $userinfo['change_serversettings'] == '1' && Settings::Get('system.webserver') == "apache2" && Settings::Get('system.apache24') == 1,
'label' => lng('serversettings.ssl.tlsv13_cipher_list.title'),
'desc' => lng('serversettings.ssl.tlsv13_cipher_list.description'),
'desc' => lng('serversettings.ssl.tlsv13_cipher_list.description').lng('admin.domain_override_tls_addinfo'),
'type' => 'text',
'value' => !empty($result['tlsv13_cipher_list']) ? $result['tlsv13_cipher_list'] : Settings::Get('system.tlsv13_cipher_list')
],

View File

@@ -23,11 +23,13 @@
* @license https://files.froxlor.org/misc/COPYING.txt GPLv2
*/
$email_domainid ?: 0;
return [
'emails_add' => [
'title' => lng('emails.emails_add'),
'image' => 'fa-solid fa-plus',
'self_overview' => ['section' => 'email', 'page' => 'email_domain', 'domainid' => $email_domainid ?: 0],
'self_overview' => ['section' => 'email', 'page' => $email_domainid != 0 ? 'email_domain' : 'emails', 'domainid' => $email_domainid],
'sections' => [
'section_a' => [
'title' => lng('emails.emails_add'),
@@ -40,7 +42,8 @@ return [
'domain' => [
'next_to_prefix' => '@',
'type' => 'select',
'select_var' => $domains
'select_var' => $domains,
'selected' => $selected_domain
]
]
],

View File

@@ -454,6 +454,7 @@ return [
'novhostcontainer' => '<br><br><small class="text-danger">Keine der IPs und Ports hat die Option "Erstelle vHost-Container" aktiviert, einige Einstellungen sind daher nicht verfügbar.</small>',
'ownsslvhostsettings' => 'Eigene SSL vHost-Einstellungen',
'domain_override_tls' => 'Überschreibe System TLS Einstellungen',
'domain_override_tls_addinfo' => '<br /><span class="text-danger">Nur verwendet wenn "Überschreibe System TLS Einstellungen" auf "Ja" gestellt ist</span>',
'domain_sslenabled' => 'Aktiviere Nutzung von SSL',
'domain_honorcipherorder' => 'Bevorzuge die serverseitige Cipher Reihenfolge, Standardwert <strong>nein</strong>',
'domain_sessiontickets' => 'Aktiviere TLS Sessiontickets (RFC 5077), Standardwert <strong>ja</strong>',
@@ -493,7 +494,7 @@ return [
'key_add' => 'API Key hinzufügen',
'apikey_removed' => 'Der API Key mit der ID #%s wurde erfolgreich gelöscht.',
'apikey_added' => 'Der neue API Key wurde erfolgreich angelegt.',
'clicktoview' => 'API Key Details anzeigen',
'clicktoview' => 'Details anzeigen',
'allowed_from' => 'Erlaube Zugriff von',
'allowed_from_help' => 'Komma getrennte Liste von IPs oder Netzen.<br>Standard ist leer (von überall erlaubt).',
'valid_until' => 'Gültig bis',
@@ -568,7 +569,6 @@ return [
'email_quota' => 'E-Mail-Kontingent',
'email_imap' => 'IMAP',
'email_pop3' => 'POP3',
'mail_quota' => 'E-Mail-Kontingent',
'sendinfomail' => 'Daten per E-Mail an mich senden',
'generated_pwd' => 'Passwortvorschlag',
'usedmax' => 'Benutzt / Max.',
@@ -721,6 +721,8 @@ return [
'quota_edit' => 'E-Mail-Kontingent ändern',
'noemaildomainaddedyet' => 'Sie haben bisher noch keine (E-Mail-)Domain in Ihrem Konto.',
'back_to_overview' => 'Zurück zur Domain-Übersicht',
'accounts' => 'Konten',
'emails' => 'Adressen',
],
'error' => [
'error' => 'Fehlermeldung',

View File

@@ -461,6 +461,7 @@ return [
'novhostcontainer' => '<br><br><small class="text-danger">None of the IPs and ports has the "Create vHost-Container" option enabled, many settings here will not be available</small>',
'ownsslvhostsettings' => 'Own SSL vHost-settings',
'domain_override_tls' => 'Override system TLS settings',
'domain_override_tls_addinfo' => '<br /><span class="text-danger">Only used if "Override system TLS settings" is set to "Yes"</span>',
'domain_sslenabled' => 'Enable usage of SSL',
'domain_honorcipherorder' => 'Honor the (server) cipher order, default <strong>no</strong>',
'domain_sessiontickets' => 'Enable TLS sessiontickets (RFC 5077), default <strong>yes</strong>',
@@ -613,7 +614,6 @@ return [
'email_quota' => 'E-mail quota',
'email_imap' => 'E-mail IMAP',
'email_pop3' => 'E-mail POP3',
'mail_quota' => 'Mailquota',
'sendinfomail' => 'Send data via email to me',
'generated_pwd' => 'Password suggestion',
'usedmax' => 'Used / Max',
@@ -787,6 +787,8 @@ return [
'quota_edit' => 'Change E-Mail Quota',
'noemaildomainaddedyet' => 'You do not have a (email-)domain in your account yet.',
'back_to_overview' => 'Back to domain overview',
'accounts' => 'Accounts',
'emails' => 'Addresses',
],
'error' => [
'error' => 'Error',

1802
package-lock.json generated

File diff suppressed because it is too large Load Diff