CURSO 2025/2026 -- DAW 2 -- I.E.S. LOS SAUCES
<?php
/**
* @author: Gonzalo Junquera Lorenzo
* @since: 16/11/2025
* 2. Desarrollo de un control de acceso con identificación del usuario basado en la función header() 
* y en el uso de una tabla “Usuario” de la base de datos. (PDO).
*/
// importamos el archivo con los datos de conexión
require_once '../conf/confDBPDO.php';

// Variable para comprobar si el usuario es válido
$usuarioValido = false;

// Si el usuario aún no se ha autentificado, pedimos las credenciales
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    // Enviar encabezado de autenticación para solicitar credenciales
    header('WWW-Authenticate: Basic realm="Contenido restringido"');
    header('HTTP/1.0 401 Unauthorized');

    // Mostrar mensaje si damos a cancelar
    echo '<h1>Acceso denegado. Se requiere autenticación.</h1>';
    exit;

} else { // Si ya ha enviado las credenciales, las comprobamos con la base de datos
    
    try {
        $usuarioPassword = $_SERVER['PHP_AUTH_USER'].$_SERVER['PHP_AUTH_PW'];

        // Conectamos a la base de datos
        $miDB = new PDO(DSN,USERNAME,PASSWORD);

        // Consulta preparada: Busca un usuario y contraseña coincidentes
        $sql = "SELECT * FROM T01_Usuario WHERE T01_CodUsuario = :usuario AND T01_Password = sha2(:contras,256)";
        $consulta = $miDB->prepare($sql);
        $consulta->execute([
            ':usuario' => $_SERVER['PHP_AUTH_USER'],
            ':contras' => $usuarioPassword
        ]);
        
        // Si encuentra una fila, las credenciales son correctas
        $resultado = $consulta->rowCount();
        if ($resultado == 1) {
            $usuarioValido = true;
        }

    } catch (PDOException $miExceptionPDO) {
        // temporalmente ponemos estos errores para que se muestren en pantalla
        echo 'Error: '.$miExceptionPDO->getMessage().'con código de error: '.$miExceptionPDO->getCode();
    } finally {
        unset($miDB);
    }   

    if (!$usuarioValido) {
        // Enviar encabezado de autenticación para solicitar credenciales
        header('WWW-Authenticate: Basic realm="Contenido restringido"');
        header('HTTP/1.0 401 Unauthorized');
        
        // Mostrar mensaje si damos a cancelar
        echo '<h1>Acceso denegado. Se requiere autenticación.</h1>';
        exit;
    }
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <link rel="icon" type="image/png" href="../webroot/media/favicon/favicon-32x32.png">
    <link rel="stylesheet" href="../webroot/css/estilos.css">
    <title>Gonzalo Junquera Lorenzo</title>
</head>
<body>
    <div id="aviso">CURSO 2025/2026 -- DAW 2 -- I.E.S. LOS SAUCES</div>
    <nav>
        <div><a href="../indexProyectoTema5.php">Volver</a></div>
        <h2> <a href="../indexProyectoTema5.php">Tema 5</a> - Ejercicio 02</h2>
        <h2>Gonzalo Junquera Lorenzo</h2>
    </nav>
    <main>
       <h2>Acceso correcto desde la base de datos</h2>
        <p>
            Has accedido como: <strong><?php echo $_SERVER['PHP_AUTH_USER']; ?></strong>
        </p>
        <p>
            Con la contraseña: <strong><?php echo $_SERVER['PHP_AUTH_PW']; ?></strong>
        </p>
    </main>  
</body>
</html>