Skip to content

Commit

Permalink
Support Symfony Responses and Requests
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Jones authored and gogl92 committed Nov 4, 2020
1 parent 5cd7a1e commit f4388cd
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 11 deletions.
65 changes: 54 additions & 11 deletions LumenCors.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<?php namespace palanik\lumen\Middleware;

use Closure;
use Illuminate\Http\Response;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

class LumenCors {

Expand All @@ -10,51 +11,87 @@ class LumenCors {
'allowMethods' => 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
);

/**
* Set Access-Control-Allow-Origin on Response.
*
* @param Request $req
* @return Response
*/
protected function setOrigin($req, $rsp) {
$origin = $this->settings['origin'];
if (is_callable($origin)) {
// Call origin callback with request origin
$origin = call_user_func($origin,
$req->header("Origin")
$req->headers->get("Origin")
);
}
$rsp->header('Access-Control-Allow-Origin', $origin);
$rsp->headers->set('Access-Control-Allow-Origin', $origin);
}

/**
* Set Access-Control-Expose-Headers on Response.
*
* @param Request $req
* @return Response
*/
protected function setExposeHeaders($req, $rsp) {
if (isset($this->settings['exposeHeaders'])) {
$exposeHeaders = $this->settings['exposeHeaders'];
if (is_array($exposeHeaders)) {
$exposeHeaders = implode(", ", $exposeHeaders);
}

$rsp->header('Access-Control-Expose-Headers', $exposeHeaders);
$rsp->headers->set('Access-Control-Expose-Headers', $exposeHeaders);
}
}

/**
* Set Access-Control-Max-Age on Response.
*
* @param Request $req
* @return Response
*/
protected function setMaxAge($req, $rsp) {
if (isset($this->settings['maxAge'])) {
$rsp->header('Access-Control-Max-Age', $this->settings['maxAge']);
$rsp->headers->set('Access-Control-Max-Age', $this->settings['maxAge']);
}
}

/**
* Set Access-Control-Allow-Credentials on Response.
*
* @param Request $req
* @return Response
*/
protected function setAllowCredentials($req, $rsp) {
if (isset($this->settings['allowCredentials']) && $this->settings['allowCredentials'] === True) {
$rsp->header('Access-Control-Allow-Credentials', 'true');
$rsp->headers->set('Access-Control-Allow-Credentials', 'true');
}
}

/**
* Set Access-Control-Allow-Methods on Response.
*
* @param Request $req
* @return Response
*/
protected function setAllowMethods($req, $rsp) {
if (isset($this->settings['allowMethods'])) {
$allowMethods = $this->settings['allowMethods'];
if (is_array($allowMethods)) {
$allowMethods = implode(", ", $allowMethods);
}

$rsp->header('Access-Control-Allow-Methods', $allowMethods);
$rsp->headers->set('Access-Control-Allow-Methods', $allowMethods);
}
}

/**
* Set Access-Control-Allow-Headers on Response.
*
* @param Request $req
* @return Response
*/
protected function setAllowHeaders($req, $rsp) {
if (isset($this->settings['allowHeaders'])) {
$allowHeaders = $this->settings['allowHeaders'];
Expand All @@ -63,14 +100,20 @@ protected function setAllowHeaders($req, $rsp) {
}
}
else { // Otherwise, use request headers
$allowHeaders = $req->header("Access-Control-Request-Headers");
$allowHeaders = $req->headers->get("Access-Control-Request-Headers");
}

if (isset($allowHeaders)) {
$rsp->header('Access-Control-Allow-Headers', $allowHeaders);
$rsp->headers->set('Access-Control-Allow-Headers', $allowHeaders);
}
}

/**
* Set all needed Cors Headers on Response.
*
* @param Request $req
* @return Response
*/
protected function setCorsHeaders($req, $rsp) {

// http://www.html5rocks.com/static/images/cors_server_flowchart.png
Expand All @@ -92,8 +135,8 @@ protected function setCorsHeaders($req, $rsp) {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param Request $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
}
],
"require": {
"symfony/http-foundation": ">=3.2 <5"
},
"autoload": {
"psr-4": {
Expand Down

0 comments on commit f4388cd

Please sign in to comment.