30 lines
1.4 KiB
PHP
30 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Services\Malware\DocumentScanRetry;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class DocumentMalwareController extends Controller
|
|
{
|
|
public function retry(Request $request, string $id): RedirectResponse|JsonResponse
|
|
{
|
|
$result = app(DocumentScanRetry::class)->request($request->user(), $id);
|
|
$message = match ($result['outcome']) {
|
|
'accepted' => 'Pedido de análise aceite pelo serviço de envio. Acompanhe o estado do ficheiro até haver resultado.',
|
|
'duplicate' => 'Já existe uma reserva de análise para este ficheiro. Não foi enviado outro pedido. Acompanhe o estado antes de repetir.',
|
|
'stale' => 'O ficheiro ou o seu acesso mudou. Actualize a página para consultar o estado antes de repetir.',
|
|
'unconfirmed' => 'Não foi possível confirmar o envio da análise. Consulte o estado antes de repetir. Referência: '.$result['reference'],
|
|
default => 'Pedido preparado para envio após a confirmação da gravação. Acompanhe o estado do ficheiro.',
|
|
};
|
|
|
|
if ($request->expectsJson()) {
|
|
return response()->json([...$result, 'message' => $message], $result['outcome'] === 'unconfirmed' ? 503 : 200)->header('Cache-Control', 'no-store, private');
|
|
}
|
|
|
|
return back()->with($result['outcome'] === 'accepted' ? 'success' : 'warning', $message);
|
|
}
|
|
}
|