serve($request, $entry, 'download'); } public function export(Request $request, ArchiveEntry $entry): Response|View { return $this->serve($request, $entry, 'export'); } private function serve(Request $request, ArchiveEntry $entry, string $action): Response|View { abort_if($entry->isTombstoned(), 410, 'Der Eintrag ist nach Fristablauf gelöscht (Tombstone).'); $purpose = trim((string) $request->input('purpose', '')); if ($purpose === '') { return view('admin.archive.purpose', ['entry' => $entry, 'action' => $action]); } $bytes = $action === 'export' ? $this->archive->export($entry, $request->user(), $purpose) : $this->archive->open($entry, $request->user(), $purpose); $name = sprintf('beweisarchiv-%d-%s.zip', $entry->getKey(), $action === 'export' ? 'export' : 'payload'); return response($bytes, 200, [ 'Content-Type' => 'application/zip', 'Content-Disposition' => 'attachment; filename="'.$name.'"', 'Cache-Control' => 'private, no-store', 'X-Content-Type-Options' => 'nosniff', ]); } }