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
#