Corregit error de CORS
Quan s'intentava fer una petició CORS amb l'opció credentials: true no
es podia realitzar correctament perquè no s'establien les capçaleres
correctes.
Aquest commit soluciona aquest problema.
Change-Id: Ief13517d9ec034b8ba9169d5d317fe161bc13799
diff --git a/config.default.php b/config.default.php
index 5c92950..13ce1ae 100644
--- a/config.default.php
+++ b/config.default.php
@@ -30,6 +30,12 @@
// Exemple: https://covid.fme.upc.edu/
$conf['frontendUrl'] = '';
-// Valor del header Access-Control-Allow-Origin per les peticions a l'API.
-// Per defecte és el valor de la variable $conf['homeUrl']
-$conf['allowedOrigin'] = $conf['homeUrl'];
+// Llistat d'orígens permesos per interactuar amb l'API.
+//
+// NOTA: És important que els valors de l'array no acabin amb un "/" final.
+// Exemple: ['https://covid.fme.upc.edu']
+$conf['allowedOrigins'] = [];
+
+// Ignorar la llista d'orígens permesos i permetre a qualsevol pàgina web
+// interactuar amb l'API
+$conf['allowAllOrigins'] = false;
diff --git a/inc/API.php b/inc/API.php
index a3607bb..b8aa454 100644
--- a/inc/API.php
+++ b/inc/API.php
@@ -50,13 +50,23 @@
return $json;
}
+ private static function setCORSHeaders() {
+ global $conf;
+ if ((isset($conf['allowAllOrigins']) && $conf['allowAllOrigins']) ||
+ (isset($conf['allowedOrigins']) &&
+ isset($_SERVER['HTTP_ORIGIN']) &&
+ in_array($_SERVER['HTTP_ORIGIN'], $conf['allowedOrigins']))) {
+ header('Access-Control-Allow-Origin: '.($_SERVER['HTTP_ORIGIN'] ?? '*'));
+ header('Access-Control-Allow-Credentials: true');
+ }
+ }
+
+
public static function process($path) {
global $conf;
header('Content-Type: application/json');
-
- if (isset($conf['allowedOrigin']) && !empty($conf['allowedOrigin']))
- header('Access-Control-Allow-Origin: '.$conf['allowedOrigin']);
+ self::setCORSHeaders();
$parts = explode('/', $path);
$method = $parts[0] ?? '';