Skip to content

Commit

Permalink
v0.9.11
Browse files Browse the repository at this point in the history
- Mejorada la documentación de Paginator y Email.
- Retocados los estilos.
- Añadidos templates Neon y Dark.
- RetroTemplate ahora se llama Retro.
  • Loading branch information
robertsallent committed Mar 29, 2024
1 parent b98246a commit f0adf2e
Show file tree
Hide file tree
Showing 20 changed files with 1,108 additions and 721 deletions.
31 changes: 31 additions & 0 deletions app/autoloadNS.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

/*
*
* Fichero: autoloadNS.php
* Autor: Robert Sallent
* Última mofidicación: 24/02/2023
*
* Permitirá la carga de clases automática a partir de un espacio de nombres
*
* Aún no se aplica, se usará más adelante cuando se actualicen los NS de las clases
* y se reestructure el sistema de carpetas y ficheros del framework.
*
*/

// al usar namespaces, llegará el nombre plenamente cualificado,
// esto es el namespace y el nombre de la clase.
function load(string $clase = ''){

// reemplaza las contrabarras por barras y añade la extensión
$ruta = str_replace('\\', '/', $clase).'.php';

// comprueba si el fichero existe e intenta cargarlo
if(is_readable($ruta))
require_once $ruta; // carga la clase
}

// registrar los autoloaders
spl_autoload_register("load");


74 changes: 37 additions & 37 deletions app/libraries/CSRF.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,50 +8,50 @@
* Para trabajar con tokens CSRF
*/

class CSRF{
class CSRF{

// crea un nuevo token CSRF y lo guarda en sesión
public static function create():string{

// crea un nuevo token CSRF y lo guarda en sesión
public static function create():string{

$value = md5(uniqid()); // calcula un nuevo token
// $value = base64_encode(openssl_random_pseudo_bytes(16));

Session::set('csrf_token', $value); // lo guarda en sesión

return $value;
}
$value = md5(uniqid()); // calcula un nuevo token
// $value = base64_encode(openssl_random_pseudo_bytes(16));

Session::set('csrf_token', $value); // lo guarda en sesión

// método que compara el token que se le pasa con el guardado en sesión
public static function check(string $token = null){

if(!$token)
throw new CsrfException("No se recibió el token CSRF.");

if(!Session::has('csrf_token'))
throw new CsrfException("No existe el token CSRF.");

if($token != Session::get('csrf_token'))
throw new CsrfException("No se pudo validar el token CSRF.");

}
return $value;
}


// método que compara el token que se le pasa con el guardado en sesión
public static function check(string $token = null){

if(!$token)
throw new CsrfException("No se recibió el token CSRF.");

// método que añade un token CSRF al formulario
public static function createInput():string{
if(!Session::has('csrf_token'))
throw new CsrfException("No existe el token CSRF.");

if($token != Session::get('csrf_token'))
throw new CsrfException("No se pudo validar el token CSRF.");

}


// método que añade un token CSRF al formulario
public static function createInput():string{

return Session::has('csrf_token') ?
"<input type='hidden' name='csrf_token' value='".Session::get('csrf_token')."'>" :
"";
}


// método que olvida un token CSRF
public static function forget(){
Session::forget('csrf_token');
}

return Session::has('csrf_token') ?
"<input type='hidden' name='csrf_token' value='".Session::get('csrf_token')."'>" :
"";
}


// método que olvida un token CSRF
public static function forget(){
Session::forget('csrf_token');
}

}



57 changes: 45 additions & 12 deletions app/libraries/Email.php
Original file line number Diff line number Diff line change
@@ -1,20 +1,46 @@
<?php

/* Clase: Email
*
* Nos facilitará la tarea de enviar emails
*
* Autor: Robert Sallent
* Última mofidicación: 24/02/2023
*
/**
* Clase Email
*
* Facilita la tarea de enviar emails.
*
* Última mofidicación: 24/02/2023
*
* @author Robert Sallent <robertsallent@gmail.com>
*/

class Email{

// PROPIEDADES
public string $date, $to, $from, $name, $subject, $message, $headers;
/** @var $date fecha actual */
public string $date;

/** @var $to destinatario del email */
public string $to;

/** @var $from remitente del email */
public string $from;

/** @var $name nombre del remitente */
public string $name;

// CONSTRUCTOR
/** @var $subject asunto del mensaje */
public string $subject;

/** @var $message cuerpo del mensaje */
public string $message;

/** @var $headers cabeceras adicionales */
public string $headers;

/**
* Constructor de la clase Email
*
* @param string $to destinatario del email
* @param string $from remitente del mensaje
* @param string $name nombre del remitente
* @param string $subject asunto del mensaje
* @param string $message cuerpo del mensaje
*/
public function __construct(
string $to, // destinatario
string $from, // remitente
Expand Down Expand Up @@ -42,8 +68,15 @@ public function __construct(
$this->message .= "<p>$message</p>";
}

// método que envía el email usando la función mail() de PHP
/**
* Envía el email usando la función mail() de PHP
*
* @return bool
*
* @throws EmailException en caso de no poder enviar el mensaje
*/
public function send():bool{

if(!mail($this->to, $this->subject, $this->message, $this->headers))
throw new EmailException("No se pudo enviar el email.");

Expand Down
18 changes: 11 additions & 7 deletions app/libraries/Login.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Implementa las operaciones de login/logout y también permite hacer comprobaciones
* sobre los distintos roles de que dispone el usuario identificado.
*
* Última revisión: 18/07/2023
* Última revisión: 27/03/2024
*
* @author Robert Sallent <robertsallent@gmail.com>
*/
Expand All @@ -30,9 +30,13 @@ public static function init(){
// recupera el usuario activo de la variable de sesión
self::$activeUser = Session::get('user') ?? NULL;

// Si hay operación pendiente pero no estamos en login, eliminaremos la operación pendiente.
// Es para los casos en los que el usuario no identificado no llega a identificarse al solicitar
// una URL protegida. Así evitamos que se haga la redirección en una identificación posterior
// Si hay operación pendiente pero no estamos en /Login, eliminaremos la operación pendiente.

// Para los casos en los que el usuario no identificado no llega a identificarse al solicitar
// una URL protegida y ser redirigido a login.

// Así evitamos que se haga la redirección en una identificación posterior

// TODO: comprobar si esto también funciona correctamente para la API.
if(Session::has('_pending_operation') && !Request::take()->urlBeginsWith('/Login'))
Session::forget('_pending_operation');
Expand All @@ -43,7 +47,7 @@ public static function init(){

/**
* Hace login, estableciendo el usuario.
* Se usa desde LoginController::login().
* Se usa desde LoginController::enter().
*
* @param Authenticable $user
*/
Expand All @@ -58,7 +62,7 @@ public static function set(Authenticable $user){
* Hace logout olvidando el usuario, limpiando la sesión, eliminando
* la cookie de sesión y destruyendo los datos del servidor.
*
* Se usa desde LoginController::logout().
* Se usa desde LogoutController::index().
*/
public static function clear(){
self::$activeUser = NULL;
Expand Down Expand Up @@ -125,7 +129,7 @@ public static function isAdmin(string $adminRole = ADMIN_ROLE):bool{


/**
* Comrueba si el usuario identificado tiene un rol determinado.
* Comprueba si el usuario identificado tiene un rol determinado.
*
* @param string $role rol a comprobar.
*
Expand Down

0 comments on commit f0adf2e

Please sign in to comment.