lib/algolia/client.rb in algoliasearch-1.6.1 vs lib/algolia/client.rb in algoliasearch-1.7.0

- old
+ new

@@ -2,10 +2,11 @@ require 'algolia/error' require 'algolia/version' require 'json' require 'zlib' require 'openssl' +require 'base64' module Algolia # A class which encapsulates the HTTPS communication with the Algolia # API server. Uses the HTTPClient library for low-level HTTP communication. @@ -96,11 +97,13 @@ # @param strategy define the strategy applied on the sequential searches (none by default) # def multiple_queries(queries, index_name_key = :index_name, strategy = "none") requests = { :requests => queries.map do |query| + query = query.dup indexName = query.delete(index_name_key) || query.delete(index_name_key.to_s) + raise ArgumentError.new("Missing '#{index_name_key}' option") if indexName.nil? encoded_params = Hash[query.map { |k,v| [k.to_s, v.is_a?(Array) ? v.to_json : v] }] { :indexName => indexName, :params => Protocol.to_query(encoded_params) } end } post(Protocol.multiple_queries_uri(strategy), requests.to_json, :search) @@ -467,15 +470,24 @@ # # @param private_api_key your private API Key # @param tag_filters the list of tags applied to the query (used as security) # @param user_token an optional token identifying the current user # - def Algolia.generate_secured_api_key(private_api_key, tag_filters, user_token = nil) - if tag_filters.is_a?(Array) - tag_filters = tag_filters.map { |t| t.is_a?(Array) ? "(#{t.join(',')})" : t }.join(',') + def Algolia.generate_secured_api_key(private_api_key, tag_filters_or_params, user_token = nil) + if tag_filters_or_params.is_a?(Hash) && user_token.nil? + encoded_params = Hash[tag_filters_or_params.map { |k,v| [k.to_s, v.is_a?(Array) ? v.to_json : v] }] + query_str = Protocol.to_query(encoded_params) + hmac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), private_api_key, query_str) + Base64.encode64("#{hmac}#{query_str}").gsub("\n", '') + else + tag_filters = if tag_filters_or_params.is_a?(Array) + tag_filters = tag_filters_or_params.map { |t| t.is_a?(Array) ? "(#{t.join(',')})" : t }.join(',') + else + tag_filters_or_params + end + raise ArgumentError.new('Attribute "tag_filters" must be a list of tags') if !tag_filters.is_a?(String) + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), private_api_key, "#{tag_filters}#{user_token.to_s}") end - raise ArgumentError.new('Attribute "tag_filters" must be a list of tags') if !tag_filters.is_a?(String) - OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), private_api_key, "#{tag_filters}#{user_token.to_s}") end # # This method allows to query multiple indexes with one API call #