sha1($rawBody), ]; // Adesso generiamo un JWT contenente il payload $jwt = \JOSE_JWT::encode($payload); if($key === null) { try { // Firmiamo la richiesta con la chiave di federazione $key = KeyStore::get("sign", $domain, "private"); } catch(\Exception $e) { // Dominio non federato return; } } $jwt->header["platform"] = $config["id-installazione"]; $jwt->header["domain"] = $domain; $jws = $jwt->sign($key, "RS512"); // IMPORTANTE: Ricalcoliamo l'header content-length manualmente per evitare situazioni imbarazzanti if ($content_length > 0) $headers["content-length"] = $content_length; $headers["Authorization"] = "Bearer {$jws->toString()}"; $headers["User-Agent"] = "Studio Amica Tuttogarev3 (PHP)"; // -- Popolazione degli header $plain_headers = []; foreach ($headers as $key => $header) { $plain_headers[] = $key . ": " . $header; } curl_setopt($curl, CURLOPT_HTTPHEADER, $plain_headers); curl_setopt($curl, CURLINFO_HEADER_OUT, true); // -- Inviamo la richiesta $response = curl_exec($curl); // -- Verifichiamo la richiesta if ($response === false) { $error = curl_error($curl); $httpReturnCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($httpReturnCode === 0) { $httpReturnCode = 502; } $message = "Richiesta '{$method}' fallita {$httpReturnCode} '{$error}'"; throw new \Exception($message); } // -- Otteniamo la risposta $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE); $body = substr($response, $headerSize); // -- Puliamo curl_close($curl); return $body; } } } }