Skip to content

Commit 0d03da6

Browse files
committed
Sanitizar todas las acciones con sus tipo de datos
1 parent a568be8 commit 0d03da6

File tree

1 file changed

+150
-134
lines changed

1 file changed

+150
-134
lines changed

routes/api.php

Lines changed: 150 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
// Sesiones PHP
1515
session_start();
1616

17+
// Finalizar ejecución en caso de método OPTIONS
1718
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
1819
exit;
1920
}
@@ -26,7 +27,14 @@
2627
// Verificar el método de la solicitud HTTP
2728
$requestMethod = $_SERVER['REQUEST_METHOD'];
2829

29-
// Funciones para las sesiones y roles
30+
// Funciones para la API
31+
32+
/**
33+
* La función "verificarSesion" verifica si el usuario está autenticado y devuelve verdadero si lo
34+
* está, de lo contrario envía una respuesta JSON con un mensaje de error y sale del script.
35+
*
36+
* @return - un valor booleano.
37+
*/
3038
function verificarSesion()
3139
{
3240
if (!isset($_SESSION['user_id']) || !$_SESSION['is_authenticated']) {
@@ -36,6 +44,13 @@ function verificarSesion()
3644
return true;
3745
}
3846

47+
/**
48+
* La función "verificarRol" verifica si el usuario tiene el rol requerido para realizar una
49+
* determinada acción.
50+
*
51+
* @param - rolRequerido El parámetro "rolRequerido" representa el rol requerido por un usuario para
52+
* realizar una determinada acción.
53+
*/
3954
function verificarRol($rolRequerido)
4055
{
4156
// Primero, verificamos si el usuario está autenticado
@@ -48,149 +63,150 @@ function verificarRol($rolRequerido)
4863
}
4964
}
5065

66+
/**
67+
* La función "validarParametro" comprueba si falta algún parámetro o tiene un tipo incorrecto y
68+
* devuelve verdadero si todo es válido.
69+
*
70+
* @param - parametro El parámetro "parámetro" es el valor que necesita ser validado. Puede ser de
71+
* cualquier tipo de datos.
72+
* @param - tipoEsperado El parámetro "tipoEsperado" es un parámetro opcional que especifica el tipo de
73+
* datos esperado del parámetro "parametro". Si se proporciona, la función comprobará si el tipo de
74+
* datos del parámetro "parámetro" coincide con el tipo esperado.
75+
*
76+
* @return - un valor booleano de verdadero.
77+
*/
78+
function validarParametro($parametro, $tipoEsperado = null) {
79+
if (!isset($parametro)) {
80+
jsonResponse(["message" => "Parámetro faltante"], 400);
81+
exit;
82+
}
83+
if ($tipoEsperado && gettype($parametro) !== $tipoEsperado) {
84+
jsonResponse(["message" => "Tipo de parámetro incorrecto"], 400);
85+
exit;
86+
}
87+
return true;
88+
}
5189

