Files
Investidor-V2/tools/portal-audit-prepare-activation.php
nala 6ddafc95ba
tests / ci (push) Canceled after 0s
oportunidades 4
2026-10-10 07:03:59 +02:00

58 lines
4.1 KiB
PHP

<?php
use App\Services\OpportunityResourceInstallation;
use Illuminate\Contracts\Console\Kernel;
// Publishes evidence files only. Installation still requires an authenticated HTTP action.
require dirname(__DIR__).'/vendor/autoload.php';
$app = require dirname(__DIR__).'/bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
$dir = storage_path('app/private/investmoz-v2');
$read = function (string $file): array {
$text = file_get_contents($file);
if ($text === false) {
throw new RuntimeException('Missing evidence: '.basename($file));
}
return json_decode(preg_replace('/^\xEF\xBB\xBF/', '', $text), true, 512, JSON_THROW_ON_ERROR);
};
$backup = $read($dir.'/opportunity-resources-backup-proof.json');
$compatibility = $read($dir.'/opportunity-resources-compatibility.json');
$tests = $read($dir.'/portal-audit/phpunit-final.json');
$routeChecks = $read($dir.'/portal-audit/ensaios-rotas.json');
$hash = $app->make(OpportunityResourceInstallation::class)->fingerprint();
if (! ($backup['restore_verified'] ?? false) || ! ($backup['files_verified'] ?? false)
|| ($backup['target']['database'] ?? '') !== 'investemoz' || (int) ($backup['target']['port'] ?? 0) !== 5432
|| ! str_ends_with($backup['restored_target']['database'] ?? '', '_test') || (int) ($backup['restored_target']['port'] ?? 0) !== 55441
|| ($compatibility['target'] ?? []) !== $backup['restored_target']
|| ! ($compatibility['compatibility_verified'] ?? false) || ! ($compatibility['reversal_verified'] ?? false)
|| ($compatibility['code_hash'] ?? '') !== $hash
|| ($tests['result'] ?? '') !== 'passed' || (int) ($tests['tests'] ?? 0) < 1 || ($tests['passed'] ?? 0) !== ($tests['tests'] ?? 0)
|| ($tests['skipped'] ?? 0) !== 0 || ($routeChecks['failures'] ?? ['missing']) !== []
|| strtotime($backup['verified_at']) < time() - 86400
|| hash_file('sha256', $backup['dump_path']) !== $backup['sha256']
|| hash_file('sha256', $backup['files_path']) !== $backup['files_sha256']) {
throw new RuntimeException('Current backup, isolated reversal and QA evidence required; no activation proof written.');
}
$proof = [
'restore_verified' => true, 'compatibility_verified' => true, 'reversal_verified' => true,
'qa_passed' => true, 'code_hash' => $hash, 'target' => $backup['target'], 'verified_at' => $backup['verified_at'],
'dump_path' => $backup['dump_path'], 'sha256' => $backup['sha256'],
'qa_scope' => 'Schema compatibility/reversal, automated server QA and frontend build/type checks; not full visual or legal acceptance.',
'tests' => ['total' => $tests['tests'], 'passed' => $tests['passed'], 'assertions' => $tests['assertions'], 'skipped_real_clamd' => 0,
'source' => 'phpunit-final.json', 'scope' => 'Regression inventory only; not individual requirement or visual acceptance'],
'browser_current_version_verified' => false, 'full_portal_acceptance' => false,
'outstanding' => ['Current UI walkthroughs: browser unavailable', 'Portable ClamD healthy now; reboot startup and periodic updates require configuration', 'GD/WebP in active web PHP and each real derivative scan not verified', 'Official geometry QA import remains private; public map layers incomplete', 'Final review/publication and specialized opportunity contracts remain open'],
'active_writes' => 0,
];
$destination = $dir.'/opportunity-resources-activation-proof.json';
if (is_file($destination)) {
$archive = $dir.'/portal-audit/resources-activation-proof-'.gmdate('Ymd_His').'-'.bin2hex(random_bytes(3)).'.json';
if (! copy($destination, $archive)) {
throw new RuntimeException('Cannot preserve previous activation evidence.');
}
}
file_put_contents($destination, json_encode($proof, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));
file_put_contents($dir.'/portal-audit/activation-evidence.json', json_encode($proof, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));
echo json_encode(['prepared' => true, 'code_hash' => $hash, 'backup_date' => $backup['verified_at'], 'installed_by_this_tool' => false, 'authenticated_action_required' => true, 'browser_verified' => false], JSON_THROW_ON_ERROR).PHP_EOL;