davide.cucurnia@vola.it
2024-01-31 7c54fa9452d45da2b8a791704cfb62635e7e3c13
commit | author | age
9f6455 1 <?php
DC 2
3 namespace App\Vola\Services\VolaFakeHTTPResponder;
4
5 use App\Vola\Classes\Utils;
6 use Cookie;
7 use GuzzleHttp\Promise\RejectedPromise;
8 use GuzzleHttp\Exception\ConnectException;
9 use Illuminate\Http\Request;
10 use Illuminate\Support\Arr;
11 use Illuminate\Support\Str;
12
13 class VolaFakeHTTPResponder
14 {
15     public array $data;
16     public array $headers;
17     private array $sso_XML;
18
19     public function __construct()
20     {
21         $this->sso_XML = config('devtools.fake_sso_profiles');
22     }
23
24     public function getResponses(Request $request, $testUser, $picasso = false)
25     {
26             $uriParts = explode("?", $request->url());
27             $methodUri = Str::afterLast($uriParts[0], "/");
28             $reqParams = !empty($request->query()) ? $request->query() : [];
29             if (($methodUri == 'isLogged') || ($methodUri == 'islogged')) {
30                 // controllo cookie e conseguente risposta isLogged
31                 $loginResponse = ($picasso) ? $this->getLoggedPicasso($testUser) : $this->getLoggedLegacy($testUser);
32                 return $loginResponse;
33
34             } else if ($methodUri != "") {
35                 // controllo metodo e parametri e conseguente risposta
36                 $userResponses = $this->getUserResponseSet($request, $testUser);
37                 if (isset($userResponses[$methodUri])) {
38                     $responseContent = $this->getResponseArgumentsBased($userResponses, $methodUri, $reqParams);
39                     return $responseContent;
40                 }
41             } else {
42                 return 'wront-request-no-such-method';
43             }
44     }
45
46     public function getLoggedPicasso($testUser)
47     {
48         if (isset($_COOKIE["SSOSESSIONID"])) {
49             $sampleResponseString = Arr::first($this->sso_XML[$testUser]["picasso"]["getWebcustomerInformation"]["parametri"]["t"] );
50             $sampleResponseObject = Utils::convertXMLStrToArray($sampleResponseString);
51             $resp = [
52                 'logged' => (string) 1,
53                 'errorCode' => (string) 0,
54                 'username' => (string) $sampleResponseObject["Username"],
55                 'next_user' => (string) 'N',
56                 //'token' => '415F2B31F1C15FA45C9A6E1CBEB0ADF3'
57             ];
58         } else {
59             $resp = [
60                 'logged' => (string) 0,
61                 'errorCode' => (string) 0,
62             ];
63         }
64         $xml = Utils::convertToXML($resp, $root = '<isLogged/>');
65         return $xml;
66     }
67
68     public function getLoggedLegacy($testUser)
69     {
70         if (isset($_COOKIE["CAuthCookie"])) {
71             $sampleResponseString = Arr::first($this->sso_XML[$testUser]["picasso"]["getWebcustomerInformation"]["parametri"]["t"] );
72             $sampleResponseObject = Utils::convertXMLStrToArray($sampleResponseString);
73             $resp = [
74                 'logged' => (string) 1,
75                 'errorCode' => (string) 0,
76                 'username' => (string) $sampleResponseObject["Username"],
77                 'token' => (string) '415F2B31F1C15FA45C9A6E1CBEB0ADF3',
78                 'next_user' => (string) 'N',
79             ];
80         } else {
81             $resp = [
82                 'logged' => (string) 0,
83                 'errorCode' => (string) 0,
84             ];
85         }
86         $xml = Utils::convertToXML($resp, $root = '<isLogged/>');
87         return $xml;
88     }
89
90     public function getResponseArgumentsBased($userMethods, $methodUri, $reqParams = [])
91     {
92         $method = $userMethods[$methodUri];
93         $params = $method["parametri"];
94
95         //assumo che se la richiesta sia arrivata fin qui abbia tutti i mandatory nel url
96         foreach ($reqParams as $key => $value) {
97             //verifico se il metodo dell' utente ha la chiave che sto cercando
98             if ($key != "t" && isset($params[$key])) {
99                 if (array_key_exists($value, $params[$key])) {
100                     \Log::channel('general')->debug("[VolaFakeHTTPResponder] Inserisco xml specifico per key:$key ,params: " . print_r($params, 1) . " key: $key, value: $value, xml: " . print_r($params[$key][$value], 1));
101                     return $params[$key][$value];
102                 }
103             }
104         }
105         //xml di default (se richiede parametri di default conterrĂ  errori)
106         $defaultResponse = Arr::first($params["t"]);
107         \Log::channel('general')->debug("[VolaFakeHTTPResponder] Inserisco xml di default $defaultResponse per method: $methodUri");
108         return $defaultResponse;
109     }
110
111     /**
112      * @param Request $request
113      * @param mixed $testUser
114      * @return array|mixed
115      */
116     private function getUserResponseSet(Request $request, mixed $testUser)
117     {
118         $url = $request->url();
119         $isPicasso = Str::contains($url, "picasso");
120         if ($isPicasso) {
121             $userMethods = $this->sso_XML[$testUser]["picasso"] ?? [];
122         } else {
123             $userMethods = $this->sso_XML[$testUser]["sso"] ?? [];
124         }
125         return $userMethods;
126     }
127
128 }