get_api()->get_public_key( $key_project ); $key_response_data = $key_data_response->response_data; $project = $key_response_data['project'] ?? ''; $current_key_data = $key_response_data['current'] ?? []; $next_key_data = $key_response_data['next'] ?? []; self::maybe_update_single_key_option( self::SETTING_CURRENT_PUBLIC_KEY, $current_key_data, $project ); self::maybe_update_single_key_option( self::SETTING_NEXT_PUBLIC_KEY, $next_key_data, $project ); } private static function maybe_update_single_key_option( string $option_name, array $key_data, string $project ): void { $key_data['project'] = $project; if ( self::is_valid_key_data( $key_data ) ) { update_option( $option_name, $key_data ); } } private static function is_valid_key_data( $key_data ): bool { if ( ! is_array( $key_data ) ) { return false; } $key = $key_data['key'] ?? null; $alg = $key_data['algorithm'] ?? null; $encoding_format = $key_data['encoding_format'] ?? null; $project = $key_data['project'] ?? null; // Valid key needs to have all values. foreach ( [ $key, $alg, $encoding_format, $project ] as $value ) { if ( empty( $value ) ) { return false; } } return true; } public static function get_current_public_key(): ?FBPublicKey { $current_key_data = get_option( self::SETTING_CURRENT_PUBLIC_KEY ); return self::fb_signed_key_from_data( $current_key_data ); } public static function get_next_public_key(): ?FBPublicKey { $next_key_data = get_option( self::SETTING_NEXT_PUBLIC_KEY ); return self::fb_signed_key_from_data( $next_key_data ); } private static function fb_signed_key_from_data( $key_data ): ?FBPublicKey { if ( ! self::is_valid_key_data( $key_data ) ) { return null; } return new FBPublicKey( $key_data['key'], $key_data['algorithm'], $key_data['encoding_format'], $key_data['project'] ); } }