<?php
/**
 * Demo Oracle — selection de la base a consulter (POST).
 *
 * Le module complet resout ici le droit effectif de l'utilisateur sur le
 * couple groupe/sous-groupe, et le range en session : toutes les actions
 * d'ecriture s'y refereront ensuite. La demonstration n'ayant aucune action
 * d'ecriture, il n'y a pas de droit a resoudre — seulement une base a retenir.
 *
 * Le mot de passe n'est jamais mis en session : il est relu et dechiffre a
 * chaque ouverture de connexion (cf. demo_oracle_oci_open).
 */
require_once dirname(__DIR__, 2) . '/bootstrap.php';
require_once __DIR__ . '/lib/boot.php';

$auth->requireRole('demo_oracle_admin', 'demo_oracle_user');

if (!$moduleRegistry->canAccess('demo_oracle', $currentUser)) {
    http_response_code(403);
    include WEBROOT_PATH . '/includes/403.php';
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST'
    || !hash_equals(Session::get('csrf_token', ''), $_POST['csrf_token'] ?? '')) {
    Session::setFlash('error', t('msg.error'));
    header('Location: ' . demo_oracle_url('home'));
    exit;
}

$rec = demo_oracle_database($db, (int)($_POST['db_id'] ?? 0));
if (!$rec) {
    Session::setFlash('error', t('demo_oracle.db_not_found'));
    header('Location: ' . demo_oracle_url('home'));
    exit;
}

/* Le portefeuille et le mot de passe restent en base : la session ne porte que
   ce qui est affichable, plus le type de connexion, dont dependent la source
   ASH et le libelle de la barre. */
Session::set('demo_oracle_selected_db', [
    'id'           => (int)$rec['id'],
    'name'         => $rec['name'],
    'conn_type'    => $rec['conn_type']    ?? 'standard',
    'host'         => $rec['host']         ?? '',
    'port'         => (int)($rec['port']   ?? 1521),
    'service_name' => $rec['service_name'] ?? '',
    'tns_alias'    => $rec['tns_alias']    ?? '',
    'username'     => $rec['username']     ?? '',
]);

header('Location: ' . demo_oracle_url('report'));
exit;
