Files
Investidor-V2/tools/portal-onboarding-release-inspect.php
nala 287e991486
tests / ci (push) Waiting to run
oportunidades 7
2026-10-13 11:40:29 +02:00

27 lines
3.2 KiB
PHP

<?php
// Destination: configuration loading and PostgreSQL READ ONLY; no provider or mail bootstrap.
ini_set('zend.exception_ignore_args', '1');
$loader = require dirname(__DIR__).'/vendor/autoload.php';
$root = dirname(__DIR__);
$app = require $root.'/bootstrap/app.php';
(new Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables)->bootstrap($app);
(new Illuminate\Foundation\Bootstrap\LoadConfiguration)->bootstrap($app);
$db = config('database.connections.'.config('database.default'));
throw_unless($db['driver']==='pgsql' && empty($db['url']) && in_array($db['host'],['127.0.0.1','localhost'],true) && (int)$db['port']===5432 && $db['database']==='investemoz', RuntimeException::class,'Destination refused.');
$pdo = new PDO('pgsql:host='.$db['host'].';port='.$db['port'].';dbname='.$db['database'],$db['username'],$db['password'],[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]);
$pdo->exec('BEGIN READ ONLY');
$proof = ['at'=>gmdate('c'),'target'=>$pdo->query("SELECT current_database() AS database,inet_server_port() AS port,current_setting('transaction_read_only') AS read_only")->fetch(PDO::FETCH_ASSOC),
'config_cached'=>$app->configurationIsCached(), 'composer_authoritative'=>$loader->isClassMapAuthoritative() ?? null,
'session'=>['driver'=>config('session.driver'),'cookie'=>config('session.cookie'),'domain'=>config('session.domain'),'path'=>config('session.path'),'secure'=>config('session.secure'),'same_site'=>config('session.same_site')],
'app_url'=>config('app.url'),'app_cipher'=>config('app.cipher'),'app_name'=>config('app.name'),
'flags'=>[], 'installed'=>[], 'counts'=>[], 'source_writes'=>0,'providers_booted'=>false,'messages_sent'=>0];
foreach (['profile_administration_enabled','profile_access_enabled','opportunity_dashboard_access_enabled','opportunity_specialized_drafts_enabled','opportunity_modular_profiles_qa_enabled','legacy_content_qa_enabled','opportunity_notifications_enabled','organization_country_enabled'] as $name) $proof['flags'][$name]=(bool)config('portal.'.$name,false);
$proof['installed']=$pdo->query("SELECT migration FROM migrations WHERE migration IN ('2026_10_09_030000_extend_opportunity_resources','2026_10_10_040000_create_portal_profile_authorization','2026_10_10_050000_extend_organization_country','2026_10_09_190000_prepare_investor_path') ORDER BY migration")->fetchAll(PDO::FETCH_COLUMN);
foreach (['users','organizations','memberships','portal_role_assignments','portal_profile_requests','jobs','failed_jobs'] as $table) $proof['counts'][$table]=(int)$pdo->query('SELECT count(*) FROM "'.$table.'"')->fetchColumn();
$proof['superuser_pair']=$pdo->query('SELECT first_user_id,second_user_id,version FROM portal_superuser_pair')->fetchAll(PDO::FETCH_ASSOC);
$proof['binary_key_columns']=$pdo->query("SELECT table_name,column_name FROM information_schema.columns WHERE table_schema='public' AND column_name IN ('storage_key','storage_path') ORDER BY table_name,column_name")->fetchAll(PDO::FETCH_ASSOC);
$pdo->exec('ROLLBACK');
file_put_contents($root.'/storage/app/private/investmoz-v2/portal-audit/onboarding-release-readonly.json',json_encode($proof,JSON_PRETTY_PRINT|JSON_THROW_ON_ERROR));
echo json_encode($proof,JSON_THROW_ON_ERROR).PHP_EOL;