harden reset system

This commit is contained in:
team 1
2026-02-15 17:14:00 +01:00
parent 402838adfa
commit bf71ca07fa
4 changed files with 55 additions and 24 deletions

View File

@@ -19,6 +19,7 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Uid\Uuid;
use function function_exists;
#[Route('/admin/documents')]
class DocumentController extends AbstractController
@@ -60,7 +61,12 @@ class DocumentController extends AbstractController
}
#[Route('/new', name: 'admin_document_new')]
public function new(Request $request, DocumentService $documentService, FormatText $formatText): Response
public function new(
Request $request,
DocumentService $documentService,
FormatText $formatText,
ParameterBagInterface $params
): Response
{
if ($request->isMethod('POST')) {
@@ -74,7 +80,7 @@ class DocumentController extends AbstractController
return $this->redirectToRoute('admin_document_new');
}
$uploadDir = $this->getParameter('kernel.project_dir') . '/var/knowledge/uploads';
$uploadDir = $params->get('mto.vector.data.upload.path');
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
@@ -107,7 +113,8 @@ class DocumentController extends AbstractController
string $id,
Request $request,
EntityManagerInterface $em,
DocumentService $documentService
DocumentService $documentService,
ParameterBagInterface $params
): Response
{
@@ -126,7 +133,7 @@ class DocumentController extends AbstractController
return $this->redirectToRoute('admin_document_version_new', ['id' => $id]);
}
$uploadDir = $this->getParameter('kernel.project_dir') . '/var/knowledge/uploads';
$uploadDir = $params->get('mto.vector.data.upload.path');
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
@@ -250,7 +257,7 @@ class DocumentController extends AbstractController
);
// Best effort: wenn exec deaktiviert ist, sauber abbrechen.
if (!\function_exists('exec')) {
if (!function_exists('exec')) {
$jobService->markFailed($job, 'Server configuration does not allow background execution (exec disabled).');
$this->addFlash('error', 'Ingest konnte nicht asynchron gestartet werden (exec deaktiviert).');
return $this->redirectToRoute('admin_document_show', [
@@ -272,9 +279,16 @@ class DocumentController extends AbstractController
)]
public function resetCompleteSystem(ParameterBagInterface $params, Connection $connection): ?RedirectResponse
{
@unlink($params->get('mto.vector.data.path') . '/index.ndjson');
@unlink($params->get('mto.vector.data.path') . '/vector.index');
@unlink($params->get('mto.vector.data.path') . '/vector.index.meta.json');
if (!function_exists('exec')) {
$this->addFlash('danger', 'Der Reset konnte nicht gestartet werden (exec deaktiviert).');
return $this->redirectToRoute('admin_dashboard');
}
@unlink($params->get('mto.vector.data.ndjson.path'));
@unlink($params->get('mto.vector.data.vector_index.path'));
@unlink($params->get('mto.vector.data.vector_index_meta_json.path'));
exec('rm -rf ' . $params->get('mto.vector.data.upload.path'));
$sql = '
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE db.document;
@@ -287,6 +301,8 @@ class DocumentController extends AbstractController
SET FOREIGN_KEY_CHECKS = 1;
';
$connection->executeQuery($sql);
$this->addFlash('success', 'Das System wurde erfolgreich zurückgesetzt.');
return $this->redirectToRoute('admin_dashboard');
}
}