body { background: #222; color: #ddd; font-family: sans-serif; } a { color: #ddd !important; text-decoration: none; } img { padding: 1em; background: #ccc; border-radius: 10px; } h1 { font-weight: 600; } h2 { font-weight: 100; } pre { user-select: all; }

ProcurePlus integration

Inserisci questa chiave pubblica nell'istanza di ProcurePlus

Query pronta

        db.tuttogare_keys.insertOne(
            {
                'kid' : 'federation',
                'platform' : '{$idInstallazione}',
                'public_key' : '{$publicKey}',
            }
        );
        
HTML; } /** * Nota bene: richiede che la configurazione del tenant sia configurata * Questo codice fa quanto segue: * - Genera se necessario le chiavi di core e log per il tenant attuale * - Effettua una richiesta di federazione a ProcurePlus * * @param boolean $force_generation Se true, forza la rigenerazione delle chiavi * @return boolean */ public static function federate() { // Verifichiamo che la chiave di federazione esista $federationKeyPath = KeyStore::getKeyPath("federation", "global"); if (!file_exists($federationKeyPath . ".rsa.pem") || !file_exists($federationKeyPath . ".rsa.pub")) { throw new \Exception("Non hai ancora creato una chiave di federazione per questa piattaforma."); } // Otteniamo il dominio corrente $domain = getCurrentDomain(); // Creiamo il keypair di federazione ma conserviamo solo la chiave privata su filesystem. KeyStore::generateKeyPair("sign", $domain); // La chiave pubblica rimarrà solo in memoria per essere inviata $publicKey = KeyStore::get("sign", $domain, "public"); KeyStore::delete("sign", $domain, "public"); // Firmiamo la richiesta con la chiave di federazione $federationPrivateKey = KeyStore::get("federation", "global", "private"); // Effettuiamo la richiesta a oidc-gateway $raw_response = HTTP::signedRequest( "federation-request", // Richiesta di federazione [ "domain" => $domain, // Il dominio da federare viene specificato nel payload "public_key" => $publicKey ], "global", // La richiesta invece parte come globale di piattaforma $federationPrivateKey // Firmata appunto con la chiave di piattaforma ); if (valid_json($raw_response, $response, true)) { if (!isset($response["public_key"])) { throw new \Exception($raw_response); } KeyStore::set("sign", $domain, "public", $response["public_key"]); return true; } else { return false; } } } }