Proyectos de Subversion LeadersLinked - Services

Rev

Rev 747 | Rev 749 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 747 Rev 748
Línea 135... Línea 135...
135
    public function onBootstrap(MvcEvent $event)
135
    public function onBootstrap(MvcEvent $event)
136
    {
136
    {
137
        $timezone = $this->config['leaderslinked.runmode.timezone'];
137
        $timezone = $this->config['leaderslinked.runmode.timezone'];
138
        date_default_timezone_set($timezone);
138
        date_default_timezone_set($timezone);
Línea 139... Línea -...
139
 
-
 
140
        // Add CORS headers
-
 
141
        header('Access-Control-Allow-Origin: *');
-
 
142
        header('Access-Control-Allow-Headers: *');
-
 
143
        header('Access-Control-Allow-Method: POST, GET, HEAD, OPTIONS');
-
 
144
        header('Access-Control-Max-Age: 86400');
-
 
145
 
139
 
146
        $response = $event->getResponse();
-
 
147
        Functions::addCrossSiteToResponse($response);
140
        $response = $event->getResponse();
148
        $event->setResponse($response);
-
 
149
 
141
        $request = $event->getRequest();
Línea -... Línea 142...
-
 
142
        $serviceManager = $event->getApplication()->getServiceManager();
-
 
143
 
-
 
144
        // --- Inicio de la lógica de la whitelist de CORS ---
-
 
145
        // Obtener los orígenes permitidos desde la configuración. Si no está definido, es una cadena vacía.
-
 
146
        $whitelistString = $this->config['leaderslinked.cors.allowed_origins'] ?? '';
-
 
147
        $allowedOrigins = array_map('trim', explode(',', $whitelistString));
-
 
148
        
-
 
149
        $originHeader = $request->getHeader('Origin');
-
 
150
 
-
 
151
        // Comprobar si la solicitud tiene una cabecera 'Origin'.
-
 
152
        if ($originHeader) {
-
 
153
            $origin = $originHeader->getUri();
-
 
154
 
-
 
155
            // Si el origen de la solicitud está en nuestra lista blanca, configuramos las cabeceras CORS.
-
 
156
            if (in_array($origin, $allowedOrigins)) {
-
 
157
                $headers = $response->getHeaders();
-
 
158
                $headers->addHeaderLine('Access-Control-Allow-Origin', $origin);
-
 
159
                $headers->addHeaderLine('Access-Control-Allow-Credentials', 'true');
-
 
160
                $headers->addHeaderLine('Access-Control-Allow-Headers', 'Authorization, Content-Type, token, secret, rand, created');
-
 
161
                $headers->addHeaderLine('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE');
-
 
162
                $headers->addHeaderLine('Access-Control-Max-Age', '86400');
-
 
163
            }
-
 
164
            // Si el origen no está en la lista blanca, no añadimos ninguna cabecera.
-
 
165
            // El navegador aplicará la política del mismo origen y bloqueará la solicitud.
-
 
166
        }
-
 
167
 
-
 
168
        // Las solicitudes de pre-vuelo (pre-flight) usan el método OPTIONS.
-
 
169
        // Deben devolver las cabeceras CORS y una respuesta 200 OK inmediatamente.
-
 
170
        if ($request->isOptions() && $originHeader) {
-
 
171
            $response->setStatusCode(200);
-
 
172
            // Detenemos la ejecución para las solicitudes de pre-vuelo y devolvemos la respuesta.
-
 
173
            return $response;
-
 
174
        }
-
 
175
        // --- Fin de la lógica de la whitelist de CORS ---
-
 
176
 
150
        $serviceManager = $event->getApplication()->getServiceManager();
177
        $event->setResponse($response);
151
 
178
 
152
        $eventManager = $event->getApplication()->getEventManager();
179
        $eventManager = $event->getApplication()->getEventManager();
153
        $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, [
180
        $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, [
154
            $this,
181
            $this,