get_param( '_shiftora_connection' ) ) || ! ResponseSignature::covers( $request->get_route() ) ) { return $response; } $body = wp_json_encode( $response->get_data() ); if ( ! is_string( $body ) ) { return $response; } foreach ( $this->headers( $request, $response->get_status(), $body ) as $name => $value ) { $response->header( $name, $value ); } return $response; } /** * The signature headers for a response to an authenticated request, or none when the * request carried no verified connection (a public route, or a refused request). * * @return array */ public function headers( WP_REST_Request $request, int $status, string $body ): array { $connection = $request->get_param( '_shiftora_connection' ); $request_signature = (string) $request->get_header( 'X-Shiftora-Signature' ); if ( ! is_object( $connection ) || '' === $request_signature ) { return []; } try { $secret = $this->connections->get_remote_token( $connection ); } catch ( \Throwable $e ) { return []; } $timestamp = time(); return [ ResponseSignature::TIMESTAMP_HEADER => (string) $timestamp, ResponseSignature::SIGNATURE_HEADER => ResponseSignature::sign( $secret, $request_signature, $status, $body, $timestamp ), ]; } }