5290
// Procesar la solicitud según el método HTTP y la acción proporcionada
5391
switch ($requestMethod) {
54-
// Peticiones POST
5592
case 'POST':
56-
// Verificar si se proporciona una acción
57-
if (isset($_GET['action'])) {
58-
switch ($_GET['action']) {
59-
case 'register':
60-
// Registrar un usuario
61-
$response = $usuarioController->register($_POST);
62-
jsonResponse($response);
63-
break;
64-
case 'login':
65-
// Iniciar sesión de un usuario
66-
$response = $usuarioController->login($_POST);
67-
jsonResponse($response);
68-
break;
69-
case 'verify':
70-
// Verificar la cuenta de un usuario
71-
$response = $usuarioController->verify($_POST);
72-
jsonResponse($response);
73-
break;
74-
case 'logout':
75-
verificarSesion();
76-
$response = $usuarioController->logout();
77-
jsonResponse($response);
78-
break;
79-
case 'addRole':
80-
// Agregar un rol
81-
verificarSesion();
82-
verificarRol('admin');
83-
$response = $rolController->addRole($_POST);
84-
jsonResponse($response);
85-
break;
86-
case 'updateRole':
87-
// Actualizar un rol
88-
verificarSesion();
89-
verificarRol('admin');
90-
$response = $rolController->updateRole($_POST['id'], $_POST);
91-
break;
92-
case 'deleteRole':
93-
// Eliminar un rol
94-
verificarSesion();
95-
verificarRol('admin');
96-
$response = $rolController->deleteRole($_POST['id']);
97-
jsonResponse($response);
98-
break;
99-
case 'addPermission':
100-
// Agregar un permiso
101-
verificarSesion();
102-
verificarRol('admin');
103-
$response = $permisoController->addPermission($_POST);
104-
jsonResponse($response);
105-
break;
106-
case 'updatePermission':
107-
// Actualizar un permiso
108-
verificarSesion();
109-
verificarRol('admin');
110-
$response = $permisoController->updatePermission($_POST['id'], $_POST);
111-
jsonResponse($response);
112-
break;
113-
case 'deletePermission':
114-
// Eliminar un permiso
115-
verificarSesion();
116-
verificarRol('admin');
117-
$response = $permisoController->deletePermission($_POST['id']);
118-
jsonResponse($response);
119-
break;
120-
case 'updateProfile':
121-
// Actualizar el perfil del usuario
122-
verificarSesion();
123-
$response = $usuarioController->updateProfile($_SESSION['user_id'], $_POST);
124-
jsonResponse($response);
125-
break;
126-
default:
127-
// Acción no reconocida
128-
jsonResponse(["message" => "Acción no permitida"], 400);
129-
break;
130-
}
131-
} else {
132-
// No se proporcionó ninguna acción
133-
jsonResponse(["message" => "Acción no especificada"], 400);
93+
validarParametro($_GET['action'], 'string');
94+
switch ($_GET['action']) {
95+
case 'register':
96+
validarParametro($_POST);
97+
$response = $usuarioController->register($_POST);
98+
jsonResponse($response);
99+
break;
100+
case 'login':
101+
validarParametro($_POST);
102+
$response = $usuarioController->login($_POST);
103+
jsonResponse($response);
104+
break;
105+
case 'verify':
106+
validarParametro($_POST);
107+
$response = $usuarioController->verify($_POST);
108+
jsonResponse($response);
109+
break;
110+
case 'logout':
111+
verificarSesion();
112+
$response = $usuarioController->logout();
113+
jsonResponse($response);
114+
break;
115+
case 'addRole':
116+
verificarSesion();
117+
verificarRol('admin');
118+
validarParametro($_POST);
119+
$response = $rolController->addRole($_POST);
120+
jsonResponse($response);
121+
break;
122+
case 'updateRole':
123+
verificarSesion();
124+
verificarRol('admin');
125+
validarParametro($_POST['id'], 'string');
126+
$response = $rolController->updateRole($_POST['id'], $_POST);
127+
jsonResponse($response);
128+
break;
129+
case 'deleteRole':
130+
verificarSesion();
131+
verificarRol('admin');
132+
validarParametro($_POST['id'], 'string');
133+
$response = $rolController->deleteRole($_POST['id']);
134+
jsonResponse($response);
135+
break;
136+
case 'addPermission':
137+
verificarSesion();
138+
verificarRol('admin');
139+
validarParametro($_POST);
140+
$response = $permisoController->addPermission($_POST);
141+
jsonResponse($response);
142+
break;
143+
case 'updatePermission':
144+
verificarSesion();
145+
verificarRol('admin');
146+
validarParametro($_POST['id'], 'string');
147+
$response = $permisoController->updatePermission($_POST['id'], $_POST);
148+
jsonResponse($response);
149+
break;
150+
case 'deletePermission':
151+
verificarSesion();
152+
verificarRol('admin');
153+
validarParametro($_POST['id'], 'string');
154+
$response = $permisoController->deletePermission($_POST['id']);
155+
jsonResponse($response);
156+
break;
157+
case 'updateProfile':
158+
verificarSesion();
159+
validarParametro($_SESSION['user_id'], 'string');
160+
$response = $usuarioController->updateProfile($_SESSION['user_id'], $_POST);
161+
jsonResponse($response);
162+
break;
163+
default:
164+
jsonResponse(["message" => "Acción no permitida"], 400);
165+
break;
134166
}
135167
break;
136168

137-
// Peticiones GET
138169
case 'GET':
139-
if (isset($_GET['action'])) {
140-
switch ($_GET['action']) {
141-
case 'getAllRoles':
142-
// Devolver todos los roles
143-
verificarSesion();
144-
verificarRol('admin');
145-
$response = $rolController->getAllRoles();
146-
jsonResponse($response);
147-
break;
148-
case 'getRoleById':
149-
// Devolver un rol por su id
150-
verificarSesion();
151-
verificarRol('admin');
152-
if (!isset($_GET['id'])) {
153-
jsonResponse(["message" => "El parámetro 'id' es requerido"], 400);
154-
exit;
155-
}
156-
$response = $rolController->getRoleById($_GET['id']);
157-
jsonResponse($response);
158-
break;
159-
case 'getAllPermissions':
160-
// Devolver todos los permisos
161-
verificarSesion();
162-
verificarRol('admin');
163-
$response = $permisoController->getAllPermissions();
164-
jsonResponse($response);
165-
break;
166-
case 'getPermissionById':
167-
// Devolver un permiso por su id
168-
verificarSesion();
169-
verificarRol('admin');
170-
if (!isset($_GET['id'])) {
171-
jsonResponse(["message" => "El parámetro 'id' es requerido"], 400);
172-
exit;
173-
}
174-
$response = $permisoController->getPermissionById($_GET['id']);
175-
jsonResponse($response);
176-
break;
177-
case 'getProfile':
178-
// Devolver el perfil del usuario por el id de la sesión
179-
verificarSesion();
180-
$response = $usuarioController->getProfile($_SESSION['user_id']);
181-
jsonResponse($response);
182-
break;
183-
default:
184-
// Acción no reconocida
185-
jsonResponse(["message" => "Acción no permitida"], 400);
186-
break;
187-
}
188-
} else {
189-
jsonResponse(["message" => "Acción no especificada"], 400);
170+
validarParametro($_GET['action'], 'string');
171+
switch ($_GET['action']) {
172+
case 'getAllRoles':
173+
verificarSesion();
174+
verificarRol('admin');
175+
$response = $rolController->getAllRoles();
176+
jsonResponse($response);
177+
break;
178+
case 'getRoleById':
179+
verificarSesion();
180+
verificarRol('admin');
181+
validarParametro($_GET['id'], 'string');
182+
$response = $rolController->getRoleById($_GET['id']);
183+
jsonResponse($response);
184+
break;
185+
case 'getAllPermissions':
186+
verificarSesion();
187+
verificarRol('admin');
188+
$response = $permisoController->getAllPermissions();
189+
jsonResponse($response);
190+
break;
191+
case 'getPermissionById':
192+
verificarSesion();
193+
verificarRol('admin');
194+
validarParametro($_GET['id'], 'string');
195+
$response = $permisoController->getPermissionById($_GET['id']);
196+
jsonResponse($response);
197+
break;
198+
case 'getProfile':
199+
verificarSesion();
200+
validarParametro($_SESSION['user_id'], 'string');
201+
$response = $usuarioController->getProfile($_SESSION['user_id']);
202+
jsonResponse($response);
203+
break;
204+
default:
205+
jsonResponse(["message" => "Acción no permitida"], 400);
206+
break;
190207
}
191208
break;
192209
default:
193-
// Método HTTP no permitido
194210
jsonResponse(["message" => "Método no permitido"], 405);
195211
break;
196-
}
212+
}

0 commit comments

Comments
 (0)