@@ -77,6 +77,7 @@ public function __construct(
7777 * @param ServerRequestInterface $request
7878 * @param ResponseInterface $response
7979 * @return ResponseInterface
80+ * @throws \Exception
8081 */
8182 public function processRequest (ServerRequestInterface $ request , ResponseInterface $ response )
8283 {
@@ -97,7 +98,10 @@ public function processRequest(ServerRequestInterface $request, ResponseInterfac
9798 */
9899 public function dispatch (RestRequestInterface $ request , ResponseInterface $ response )
99100 {
100- return $ this ->addAdditionalHeaders ($ this ->dispatchInternal ($ request , $ response ));
101+ return $ this ->addCorsHeaders (
102+ $ request ,
103+ $ this ->addAdditionalHeaders ($ this ->dispatchInternal ($ request , $ response ))
104+ );
101105 }
102106
103107 /**
@@ -146,7 +150,6 @@ private function getResultConverter()
146150 *
147151 * @param RestRequestInterface $request
148152 * @return ResponseInterface
149- * @throws \Exception
150153 */
151154 private function callHandler (RestRequestInterface $ request )
152155 {
@@ -243,6 +246,24 @@ private function addAdditionalHeaders(ResponseInterface $response)
243246 return $ response ;
244247 }
245248
249+ private function addCorsHeaders (RestRequestInterface $ request , ResponseInterface $ response )
250+ {
251+ $ origin = $ request ->getHeaderLine ('origin ' );
252+ if ($ origin ) {
253+ $ allowedOrigins = $ this ->objectManager
254+ ->getConfigurationProvider ()
255+ ->getSetting ('cors.allowedOrigins ' , []);
256+
257+ foreach ($ allowedOrigins as $ allowedOrigin ) {
258+ if ($ allowedOrigin === $ origin ) {
259+ return $ response ->withHeader ('Access-Control-Allow-Origin ' , $ allowedOrigin );
260+ }
261+ }
262+ }
263+
264+ return $ response ;
265+ }
266+
246267 /**
247268 * @param RestRequestInterface $request
248269 * @param ResponseInterface $response
0 commit comments