/** * @param \Psr\Http\Message\ServerRequestInterface $request * @param \Psr\Http\Message\ResponseInterface $response * @param \OAuth2\Client\ClientInterface $client */ private function handlePut(ServerRequestInterface $request, ResponseInterface &$response, ClientInterface $client) { $request_parameters = RequestBody::getParameters($request); $this->checkPreservedParameters($request_parameters); $this->checkSoftwareStatement($request_parameters); $client_data = $client->all(); foreach (['registration_access_token', 'registration_client_uri', 'client_secret_expires_at', 'client_id_issued_at'] as $k) { if (array_key_exists($k, $client_data)) { unset($client_data[$k]); } } $diff_data = array_diff_key($client_data, $request_parameters); Assertion::true(empty($diff_data), 'The request must include all client metadata fields.'); Assertion::eq($request_parameters['client_id'], $client->getPublicId(), 'Inconsistent "client_id" parameter.'); unset($request_parameters['client_id']); $request_parameters = array_merge($request_parameters, ['registration_access_token' => null, 'registration_client_uri' => null, 'client_secret_expires_at' => null]); foreach ($request_parameters as $k => $v) { if (empty($v)) { $client->remove($k); unset($request_parameters[$k]); } } $this->getClientRuleManager()->processParametersForClient($client, $request_parameters); $this->getClientManager()->saveClient($client); $this->processResponseWithClient($response, $client); }