Compare commits

...

7 Commits

Author SHA1 Message Date
Michael Kaufmann
1467dab58f set version to 2.1.0 for upcoming stable release
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-12-08 11:48:32 +01:00
Michael Kaufmann
3a8f48de35 check subclass for cli commands to be \Symfony\Component\Console\Command\Command as the installcommand does not use \Froxlor\Cli\CliCommand
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-12-07 11:16:53 +01:00
Michael Kaufmann
46391c06ec Merge branch 'main' of github.com:Froxlor/Froxlor 2023-12-06 08:11:17 +01:00
dependabot[bot]
7103f7dd51 Bump vite from 4.4.11 to 4.4.12 (#1201)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.11 to 4.4.12.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.4.12/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.4.12/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-06 08:11:01 +01:00
Michael Kaufmann
9fc1dfee41 better check for invalid cli classes
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-12-05 12:50:57 +01:00
Michael Kaufmann
82dc76fdc6 fix wrong escaping of backslash in class-names when updating cronjobs_run table; add missing validateFormField-method for type 'image' (needs to be present but image-validation is handled elsewhere
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-12-05 11:16:41 +01:00
Michael Kaufmann
02ae52e3df remove old files in updater; avoid including old cli files in froxlor-cli; fix css for card list-groups
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
2023-12-05 10:22:12 +01:00
11 changed files with 113 additions and 38 deletions

View File

@@ -2,7 +2,8 @@ name: build-documentation
on:
release:
types: [published]
# only run for stable releases
types: [released]
jobs:
build_docs:

View File

@@ -43,7 +43,12 @@ require dirname(__DIR__) . '/lib/tables.inc.php';
$application = new Application('froxlor-cli', Froxlor::getFullVersion());
// files that are no commands
$fileIgnoreList = ['CliCommand.php', 'index.html', 'install.functions.php'];
$fileIgnoreList = [
// Current non-command files
'CliCommand.php',
'index.html',
'install.functions.php',
];
// directory of commands to include
$cmd_files = glob(Froxlor::getInstallDir() . '/lib/Froxlor/Cli/*.php');
@@ -56,7 +61,7 @@ foreach ($cmd_files as $cmdFile) {
// create class-name including namespace
$cmdClass = "\\Froxlor\\Cli\\" . substr(basename($cmdFile), 0, -4);
// check whether it exists
if (class_exists($cmdClass)) {
if (class_exists($cmdClass) && is_subclass_of($cmdClass, '\Symfony\Component\Console\Command\Command')) {
// add to cli application
$application->add(new $cmdClass());
}

View File

@@ -678,7 +678,7 @@ opcache.validate_timestamps'),
('system', 'distribution', ''),
('system', 'update_channel', 'stable'),
('system', 'updatecheck_data', ''),
('system', 'update_notify_last', '2.1.0-rc3'),
('system', 'update_notify_last', '2.1.0'),
('system', 'traffictool', 'goaccess'),
('system', 'req_limit_per_interval', 60),
('system', 'req_limit_interval', 60),
@@ -727,7 +727,7 @@ opcache.validate_timestamps'),
('panel', 'settings_mode', '0'),
('panel', 'menu_collapsed', '1'),
('panel', 'version', '2.1.0-rc3'),
('panel', 'db_version', '202311260');
('panel', 'db_version', '202312050');
DROP TABLE IF EXISTS `panel_tasks`;

View File

@@ -67,15 +67,18 @@ if (Froxlor::isFroxlorVersion('2.0.24')) {
}
Update::showUpdateStep("Adjusting cronjobs");
Database::query("
$cfupd_stmt = Database::prepare("
UPDATE `" . TABLE_PANEL_CRONRUNS . "` SET
`module`= 'froxlor/export',
`cronfile` = 'export',
`cronclass` = '\\Froxlor\\Cron\\System\\ExportCron',
`cronclass` = :cc,
`interval` = '1 HOUR',
`desc_lng_key` = 'cron_export'
WHERE `module` = 'froxlor/backup'
");
Database::pexecute($cfupd_stmt, [
'cc' => '\\Froxlor\\Cron\\System\\ExportCron'
]);
Update::lastStepStatus(0);
Update::showUpdateStep("Adjusting system for data-export function");
@@ -130,8 +133,8 @@ if (Froxlor::isDatabaseVersion('202305240')) {
$current_fileextension = Settings::Get('system.index_file_extension');
Database::query("DELETE FROM `" . TABLE_PANEL_SETTINGS . "` WHERE `settinggroup`= 'system' AND `varname`= 'index_file_extension'");
Database::query("ALTER TABLE `" . TABLE_PANEL_TEMPLATES . "` ADD `file_extension` varchar(50) NOT NULL default 'html';");
if (strtolower(trim($current_fileextension)) != 'html') {
$stmt = Database::prepare("UPDATE TABLE `" . TABLE_PANEL_TEMPLATES . "` SET `file_extension` = :ext WHERE `templategroup` = 'files'");
if (!empty(trim($current_fileextension)) && strtolower(trim($current_fileextension)) != 'html') {
$stmt = Database::prepare("UPDATE `" . TABLE_PANEL_TEMPLATES . "` SET `file_extension` = :ext WHERE `templategroup` = 'files'");
Database::pexecute($stmt, ['ext' => strtolower(trim($current_fileextension))]);
}
Update::lastStepStatus(0);
@@ -143,3 +146,65 @@ if (Froxlor::isFroxlorVersion('2.1.0-rc2')) {
Update::showUpdateStep("Updating from 2.1.0-rc2 to 2.1.0-rc3", false);
Froxlor::updateToVersion('2.1.0-rc3');
}
if (Froxlor::isDatabaseVersion('202311260')) {
Update::showUpdateStep("Cleaning up old files");
$to_clean = array(
"install/updates/froxlor/update_2.x.inc.php",
"install/updates/preconfig/preconfig_2.x.inc.php",
"lib/Froxlor/Api/Commands/CustomerBackups.php",
"lib/Froxlor/Cli/Action",
"lib/Froxlor/Cli/Action.php",
"lib/Froxlor/Cli/CmdLineHandler.php",
"lib/Froxlor/Cli/ConfigServicesCmd.php",
"lib/Froxlor/Cli/PhpSessioncleanCmd.php",
"lib/Froxlor/Cli/SwitchServerIpCmd.php",
"lib/Froxlor/Cli/UpdateCliCmd.php",
"lib/Froxlor/Cron/System/BackupCron.php",
"lib/formfields/customer/extras/formfield.backup.php",
"lib/tablelisting/customer/tablelisting.backups.php",
"templates/Froxlor/assets/mix-manifest.json",
"templates/Froxlor/assets/css",
"templates/Froxlor/assets/webfonts",
"templates/Froxlor/assets/js/main.js",
"templates/Froxlor/assets/js/main.js.LICENSE.txt",
"templates/Froxlor/src",
"templates/Froxlor/user/change_language.html.twig",
"templates/Froxlor/user/change_password.html.twig",
"templates/Froxlor/user/change_theme.html.twig",
"tests/Backup/CustomerBackupsTest.php"
);
$disabled = explode(',', ini_get('disable_functions'));
$exec_allowed = !in_array('exec', $disabled);
$del_list = "";
foreach ($to_clean as $filedir) {
$complete_filedir = Froxlor::getInstallDir() . $filedir;
if (file_exists($complete_filedir)) {
if ($exec_allowed) {
FileDir::safe_exec("rm -rf " . escapeshellarg($complete_filedir));
} else {
$del_list .= "rm -rf " . escapeshellarg($complete_filedir) . PHP_EOL;
}
}
}
if ($exec_allowed) {
Update::lastStepStatus(0);
} else {
if (empty($del_list)) {
// none of the files existed
Update::lastStepStatus(0);
} else {
Update::lastStepStatus(
1,
'manual commands needed',
'Please run the following commands manually:<br><pre>' . $del_list . '</pre>'
);
}
}
Froxlor::updateToDbVersion('202312050');
}
if (Froxlor::isFroxlorVersion('2.1.0-rc3')) {
Update::showUpdateStep("Updating from 2.1.0-rc3 to 2.1.0 stable", false);
Froxlor::updateToVersion('2.1.0');
}

View File

@@ -31,10 +31,10 @@ final class Froxlor
{
// Main version variable
const VERSION = '2.1.0-rc3';
const VERSION = '2.1.0';
// Database version (YYYYMMDDC where C is a daily counter)
const DBVERSION = '202311260';
const DBVERSION = '202312050';
// Distribution branding-tag (used for Debian etc.)
const BRANDING = '';

View File

@@ -265,4 +265,10 @@ class Data
return $returnvalue;
}
public static function validateFormFieldImage($fieldname, $fielddata, $newfieldvalue)
{
// validation is handled in \Froxlor\Settings\Store::storeSettingImage()
return true;
}
}

View File

@@ -115,14 +115,15 @@ if (!isset($sql) || !is_array($sql)) {
/**
* Show nice note if requested domain is "unknown" to froxlor and thus is being lead to its vhost
*/
if ($_SERVER['SERVER_NAME'] != Settings::Get('system.hostname') &&
$req_host = UI::getCookieHost();
if ($req_host != Settings::Get('system.hostname') &&
Settings::Get('panel.is_configured') == 1 &&
!filter_var($_SERVER['SERVER_NAME'], FILTER_VALIDATE_IP) && (
!filter_var($req_host, FILTER_VALIDATE_IP) && (
empty(Settings::Get('system.froxloraliases')) ||
(!empty(Settings::Get('system.froxloraliases')) && !in_array($_SERVER['SERVER_NAME'], array_map('trim', explode(',', Settings::Get('system.froxloraliases')))))
(!empty(Settings::Get('system.froxloraliases')) && !in_array($req_host, array_map('trim', explode(',', Settings::Get('system.froxloraliases')))))
)) {
// not the froxlor system-hostname, show info page for domains not configured in froxlor
$redirect_file = FileDir::getUnknownDomainTemplate($_SERVER['SERVER_NAME']);
$redirect_file = FileDir::getUnknownDomainTemplate($req_host);
header('Location: '.$redirect_file);
die();
}

8
package-lock.json generated
View File

@@ -19,7 +19,7 @@
"postcss": "^8.1.14",
"resolve-url-loader": "^5.0.0",
"sass": "^1.69.3",
"vite": "^4.0.0",
"vite": "^4.4.12",
"vue": "^3.2.37"
},
"engines": {
@@ -1156,9 +1156,9 @@
}
},
"node_modules/vite": {
"version": "4.4.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz",
"integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==",
"version": "4.4.12",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.4.12.tgz",
"integrity": "sha512-KtPlUbWfxzGVul8Nut8Gw2Qe8sBzWY+8QVc5SL8iRFnpnrcoCaNlzO40c1R6hPmcdTwIPEDkq0Y9+27a5tVbdQ==",
"dev": true,
"dependencies": {
"esbuild": "^0.18.10",

View File

@@ -19,7 +19,7 @@
"postcss": "^8.1.14",
"resolve-url-loader": "^5.0.0",
"sass": "^1.69.3",
"vite": "^4.0.0",
"vite": "^4.4.12",
"vue": "^3.2.37"
},
"engines": {

View File

@@ -22,6 +22,9 @@
}
}
}
.list-group-item {
background: $white;
}
@include color-mode(dark) {
.card, .list-group-item {

View File

@@ -51,8 +51,16 @@
<div class="row">
{% if userinfo.adminsession == 1 %}
<div
class="col-12 col-lg-6">
<div class="col-12 col-lg-6">
{% if userinfo.custom_notes|markdown is not empty and userinfo.custom_notes_show == 1 %}
<div class="card mb-3">
<div class="card-body">
{{ userinfo.custom_notes|markdown|raw }}
</div>
</div>
{% endif %}
{# system infos #}
<div class="card mb-3">
<div class="card-header">
@@ -135,22 +143,9 @@
{% endif %}
</ul>
</div>
{% if userinfo.custom_notes|markdown is not empty and userinfo.custom_notes_show == 1 %}
<div class="card mb-3">
<ul class="list-group list-group-flush">
<li class="list-group-item list-group-item-info d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
{{ userinfo.custom_notes|markdown|raw }}
</div>
</li>
</ul>
</div>
{% endif %}
</div>
{% else %}
<div
class="col-12 col-md-6 col-lg-4">
<div class="col-12 col-md-6 col-lg-4">
{# account info #}
<div class="card mb-3">
<div class="card-header">
@@ -212,8 +207,7 @@
</ul>
</div>
</div>
<div
class="col-12 col-md-6 col-lg-4">
<div class="col-12 col-md-6 col-lg-4">
{# customer details #}
<div class="card">
<div class="card-header">