Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a2342ad1d2 | ||
|
|
add1818723 | ||
|
|
51c1d648b2 | ||
|
|
0fca98c652 | ||
|
|
3682116ba2 | ||
|
|
3b99070496 | ||
|
|
25f20e4a7d | ||
|
|
d46b2d1d80 | ||
|
|
4750dad9e2 | ||
|
|
c6830d8e7a | ||
|
|
10b4de4cf9 | ||
|
|
ae39a1759a | ||
|
|
989b4fee0e | ||
|
|
7f6810c5bd | ||
|
|
3fbc9815ea | ||
|
|
11533c2d75 | ||
|
|
652a998188 |
@@ -229,7 +229,7 @@ return array(
|
|||||||
'default' => true,
|
'default' => true,
|
||||||
'save_method' => 'storeSettingField'
|
'save_method' => 'storeSettingField'
|
||||||
),
|
),
|
||||||
'system_disable_le_selfcheck' => array(
|
'system_le_domain_dnscheck' => array(
|
||||||
'label' => $lng['serversettings']['le_domain_dnscheck'],
|
'label' => $lng['serversettings']['le_domain_dnscheck'],
|
||||||
'settinggroup' => 'system',
|
'settinggroup' => 'system',
|
||||||
'varname' => 'le_domain_dnscheck',
|
'varname' => 'le_domain_dnscheck',
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ if ($page == 'admins' && $userinfo['change_serversettings'] == '1') {
|
|||||||
$dec_places = Settings::Get('panel.decimal_places');
|
$dec_places = Settings::Get('panel.decimal_places');
|
||||||
$result['traffic'] = round($result['traffic'] / (1024 * 1024), $dec_places);
|
$result['traffic'] = round($result['traffic'] / (1024 * 1024), $dec_places);
|
||||||
$result['diskspace'] = round($result['diskspace'] / 1024, $dec_places);
|
$result['diskspace'] = round($result['diskspace'] / 1024, $dec_places);
|
||||||
$result['email'] = $idna_convert->decode($result['email']);
|
$result['email'] = $idna_convert->decode($result['email'] ?? '');
|
||||||
|
|
||||||
$customers_ul = \Froxlor\UI\HTML::makecheckbox('customers_ul', $lng['customer']['unlimited'], '-1', false, $result['customers'], true, true);
|
$customers_ul = \Froxlor\UI\HTML::makecheckbox('customers_ul', $lng['customer']['unlimited'], '-1', false, $result['customers'], true, true);
|
||||||
if ($result['customers'] == '-1') {
|
if ($result['customers'] == '-1') {
|
||||||
|
|||||||
@@ -395,7 +395,7 @@ if ($page == 'customers' && $userinfo['customers'] != '0') {
|
|||||||
$dec_places = Settings::Get('panel.decimal_places');
|
$dec_places = Settings::Get('panel.decimal_places');
|
||||||
$result['traffic'] = round($result['traffic'] / (1024 * 1024), $dec_places);
|
$result['traffic'] = round($result['traffic'] / (1024 * 1024), $dec_places);
|
||||||
$result['diskspace'] = round($result['diskspace'] / 1024, $dec_places);
|
$result['diskspace'] = round($result['diskspace'] / 1024, $dec_places);
|
||||||
$result['email'] = $idna_convert->decode($result['email']);
|
$result['email'] = $idna_convert->decode($result['email'] ?? '');
|
||||||
|
|
||||||
$diskspace_ul = \Froxlor\UI\HTML::makecheckbox('diskspace_ul', $lng['customer']['unlimited'], '-1', false, $result['diskspace'], true, true);
|
$diskspace_ul = \Froxlor\UI\HTML::makecheckbox('diskspace_ul', $lng['customer']['unlimited'], '-1', false, $result['diskspace'], true, true);
|
||||||
if ($result['diskspace'] == '-1') {
|
if ($result['diskspace'] == '-1') {
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ if ($page == 'domains' || $page == 'overview') {
|
|||||||
$customers = \Froxlor\UI\HTML::makeoption($lng['panel']['please_choose'], 0, 0, true);
|
$customers = \Froxlor\UI\HTML::makeoption($lng['panel']['please_choose'], 0, 0, true);
|
||||||
$result_customers_stmt = Database::prepare("
|
$result_customers_stmt = Database::prepare("
|
||||||
SELECT `customerid`, `loginname`, `name`, `firstname`, `company`
|
SELECT `customerid`, `loginname`, `name`, `firstname`, `company`
|
||||||
FROM `" . TABLE_PANEL_CUSTOMERS . "` " . ($userinfo['customers_see_all'] ? '' : " WHERE `adminid` = '" . (int) $userinfo['adminid'] . "' ") . " ORDER BY COALESCE(NULLIF(`name`,''), `company`) ASC");
|
FROM `" . TABLE_PANEL_CUSTOMERS . "` " . ($userinfo['customers_see_all'] ? '' : " WHERE `adminid` = :adminid ") . " ORDER BY COALESCE(NULLIF(`name`,''), `company`) ASC");
|
||||||
$params = array();
|
$params = array();
|
||||||
if ($userinfo['customers_see_all'] == '0') {
|
if ($userinfo['customers_see_all'] == '0') {
|
||||||
$params['adminid'] = $userinfo['adminid'];
|
$params['adminid'] = $userinfo['adminid'];
|
||||||
@@ -674,7 +674,7 @@ if ($page == 'domains' || $page == 'overview') {
|
|||||||
function formatDomainEntry(&$row, &$idna_convert)
|
function formatDomainEntry(&$row, &$idna_convert)
|
||||||
{
|
{
|
||||||
$row['domain'] = $idna_convert->decode($row['domain']);
|
$row['domain'] = $idna_convert->decode($row['domain']);
|
||||||
$row['aliasdomain'] = $idna_convert->decode($row['aliasdomain']);
|
$row['aliasdomain'] = $idna_convert->decode($row['aliasdomain'] ?? '');
|
||||||
|
|
||||||
$row['ipandport'] = '';
|
$row['ipandport'] = '';
|
||||||
foreach ($row['ipsandports'] as $rowip) {
|
foreach ($row['ipsandports'] as $rowip) {
|
||||||
@@ -685,7 +685,7 @@ function formatDomainEntry(&$row, &$idna_convert)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$row['ipandport'] = substr($row['ipandport'], 0, - 1);
|
$row['ipandport'] = substr($row['ipandport'], 0, - 1);
|
||||||
$row['termination_date'] = str_replace("0000-00-00", "", $row['termination_date']);
|
$row['termination_date'] = str_replace("0000-00-00", "", $row['termination_date'] ?? '');
|
||||||
|
|
||||||
$row['termination_css'] = "";
|
$row['termination_css'] = "";
|
||||||
if ($row['termination_date'] != "") {
|
if ($row['termination_date'] != "") {
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ if ($page == 'overview') {
|
|||||||
$statsapp = 'webalizer';
|
$statsapp = 'webalizer';
|
||||||
}
|
}
|
||||||
$row = [
|
$row = [
|
||||||
'domain' => $idna_convert->decode($parentdomain)
|
'domain' => $idna_convert->decode($parentdomain ?? '')
|
||||||
];
|
];
|
||||||
eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_delimiter") . "\";");
|
eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_delimiter") . "\";");
|
||||||
|
|
||||||
@@ -472,8 +472,8 @@ if ($page == 'overview') {
|
|||||||
function formatDomainEntry(&$row, &$idna_convert)
|
function formatDomainEntry(&$row, &$idna_convert)
|
||||||
{
|
{
|
||||||
$row['domain'] = $idna_convert->decode($row['domain']);
|
$row['domain'] = $idna_convert->decode($row['domain']);
|
||||||
$row['aliasdomain'] = $idna_convert->decode($row['aliasdomain']);
|
$row['aliasdomain'] = $idna_convert->decode($row['aliasdomain'] ?? '');
|
||||||
$row['domainalias'] = $idna_convert->decode($row['domainalias']);
|
$row['domainalias'] = $idna_convert->decode($row['domainalias'] ?? '');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check for set ssl-certs to show different state-icons
|
* check for set ssl-certs to show different state-icons
|
||||||
@@ -503,7 +503,7 @@ function formatDomainEntry(&$row, &$idna_convert)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$row['termination_date'] = str_replace("0000-00-00", "", $row['termination_date']);
|
$row['termination_date'] = str_replace("0000-00-00", "", $row['termination_date'] ?? '');
|
||||||
|
|
||||||
$row['termination_css'] = "";
|
$row['termination_css'] = "";
|
||||||
if ($row['termination_date'] != "") {
|
if ($row['termination_date'] != "") {
|
||||||
|
|||||||
@@ -723,7 +723,7 @@ opcache.validate_timestamps'),
|
|||||||
('panel', 'logo_image_login', ''),
|
('panel', 'logo_image_login', ''),
|
||||||
('panel', 'logo_overridetheme', '0'),
|
('panel', 'logo_overridetheme', '0'),
|
||||||
('panel', 'logo_overridecustom', '0'),
|
('panel', 'logo_overridecustom', '0'),
|
||||||
('panel', 'version', '0.10.34'),
|
('panel', 'version', '0.10.36'),
|
||||||
('panel', 'db_version', '202112310');
|
('panel', 'db_version', '202112310');
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -28,5 +28,5 @@ try {
|
|||||||
\Froxlor\Cli\ConfigServicesCmd::processParameters($argc, $argv);
|
\Froxlor\Cli\ConfigServicesCmd::processParameters($argc, $argv);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
\Froxlor\Cli\ConfigServicesCmd::printerr($e->getMessage());
|
\Froxlor\Cli\ConfigServicesCmd::printerr($e->getMessage());
|
||||||
exit 1;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,5 +28,5 @@ try {
|
|||||||
\Froxlor\Cli\SwitchServerIpCmd::processParameters($argc, $argv);
|
\Froxlor\Cli\SwitchServerIpCmd::processParameters($argc, $argv);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
\Froxlor\Cli\SwitchServerIpCmd::printerr($e->getMessage());
|
\Froxlor\Cli\SwitchServerIpCmd::printerr($e->getMessage());
|
||||||
exit 1;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -975,3 +975,24 @@ if (\Froxlor\Froxlor::isFroxlorVersion('0.10.33')) {
|
|||||||
showUpdateStep("Updating from 0.10.33 to 0.10.34", false);
|
showUpdateStep("Updating from 0.10.33 to 0.10.34", false);
|
||||||
\Froxlor\Froxlor::updateToVersion('0.10.34');
|
\Froxlor\Froxlor::updateToVersion('0.10.34');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (\Froxlor\Froxlor::isFroxlorVersion('0.10.34')) {
|
||||||
|
showUpdateStep("Updating from 0.10.34 to 0.10.34.1", false);
|
||||||
|
\Froxlor\Froxlor::updateToVersion('0.10.34.1');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (\Froxlor\Froxlor::isFroxlorVersion('0.10.34.1')) {
|
||||||
|
showUpdateStep("Updating from 0.10.34.1 to 0.10.35", false);
|
||||||
|
\Froxlor\Froxlor::updateToVersion('0.10.35');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (\Froxlor\Froxlor::isFroxlorVersion('0.10.35')) {
|
||||||
|
showUpdateStep("Updating from 0.10.35 to 0.10.35.1", false);
|
||||||
|
\Froxlor\Froxlor::updateToVersion('0.10.35.1');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (\Froxlor\Froxlor::isFroxlorVersion('0.10.35.1')) {
|
||||||
|
showUpdateStep("Updating from 0.10.35.1 to 0.10.36", false);
|
||||||
|
\Froxlor\Froxlor::updateToVersion('0.10.36');
|
||||||
|
}
|
||||||
|
|||||||
@@ -472,7 +472,7 @@ class Admins extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
|
|||||||
// parameters
|
// parameters
|
||||||
$name = $this->getParam('name', true, $result['name']);
|
$name = $this->getParam('name', true, $result['name']);
|
||||||
$idna_convert = new \Froxlor\Idna\IdnaWrapper();
|
$idna_convert = new \Froxlor\Idna\IdnaWrapper();
|
||||||
$email = $this->getParam('email', true, $idna_convert->decode($result['email']));
|
$email = $this->getParam('email', true, $idna_convert->decode($result['email'] ?? ''));
|
||||||
$password = $this->getParam('admin_password', true, '');
|
$password = $this->getParam('admin_password', true, '');
|
||||||
$def_language = $this->getParam('def_language', true, $result['def_language']);
|
$def_language = $this->getParam('def_language', true, $result['def_language']);
|
||||||
$custom_notes = $this->getParam('custom_notes', true, $result['custom_notes']);
|
$custom_notes = $this->getParam('custom_notes', true, $result['custom_notes']);
|
||||||
|
|||||||
@@ -950,7 +950,7 @@ class Customers extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resource
|
|||||||
$move_to_admin = (int) ($this->getParam('move_to_admin', true, 0));
|
$move_to_admin = (int) ($this->getParam('move_to_admin', true, 0));
|
||||||
|
|
||||||
$idna_convert = new \Froxlor\Idna\IdnaWrapper();
|
$idna_convert = new \Froxlor\Idna\IdnaWrapper();
|
||||||
$email = $this->getParam('email', true, $idna_convert->decode($result['email']));
|
$email = $this->getParam('email', true, $idna_convert->decode($result['email'] ?? ''));
|
||||||
$name = $this->getParam('name', true, $result['name']);
|
$name = $this->getParam('name', true, $result['name']);
|
||||||
$firstname = $this->getParam('firstname', true, $result['firstname']);
|
$firstname = $this->getParam('firstname', true, $result['firstname']);
|
||||||
$company_required = empty($result['company']) && ((! empty($name) && empty($firstname)) || (empty($name) && ! empty($firstname)) || (empty($name) && empty($firstname)));
|
$company_required = empty($result['company']) && ((! empty($name) && empty($firstname)) || (empty($name) && ! empty($firstname)) || (empty($name) && empty($firstname)));
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ class EmailAccounts extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Reso
|
|||||||
'NAME' => $customer['name'],
|
'NAME' => $customer['name'],
|
||||||
'FIRSTNAME' => $customer['firstname'],
|
'FIRSTNAME' => $customer['firstname'],
|
||||||
'COMPANY' => $customer['company'],
|
'COMPANY' => $customer['company'],
|
||||||
|
'USERNAME' => $customer['loginname'],
|
||||||
'CUSTOMER_NO' => $customer['customernumber']
|
'CUSTOMER_NO' => $customer['customernumber']
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -243,6 +243,7 @@ class Ftps extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEntit
|
|||||||
'NAME' => $customer['name'],
|
'NAME' => $customer['name'],
|
||||||
'FIRSTNAME' => $customer['firstname'],
|
'FIRSTNAME' => $customer['firstname'],
|
||||||
'COMPANY' => $customer['company'],
|
'COMPANY' => $customer['company'],
|
||||||
|
'USERNAME' => $customer['loginname'],
|
||||||
'CUSTOMER_NO' => $customer['customernumber'],
|
'CUSTOMER_NO' => $customer['customernumber'],
|
||||||
'USR_NAME' => $username,
|
'USR_NAME' => $username,
|
||||||
'USR_PASS' => htmlentities(htmlentities($password)),
|
'USR_PASS' => htmlentities(htmlentities($password)),
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
|
|||||||
'NAME' => $userinfo['name'],
|
'NAME' => $userinfo['name'],
|
||||||
'FIRSTNAME' => $userinfo['firstname'],
|
'FIRSTNAME' => $userinfo['firstname'],
|
||||||
'COMPANY' => $userinfo['company'],
|
'COMPANY' => $userinfo['company'],
|
||||||
|
'USERNAME' => $userinfo['loginname'],
|
||||||
'CUSTOMER_NO' => $userinfo['customernumber'],
|
'CUSTOMER_NO' => $userinfo['customernumber'],
|
||||||
'DB_NAME' => $username,
|
'DB_NAME' => $username,
|
||||||
'DB_PASS' => htmlentities(htmlentities($password)),
|
'DB_PASS' => htmlentities(htmlentities($password)),
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Froxlor\Cron;
|
namespace Froxlor\Cron;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -18,6 +19,7 @@ namespace Froxlor\Cron;
|
|||||||
* @since 0.10.0
|
* @since 0.10.0
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Froxlor\Database\Database;
|
use Froxlor\Database\Database;
|
||||||
use Froxlor\Settings;
|
use Froxlor\Settings;
|
||||||
|
|
||||||
@@ -56,6 +58,12 @@ class CronConfig
|
|||||||
SELECT * FROM `" . TABLE_PANEL_CRONRUNS . "` WHERE `isactive` = '1'
|
SELECT * FROM `" . TABLE_PANEL_CRONRUNS . "` WHERE `isactive` = '1'
|
||||||
");
|
");
|
||||||
|
|
||||||
|
$binpath = Settings::Get("system.croncmdline");
|
||||||
|
// fallback as it is important
|
||||||
|
if ($binpath === null) {
|
||||||
|
$binpath = "/usr/bin/nice -n 5 /usr/bin/php -q";
|
||||||
|
}
|
||||||
|
|
||||||
$hour_delay = 0;
|
$hour_delay = 0;
|
||||||
$day_delay = 5;
|
$day_delay = 5;
|
||||||
$month_delay = 7;
|
$month_delay = 7;
|
||||||
@@ -96,20 +104,14 @@ class CronConfig
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create entry-line
|
// create entry-line
|
||||||
$binpath = Settings::Get("system.croncmdline");
|
|
||||||
// fallback as it is important
|
|
||||||
if ($binpath === null) {
|
|
||||||
$binpath = "/usr/bin/nice -n 5 /usr/bin/php -q";
|
|
||||||
}
|
|
||||||
|
|
||||||
$cronfile .= "root " . $binpath . " " . \Froxlor\FileDir::makeCorrectFile(\Froxlor\Froxlor::getInstallDir() . "/scripts/froxlor_master_cronjob.php") . " --" . $row_cronentry['cronfile'] . " 1> /dev/null\n";
|
$cronfile .= "root " . $binpath . " " . \Froxlor\FileDir::makeCorrectFile(\Froxlor\Froxlor::getInstallDir() . "/scripts/froxlor_master_cronjob.php") . " --" . $row_cronentry['cronfile'] . " 1> /dev/null\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// php sessionclean if enabled
|
// php sessionclean if enabled
|
||||||
if ((int) Settings::Get('phpfpm.enabled') == 1) {
|
if ((int) Settings::Get('phpfpm.enabled') == 1) {
|
||||||
$cronfile .= "# Look for and purge old sessions every 30 minutes".PHP_EOL;
|
$cronfile .= "# Look for and purge old sessions every 30 minutes" . PHP_EOL;
|
||||||
$cronfile .= "09,39 * * * * root " . \Froxlor\FileDir::makeCorrectFile(\Froxlor\Froxlor::getInstallDir() . "/scripts/php-sessionclean.php") . " --froxlor-dir=" . escapeshellarg(\Froxlor\Froxlor::getInstallDir()) . " 1> /dev/null" . PHP_EOL;
|
$cronfile .= "09,39 * * * * root " . $binpath . " " . \Froxlor\FileDir::makeCorrectFile(\Froxlor\Froxlor::getInstallDir() . "/scripts/php-sessionclean.php") . " --froxlor-dir=" . escapeshellarg(\Froxlor\Froxlor::getInstallDir()) . " 1> /dev/null" . PHP_EOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\Froxlor\FileDir::isFreeBSD()) {
|
if (\Froxlor\FileDir::isFreeBSD()) {
|
||||||
@@ -127,7 +129,7 @@ class CronConfig
|
|||||||
$newcrontab = "";
|
$newcrontab = "";
|
||||||
foreach ($crontablines as $ctl) {
|
foreach ($crontablines as $ctl) {
|
||||||
$ctl = trim($ctl);
|
$ctl = trim($ctl);
|
||||||
if (! empty($ctl) && ! preg_match("/(.*)froxlor_master_cronjob\.php(.*)/", $ctl)) {
|
if (!empty($ctl) && !preg_match("/(.*)froxlor_master_cronjob\.php(.*)/", $ctl)) {
|
||||||
$newcrontab .= $ctl . "\n";
|
$newcrontab .= $ctl . "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -773,6 +773,7 @@ class Apache extends HttpConfigBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Settings::Get('system.logfiles_piped') == '1' && Settings::Get('system.logfiles_script') != '') {
|
if (Settings::Get('system.logfiles_piped') == '1' && Settings::Get('system.logfiles_script') != '') {
|
||||||
|
if ($domain['writeerrorlog']) {
|
||||||
// replace for error_log
|
// replace for error_log
|
||||||
$command = \Froxlor\PhpHelper::replaceVariables(Settings::Get('system.logfiles_script'), array(
|
$command = \Froxlor\PhpHelper::replaceVariables(Settings::Get('system.logfiles_script'), array(
|
||||||
'LOGFILE' => $error_log,
|
'LOGFILE' => $error_log,
|
||||||
@@ -780,6 +781,10 @@ class Apache extends HttpConfigBase
|
|||||||
'CUSTOMER' => $domain['loginname']
|
'CUSTOMER' => $domain['loginname']
|
||||||
));
|
));
|
||||||
$logfiles_text .= ' ErrorLog "|' . $command . "\"\n";
|
$logfiles_text .= ' ErrorLog "|' . $command . "\"\n";
|
||||||
|
} else {
|
||||||
|
$logfiles_text .= ' ErrorLog "' . $error_log . '"' . "\n";
|
||||||
|
}
|
||||||
|
if ($domain['writeaccesslog']) {
|
||||||
// replace for access_log
|
// replace for access_log
|
||||||
$command = \Froxlor\PhpHelper::replaceVariables(Settings::Get('system.logfiles_script'), array(
|
$command = \Froxlor\PhpHelper::replaceVariables(Settings::Get('system.logfiles_script'), array(
|
||||||
'LOGFILE' => $access_log,
|
'LOGFILE' => $access_log,
|
||||||
@@ -787,6 +792,9 @@ class Apache extends HttpConfigBase
|
|||||||
'CUSTOMER' => $domain['loginname']
|
'CUSTOMER' => $domain['loginname']
|
||||||
));
|
));
|
||||||
$logfiles_text .= ' CustomLog "|' . $command . '" ' . $logtype . "\n";
|
$logfiles_text .= ' CustomLog "|' . $command . '" ' . $logtype . "\n";
|
||||||
|
} else {
|
||||||
|
$logfiles_text .= ' CustomLog "' . $access_log . '" ' . $logtype . "\n";
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$logfiles_text .= ' ErrorLog "' . $error_log . '"' . "\n";
|
$logfiles_text .= ' ErrorLog "' . $error_log . '"' . "\n";
|
||||||
$logfiles_text .= ' CustomLog "' . $access_log . '" ' . $logtype . "\n";
|
$logfiles_text .= ' CustomLog "' . $access_log . '" ' . $logtype . "\n";
|
||||||
|
|||||||
@@ -635,6 +635,9 @@ EOC;
|
|||||||
$acmesh_result = \Froxlor\FileDir::safe_exec(self::getAcmeSh() . " --upgrade --auto-upgrade 0");
|
$acmesh_result = \Froxlor\FileDir::safe_exec(self::getAcmeSh() . " --upgrade --auto-upgrade 0");
|
||||||
// check for activated cron
|
// check for activated cron
|
||||||
$acmesh_result2 = \Froxlor\FileDir::safe_exec(self::getAcmeSh() . " --install-cronjob");
|
$acmesh_result2 = \Froxlor\FileDir::safe_exec(self::getAcmeSh() . " --install-cronjob");
|
||||||
FroxlorLogger::getInstanceOf()->logAction(FroxlorLogger::CRON_ACTION, LOG_INFO, "Checking for LetsEncrypt client upgrades before renewing certificates:\n" . implode("\n", $acmesh_result) . "\n" . implode("\n", $acmesh_result2));
|
// set default CA
|
||||||
|
$acmesh_result3 = \Froxlor\FileDir::safe_exec(self::getAcmeSh() . " --set-default-ca --server " . self::$apiserver);
|
||||||
|
// log messages
|
||||||
|
FroxlorLogger::getInstanceOf()->logAction(FroxlorLogger::CRON_ACTION, LOG_INFO, "Checking for LetsEncrypt client upgrades before renewing certificates:\n" . implode("\n", $acmesh_result) . "\n" . implode("\n", $acmesh_result2) . "\n" . implode("\n", $acmesh_result3));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -760,6 +760,7 @@ class Lighttpd extends HttpConfigBase
|
|||||||
'customerid' => $domain['customerid']
|
'customerid' => $domain['customerid']
|
||||||
));
|
));
|
||||||
|
|
||||||
|
$diroption_text = '';
|
||||||
while ($row_htpasswds = $result_stmt->fetch(\PDO::FETCH_ASSOC)) {
|
while ($row_htpasswds = $result_stmt->fetch(\PDO::FETCH_ASSOC)) {
|
||||||
if ($this->auth_backend_loaded[$domain['ipandport']] != 'yes' && $this->auth_backend_loaded[$domain['ssl_ipandport']] != 'yes') {
|
if ($this->auth_backend_loaded[$domain['ipandport']] != 'yes' && $this->auth_backend_loaded[$domain['ssl_ipandport']] != 'yes') {
|
||||||
$filename = $domain['customerid'] . '.htpasswd';
|
$filename = $domain['customerid'] . '.htpasswd';
|
||||||
@@ -836,6 +837,7 @@ class Lighttpd extends HttpConfigBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$servernames_text = '';
|
||||||
for ($i = 0; $i < sizeof($server_string); $i ++) {
|
for ($i = 0; $i < sizeof($server_string); $i ++) {
|
||||||
$data = $server_string[$i];
|
$data = $server_string[$i];
|
||||||
|
|
||||||
|
|||||||
@@ -150,13 +150,17 @@ class BackupCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
$sql_root = Database::getSqlData();
|
$sql_root = Database::getSqlData();
|
||||||
Database::needRoot(false);
|
Database::needRoot(false);
|
||||||
|
|
||||||
|
$mysqlcnf_file = tempnam("/tmp", "frx");
|
||||||
|
$mysqlcnf = "[mysqldump]\npassword=".$sql_root['passwd']."\n";
|
||||||
|
file_put_contents($mysqlcnf_file, $mysqlcnf);
|
||||||
|
|
||||||
$has_dbs = false;
|
$has_dbs = false;
|
||||||
while ($row = $sel_stmt->fetch()) {
|
while ($row = $sel_stmt->fetch()) {
|
||||||
$cronlog->logAction(\Froxlor\FroxlorLogger::CRON_ACTION, LOG_DEBUG, 'shell> mysqldump -u ' . escapeshellarg($sql_root['user']) . ' -pXXXXX ' . $row['databasename'] . ' > ' . \Froxlor\FileDir::makeCorrectFile($tmpdir . '/mysql/' . $row['databasename'] . '_' . date('YmdHi', time()) . '.sql'));
|
$cronlog->logAction(\Froxlor\FroxlorLogger::CRON_ACTION, LOG_DEBUG, 'shell> mysqldump -u ' . escapeshellarg($sql_root['user']) . ' -pXXXXX ' . $row['databasename'] . ' > ' . \Froxlor\FileDir::makeCorrectFile($tmpdir . '/mysql/' . $row['databasename'] . '_' . date('YmdHi', time()) . '.sql'));
|
||||||
$bool_false = false;
|
$bool_false = false;
|
||||||
\Froxlor\FileDir::safe_exec('mysqldump -u ' . escapeshellarg($sql_root['user']) . ' -p' . $sql_root['passwd'] . ' ' . $row['databasename'] . ' > ' . \Froxlor\FileDir::makeCorrectFile($tmpdir . '/mysql/' . $row['databasename'] . '_' . date('YmdHi', time()) . '.sql'), $bool_false, array(
|
FileDir::safe_exec('mysqldump --defaults-file=' . escapeshellarg($mysqlcnf_file) .' -u ' . escapeshellarg($sql_root['user']) . ' ' . $row['databasename'] . ' > ' . FileDir::makeCorrectFile($tmpdir . '/mysql/' . $row['databasename'] . '_' . date('YmdHi', time()) . '.sql'), $bool_false, [
|
||||||
'>'
|
'>'
|
||||||
));
|
]);
|
||||||
$has_dbs = true;
|
$has_dbs = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,6 +168,8 @@ class BackupCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
$create_backup_tar_data .= './mysql ';
|
$create_backup_tar_data .= './mysql ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unlink($mysqlcnf_file);
|
||||||
|
|
||||||
unset($sql_root);
|
unset($sql_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -324,8 +324,8 @@ class TasksCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
|
|
||||||
if (file_exists($logsdir) && $logsdir != '/' && $logsdir != \Froxlor\FileDir::makeCorrectDir(Settings::Get('system.logfiles_directory')) && substr($logsdir, 0, strlen(Settings::Get('system.logfiles_directory'))) == Settings::Get('system.logfiles_directory')) {
|
if (file_exists($logsdir) && $logsdir != '/' && $logsdir != \Froxlor\FileDir::makeCorrectDir(Settings::Get('system.logfiles_directory')) && substr($logsdir, 0, strlen(Settings::Get('system.logfiles_directory'))) == Settings::Get('system.logfiles_directory')) {
|
||||||
// build up wildcard for webX-{access,error}.log{*}
|
// build up wildcard for webX-{access,error}.log{*}
|
||||||
$logfiles .= '-*';
|
$logsdir .= '-*';
|
||||||
\Froxlor\FileDir::safe_exec('rm -f ' . escapeshellarg($logfiles));
|
\Froxlor\FileDir::safe_exec('rm -f ' . escapeshellarg($logsdir));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class ReportsCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
if ((int) Settings::Get('system.report_trafficmax') > 0) {
|
if ((int) Settings::Get('system.report_trafficmax') > 0) {
|
||||||
// Warn the customers at xx% traffic-usage
|
// Warn the customers at xx% traffic-usage
|
||||||
$result_stmt = Database::prepare("
|
$result_stmt = Database::prepare("
|
||||||
SELECT `c`.`customerid`, `c`.`customernumber`, `c`.`adminid`, `c`.`name`, `c`.`firstname`,
|
SELECT `c`.`customerid`, `c`.`loginname`, `c`.`customernumber`, `c`.`adminid`, `c`.`name`, `c`.`firstname`,
|
||||||
`c`.`company`, `c`.`traffic`, `c`.`email`, `c`.`def_language`,
|
`c`.`company`, `c`.`traffic`, `c`.`email`, `c`.`def_language`,
|
||||||
`a`.`name` AS `adminname`, `a`.`email` AS `adminmail`,
|
`a`.`name` AS `adminname`, `a`.`email` AS `adminmail`,
|
||||||
(SELECT SUM(`t`.`http` + `t`.`ftp_up` + `t`.`ftp_down` + `t`.`mail`)
|
(SELECT SUM(`t`.`http` + `t`.`ftp_up` + `t`.`ftp_down` + `t`.`mail`)
|
||||||
@@ -60,6 +60,7 @@ class ReportsCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
'name' => $row['name'],
|
'name' => $row['name'],
|
||||||
'firstname' => $row['firstname'],
|
'firstname' => $row['firstname'],
|
||||||
'company' => $row['company'],
|
'company' => $row['company'],
|
||||||
|
'loginname' => $row['loginname'],
|
||||||
'customernumber' => $row['customernumber']
|
'customernumber' => $row['customernumber']
|
||||||
);
|
);
|
||||||
$replace_arr = array(
|
$replace_arr = array(
|
||||||
@@ -67,6 +68,7 @@ class ReportsCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
'NAME' => $rep_userinfo['name'],
|
'NAME' => $rep_userinfo['name'],
|
||||||
'FIRSTNAME' => $rep_userinfo['firstname'],
|
'FIRSTNAME' => $rep_userinfo['firstname'],
|
||||||
'COMPANY' => $rep_userinfo['company'],
|
'COMPANY' => $rep_userinfo['company'],
|
||||||
|
'USERNAME' => $rep_userinfo['loginname'],
|
||||||
'CUSTOMER_NO' => $rep_userinfo['customernumber'],
|
'CUSTOMER_NO' => $rep_userinfo['customernumber'],
|
||||||
'TRAFFIC' => round(($row['traffic'] / 1024), 2), /* traffic is stored in KB, template uses MB */
|
'TRAFFIC' => round(($row['traffic'] / 1024), 2), /* traffic is stored in KB, template uses MB */
|
||||||
'TRAFFICUSED' => round(($row['traffic_used'] / 1024), 2), /* traffic is stored in KB, template uses MB */
|
'TRAFFICUSED' => round(($row['traffic_used'] / 1024), 2), /* traffic is stored in KB, template uses MB */
|
||||||
@@ -354,7 +356,7 @@ class ReportsCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
* report about diskusage for customers
|
* report about diskusage for customers
|
||||||
*/
|
*/
|
||||||
$result_stmt = Database::query("
|
$result_stmt = Database::query("
|
||||||
SELECT `c`.`customerid`, `c`.`customernumber`, `c`.`adminid`, `c`.`name`, `c`.`firstname`,
|
SELECT `c`.`customerid`, `c`.`loginname`, `c`.`customernumber`, `c`.`adminid`, `c`.`name`, `c`.`firstname`,
|
||||||
`c`.`company`, `c`.`diskspace`, `c`.`diskspace_used`, `c`.`email`, `c`.`def_language`,
|
`c`.`company`, `c`.`diskspace`, `c`.`diskspace_used`, `c`.`email`, `c`.`def_language`,
|
||||||
`a`.`name` AS `adminname`, `a`.`email` AS `adminmail`
|
`a`.`name` AS `adminname`, `a`.`email` AS `adminmail`
|
||||||
FROM `" . TABLE_PANEL_CUSTOMERS . "` AS `c`
|
FROM `" . TABLE_PANEL_CUSTOMERS . "` AS `c`
|
||||||
@@ -373,6 +375,7 @@ class ReportsCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
'name' => $row['name'],
|
'name' => $row['name'],
|
||||||
'firstname' => $row['firstname'],
|
'firstname' => $row['firstname'],
|
||||||
'company' => $row['company'],
|
'company' => $row['company'],
|
||||||
|
'loginname' => $row['loginname'],
|
||||||
'customernumber' => $row['customernumber']
|
'customernumber' => $row['customernumber']
|
||||||
);
|
);
|
||||||
$replace_arr = array(
|
$replace_arr = array(
|
||||||
@@ -380,6 +383,7 @@ class ReportsCron extends \Froxlor\Cron\FroxlorCron
|
|||||||
'NAME' => $rep_userinfo['name'],
|
'NAME' => $rep_userinfo['name'],
|
||||||
'FIRSTNAME' => $rep_userinfo['firstname'],
|
'FIRSTNAME' => $rep_userinfo['firstname'],
|
||||||
'COMPANY' => $rep_userinfo['company'],
|
'COMPANY' => $rep_userinfo['company'],
|
||||||
|
'USERNAME' => $rep_userinfo['loginname'],
|
||||||
'CUSTOMER_NO' => $rep_userinfo['customernumber'],
|
'CUSTOMER_NO' => $rep_userinfo['customernumber'],
|
||||||
'DISKAVAILABLE' => round(($row['diskspace'] / 1024), 2), /* traffic is stored in KB, template uses MB */
|
'DISKAVAILABLE' => round(($row['diskspace'] / 1024), 2), /* traffic is stored in KB, template uses MB */
|
||||||
'DISKUSED' => round($row['diskspace_used'] / 1024, 2), /* traffic is stored in KB, template uses MB */
|
'DISKUSED' => round($row['diskspace_used'] / 1024, 2), /* traffic is stored in KB, template uses MB */
|
||||||
|
|||||||
@@ -494,7 +494,7 @@ class FileDir
|
|||||||
};
|
};
|
||||||
|
|
||||||
// create RecursiveIteratorIterator
|
// create RecursiveIteratorIterator
|
||||||
$its = new \RecursiveIteratorIterator(new \RecursiveCallbackFilterIterator(new System\IgnorantRecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS), $filter));
|
$its = new \RecursiveIteratorIterator(new \RecursiveCallbackFilterIterator(new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS), $filter));
|
||||||
// we can limit the recursion-depth, but will it be helpful or
|
// we can limit the recursion-depth, but will it be helpful or
|
||||||
// will people start asking "why do I only see 2 subdirectories, i want to use /a/b/c"
|
// will people start asking "why do I only see 2 subdirectories, i want to use /a/b/c"
|
||||||
// let's keep this in mind and see whether it will be useful
|
// let's keep this in mind and see whether it will be useful
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ final class Froxlor
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Main version variable
|
// Main version variable
|
||||||
const VERSION = '0.10.34';
|
const VERSION = '0.10.36';
|
||||||
|
|
||||||
// Database version (YYYYMMDDC where C is a daily counter)
|
// Database version (YYYYMMDDC where C is a daily counter)
|
||||||
const DBVERSION = '202112310';
|
const DBVERSION = '202112310';
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class PhpHelper
|
|||||||
$subject[$field] = self::htmlentitiesArray($subject[$field], $fields, $quote_style, $charset);
|
$subject[$field] = self::htmlentitiesArray($subject[$field], $fields, $quote_style, $charset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} elseif (!empty($subject)) {
|
||||||
$subject = htmlentities($subject, $quote_style, $charset);
|
$subject = htmlentities($subject, $quote_style, $charset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Froxlor\System;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If you use RecursiveDirectoryIterator with RecursiveIteratorIterator and run
|
|
||||||
* into UnexpectedValueException you may use this little hack to ignore those
|
|
||||||
* directories, such as lost+found on linux.
|
|
||||||
* (User "antennen" @ http://php.net/manual/en/class.recursivedirectoryiterator.php#101654)
|
|
||||||
*/
|
|
||||||
class IgnorantRecursiveDirectoryIterator extends \RecursiveDirectoryIterator
|
|
||||||
{
|
|
||||||
|
|
||||||
public function getChildren()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
return new IgnorantRecursiveDirectoryIterator($this->getPathname());
|
|
||||||
} catch (\UnexpectedValueException $e) {
|
|
||||||
return new \RecursiveArrayIterator(array());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -28,4 +28,5 @@ try {
|
|||||||
\Froxlor\Cli\PhpSessioncleanCmd::processParameters($argc, $argv);
|
\Froxlor\Cli\PhpSessioncleanCmd::processParameters($argc, $argv);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
\Froxlor\Cli\PhpSessioncleanCmd::printerr($e->getMessage());
|
\Froxlor\Cli\PhpSessioncleanCmd::printerr($e->getMessage());
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,11 +60,11 @@ $header
|
|||||||
<td><em>{CUSTOMER_NO}</em></td>
|
<td><em>{CUSTOMER_NO}</em></td>
|
||||||
<td>{$lng['admin']['templates']['CUSTOMER_NO']}</td>
|
<td>{$lng['admin']['templates']['CUSTOMER_NO']}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<if ($template == 'createcustomer')>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><em>{USERNAME}</em></td>
|
<td><em>{USERNAME}</em></td>
|
||||||
<td>{$lng['admin']['templates']['USERNAME']}</td>
|
<td>{$lng['admin']['templates']['USERNAME']}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<if ($template == 'createcustomer')>
|
||||||
<tr>
|
<tr>
|
||||||
<td><em>{PASSWORD}</em></td>
|
<td><em>{PASSWORD}</em></td>
|
||||||
<td>{$lng['admin']['templates']['PASSWORD']}</td>
|
<td>{$lng['admin']['templates']['PASSWORD']}</td>
|
||||||
@@ -92,10 +92,6 @@ $header
|
|||||||
</if>
|
</if>
|
||||||
</if>
|
</if>
|
||||||
<if ($template == 'password_reset')>
|
<if ($template == 'password_reset')>
|
||||||
<tr>
|
|
||||||
<td><em>{USERNAME}</em></td>
|
|
||||||
<td>{$lng['admin']['templates']['USERNAME']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><em>{LINK}</em></td>
|
<td><em>{LINK}</em></td>
|
||||||
<td>{$lng['admin']['templates']['LINK']}</td>
|
<td>{$lng['admin']['templates']['LINK']}</td>
|
||||||
|
|||||||
@@ -62,11 +62,11 @@ $header
|
|||||||
<td><em>{CUSTOMER_NO}</em></td>
|
<td><em>{CUSTOMER_NO}</em></td>
|
||||||
<td>{$lng['admin']['templates']['CUSTOMER_NO']}</td>
|
<td>{$lng['admin']['templates']['CUSTOMER_NO']}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<if ($template_name == 'createcustomer')>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><em>{USERNAME}</em></td>
|
<td><em>{USERNAME}</em></td>
|
||||||
<td>{$lng['admin']['templates']['USERNAME']}</td>
|
<td>{$lng['admin']['templates']['USERNAME']}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<if ($template_name == 'createcustomer')>
|
||||||
<tr>
|
<tr>
|
||||||
<td><em>{PASSWORD}</em></td>
|
<td><em>{PASSWORD}</em></td>
|
||||||
<td>{$lng['admin']['templates']['PASSWORD']}</td>
|
<td>{$lng['admin']['templates']['PASSWORD']}</td>
|
||||||
@@ -94,10 +94,6 @@ $header
|
|||||||
</if>
|
</if>
|
||||||
</if>
|
</if>
|
||||||
<if ($template_name == 'password_reset')>
|
<if ($template_name == 'password_reset')>
|
||||||
<tr>
|
|
||||||
<td><em>{USERNAME}</em></td>
|
|
||||||
<td>{$lng['admin']['templates']['USERNAME']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><em>{LINK}</em></td>
|
<td><em>{LINK}</em></td>
|
||||||
<td>{$lng['admin']['templates']['LINK']}</td>
|
<td>{$lng['admin']['templates']['LINK']}</td>
|
||||||
|
|||||||
1
templates/Sparkle/assets/css/main.css
vendored
1
templates/Sparkle/assets/css/main.css
vendored
@@ -82,6 +82,7 @@ header img {
|
|||||||
.login header img {
|
.login header img {
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
display: block;
|
display: block;
|
||||||
|
max-width: calc(100% - 20px);
|
||||||
}
|
}
|
||||||
|
|
||||||
img.small {
|
img.small {
|
||||||
|
|||||||
Reference in New Issue
Block a user