PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.6
Booking for Appointments and Events Calendar – Amelia v2.4.6
2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Infrastructure / ContainerConfig / request.php
ameliabooking / src / Infrastructure / ContainerConfig Last commit date
application.services.php 2 months ago command.bus.php 2 years ago container.php 2 months ago domain.event.bus.php 1 year ago domain.services.php 1 year ago infrastructure.services.php 4 weeks ago infrastructure.user.php 1 year ago repositories.php 7 months ago request.php 4 weeks ago
request.php
110 lines
1 <?php
2
3 use AmeliaBooking\Infrastructure\Common\Container;
4 use Slim\Factory\ServerRequestCreatorFactory;
5
6 $entries['request'] = function (Container $c) {
7 $creator = ServerRequestCreatorFactory::create();
8
9 $serverRequest = $creator->createServerRequestFromGlobals();
10
11 $curUri = $serverRequest->getUri();
12
13 // fix callback url for Razorpay payment through link since Razorpay encodes callback urls
14 $queryWithPlaceholderFixes = str_replace(
15 '__payments__callback',
16 '/payments/callback',
17 $curUri->getQuery()
18 );
19
20 // fix callback url for whatsapp webhooks
21 $queryWithPlaceholderFixes = str_replace(
22 '__notifications__whatsapp__webhook',
23 '/notifications/whatsapp/webhook',
24 $queryWithPlaceholderFixes
25 );
26
27 [$newPath, $newQuery] = (function ($queryWithPlaceholderFixes, array $get) {
28 if (isset($get['call']) && is_string($get['call']) && $get['call'] !== '') {
29 $callPath = str_replace(
30 '__payments__callback',
31 '/payments/callback',
32 $get['call']
33 );
34 $callPath = str_replace(
35 '__notifications__whatsapp__webhook',
36 '/notifications/whatsapp/webhook',
37 $callPath
38 );
39
40 $queryParams = $get;
41 unset($queryParams['action'], $queryParams['call']);
42
43 return [$callPath, http_build_query($queryParams)];
44 }
45
46 $newRoute = str_replace(
47 ['XDEBUG_SESSION_START=PHPSTORM&' . AMELIA_ACTION_SLUG, AMELIA_ACTION_SLUG],
48 '',
49 $queryWithPlaceholderFixes
50 );
51
52 $newPath = strpos($newRoute, '&') ? substr(
53 $newRoute,
54 0,
55 strpos($newRoute, '&')
56 ) : $newRoute;
57
58 $newQuery = strpos($newRoute, '&') ? substr(
59 $newRoute,
60 strpos($newRoute, '&') + 1
61 ) : '';
62
63 return [$newPath, $newQuery];
64 })($queryWithPlaceholderFixes, $_GET);
65
66 $request = $serverRequest->withUri(
67 $curUri
68 ->withPath($newPath)
69 ->withQuery($newQuery)
70 );
71
72 $queryParams = $request->getQueryParams();
73
74 if (!empty($queryParams['showAmeliaErrors'])) {
75 ini_set('display_errors', 1);
76 ini_set('display_startup_errors', 1);
77 error_reporting(E_ALL);
78 }
79
80 // Some hosts/WAFs strip Content-Type on admin-ajax POST requests. Slim then skips JSON
81 // parsing (parsed body stays null or []), even though the request body stream has valid JSON.
82 if ($request->getMethod() === 'POST') {
83 $contentType = $request->getHeaderLine('Content-Type');
84 $parsedBody = $request->getParsedBody();
85 $missingJsonContentType = $contentType === '' || stripos($contentType, 'json') === false;
86 $parsedBodyIsEmpty = $parsedBody === null || $parsedBody === [];
87
88 if ($missingJsonContentType && $parsedBodyIsEmpty) {
89 $body = $request->getBody();
90
91 if ($body->isSeekable()) {
92 $body->rewind();
93 }
94
95 $raw = (string) $body;
96 $trimmed = ltrim($raw);
97
98 if ($trimmed !== '' && ($trimmed[0] === '{' || $trimmed[0] === '[')) {
99 $json = json_decode($trimmed, true);
100
101 if (is_array($json)) {
102 $request = $request->withParsedBody($json);
103 }
104 }
105 }
106 }
107
108 return $request;
109 };
110