<?php
namespace Spatie\FlareClient\Context;
use RuntimeException;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mime\Exception\InvalidArgumentException;
use Throwable;
class RequestContextProvider implements ContextProvider
{
protected ?Request $request;
public function __construct(Request $request = null)
{
$this->request = $request ?? Request::createFromGlobals();
}
/**
* @return array<string, mixed>
*/
public function getRequest(): array
{
return [
'url' => $this->request->getUri(),
'ip' => $this->request->getClientIp(),
'method' => $this->request->getMethod(),
'useragent' => $this->request->headers->get('User-Agent'),
];
}
/**
* @return array<int, mixed>
*/
protected function getFiles(): array
{
if (is_null($this->request->files)) {
return [];
}
return $this->mapFiles($this->request->files->all());
}
/**
* @param array<int, mixed> $files
*
* @return array<string, string>
*/
protected function mapFiles(array $files): array
{
return array_map(function ($file) {
if (is_array($file)) {
return $this->mapFiles($file);
}
if (! $file instanceof UploadedFile) {
return;
}
try {
$fileSize = $file->getSize();
} catch (RuntimeException $e) {
$fileSize = 0;
}
try {
$mimeType = $file->getMimeType();
} catch (InvalidArgumentException $e) {
$mimeType = 'undefined';
}
return [
'pathname' => $file->getPathname(),
'size' => $fileSize,
'mimeType' => $mimeType,
];
}, $files);
}
/**
* @return array<string, mixed>
*/
public function getSession(): array
{
try {
$session = $this->request->getSession();
} catch (Throwable $exception) {
$session = [];
}
return $session ? $this->getValidSessionData($session) : [];
}
protected function getValidSessionData($session): array
{
if (! method_exists($session, 'all')) {
return [];
}
try {
json_encode($session->all());
} catch (Throwable $e) {
return [];
}
return $session->all();
}
/**
* @return array<int|string, mixed
*/
public function getCookies(): array
{
return $this->request->cookies->all();
}
/**
* @return array<string, mixed>
*/
public function getHeaders(): array
{
/** @var array<string, list<string|null>> $headers */
$headers = $this->request->headers->all();
return array_filter(
array_map(
fn (array $header) => $header[0],
$headers
)
);
}
/**
* @return array<string, mixed>
*/
public function getRequestData(): array
{
return [
'queryString' => $this->request->query->all(),
'body' => $this->request->request->all(),
'files' => $this->getFiles(),
];
}
/** @return array<string, mixed> */
public function toArray(): array
{
return [
'request' => $this->getRequest(),
'request_data' => $this->getRequestData(),
'headers' => $this->getHeaders(),
'cookies' => $this->getCookies(),
'session' => $this->getSession(),
];
}
}
Save Cards
Simplify your payment experience by securely saving your card on our platform. After your initial transaction, you can choose to store your card details safely for future use. This feature eliminates the need to re-enter your payment information each time, making checkouts faster while keeping your data secure with advanced encryption and robust security measures.