shell bypass 403
<?php
declare(strict_types=1);
namespace Arcanedev\Support\Middleware;
use Closure;
use Illuminate\Http\{JsonResponse, Request, Response};
/**
* Class VerifyJsonRequest
*
* @author ARCANEDEV <arcanedev.maroc@gmail.com>
*/
class VerifyJsonRequest
{
/* -----------------------------------------------------------------
| Properties
| -----------------------------------------------------------------
*/
/**
* Supported request method verbs.
*
* @var array
*/
protected $methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
/* -----------------------------------------------------------------
| Main Methods
| -----------------------------------------------------------------
*/
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|array|null $methods
*
* @return mixed
*/
public function handle(Request $request, Closure $next, $methods = null)
{
if ($this->isJsonRequestValid($request, $methods)) {
return $next($request);
}
return $this->jsonErrorResponse();
}
/* -----------------------------------------------------------------
| Check Methods
| -----------------------------------------------------------------
*/
/**
* Validate json Request.
*
* @param \Illuminate\Http\Request $request
* @param string|array|null $methods
*
* @return bool
*/
protected function isJsonRequestValid(Request $request, $methods)
{
$methods = $this->getMethods($methods);
if ( ! in_array($request->method(), $methods)) {
return false;
}
return $request->isJson();
}
/* -----------------------------------------------------------------
| Other Methods
| -----------------------------------------------------------------
*/
/**
* Get the error as json response.
*
* @return \Illuminate\Http\JsonResponse
*/
protected function jsonErrorResponse()
{
$data = [
'status' => 'error',
'code' => $statusCode = Response::HTTP_BAD_REQUEST,
'message' => 'Request must be JSON',
];
return new JsonResponse($data, $statusCode);
}
/**
* Get request methods.
*
* @param string|array|null $methods
*
* @return array
*/
protected function getMethods($methods): array
{
$methods = $methods ?? $this->methods;
if (is_string($methods)) {
$methods = (array) $methods;
}
return is_array($methods) ? array_map('strtoupper', $methods) : [];
}
}