Multi-user OSINT investigation tool with owner-controlled per-user and per-group access grants. Includes Sherlock, theHarvester, crt.sh, WHOIS, and ip-api.com collectors wired through a pluggable Runner/queue pipeline, investigation search, and printable/CSV/JSON reporting. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
69 lines
3.0 KiB
PHP
69 lines
3.0 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{{ $investigation->name }} — {{ __('Report') }}</title>
|
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
<style>
|
|
@media print {
|
|
.no-print { display: none !important; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="font-sans antialiased bg-white text-gray-900 p-8 max-w-4xl mx-auto">
|
|
<div class="no-print mb-6 flex justify-between items-center">
|
|
<a href="{{ route('investigations.show', $investigation) }}" class="text-sm text-indigo-600 hover:underline">
|
|
{{ __('Back to investigation') }}
|
|
</a>
|
|
<button onclick="window.print()" class="text-sm bg-gray-800 text-white px-3 py-1.5 rounded-md">
|
|
{{ __('Print / Save as PDF') }}
|
|
</button>
|
|
</div>
|
|
|
|
<h1 class="text-2xl font-bold">{{ $investigation->name }}</h1>
|
|
<p class="text-sm text-gray-500 mt-1">
|
|
{{ __('Owner') }}: {{ $investigation->owner->name }} ·
|
|
{{ __('Status') }}: {{ $investigation->status }} ·
|
|
{{ __('Generated') }}: {{ now()->toDayDateTimeString() }}
|
|
</p>
|
|
|
|
@if ($investigation->description)
|
|
<p class="mt-4 text-gray-700">{{ $investigation->description }}</p>
|
|
@endif
|
|
|
|
<h2 class="text-lg font-semibold mt-8 mb-3 border-b border-gray-300 pb-1">{{ __('Targets & Findings') }}</h2>
|
|
|
|
@forelse ($investigation->targets as $target)
|
|
<div class="mt-5 break-inside-avoid">
|
|
<p class="font-medium">
|
|
<span class="text-xs uppercase tracking-wide text-gray-500">{{ $target->type }}</span>
|
|
{{ $target->value }}
|
|
</p>
|
|
@if ($target->notes)
|
|
<p class="text-sm text-gray-600">{{ $target->notes }}</p>
|
|
@endif
|
|
|
|
@forelse ($target->findings as $finding)
|
|
<div class="ml-4 mt-2 text-sm">
|
|
<p>
|
|
<span class="font-medium">{{ $finding->source->name }}</span>
|
|
<span class="text-gray-500">({{ $finding->status }})</span>
|
|
</p>
|
|
@if ($finding->summary)
|
|
<p class="text-gray-700">{{ $finding->summary }}</p>
|
|
@endif
|
|
@if ($finding->error)
|
|
<p class="text-red-600">{{ $finding->error }}</p>
|
|
@endif
|
|
</div>
|
|
@empty
|
|
<p class="ml-4 mt-2 text-sm text-gray-400">{{ __('No lookups run yet.') }}</p>
|
|
@endforelse
|
|
</div>
|
|
@empty
|
|
<p class="text-gray-500">{{ __('No targets in this investigation.') }}</p>
|
|
@endforelse
|
|
</body>
|
|
</html>
|