diff --git a/lib/passwordstate/client.rb b/lib/passwordstate/client.rb index 95b99f18fa1e0c89c0d060db816dcf3519631e0c..ef808e71dab1ce27af78918b2cc763db37290e4e 100644 --- a/lib/passwordstate/client.rb +++ b/lib/passwordstate/client.rb @@ -77,9 +77,9 @@ module Passwordstate raise "Your version of Passwordstate (#{version}) doesn't support the requested feature" unless version? compare end - def request(method, api_path, options = {}) + def request(method, api_path, query: nil, reason: nil, **options) uri = URI(server_url + "/#{api_type}/" + api_path) - uri.query = URI.encode_www_form(options.fetch(:query)) if options.key? :query + uri.query = URI.encode_www_form(query) unless query.nil? uri.query = nil if uri.query.nil? || uri.query.empty? req_obj = Net::HTTP.const_get(method.to_s.capitalize.to_sym).new uri @@ -92,7 +92,7 @@ module Passwordstate req_obj.ntlm_auth(auth_data[:username], auth_data[:password]) if api_type == :winapi headers.each { |h, v| req_obj[h] = v } req_obj['APIKey'] = auth_data[:apikey] if api_type == :api - req_obj['Reason'] = options.fetch(:reason) if options.key?(:reason) && version?('>= 8.4.8449') + req_obj['Reason'] = reason if !reason.nil? && version?('>= 8.4.8449') print_http req_obj res_obj = http.request req_obj diff --git a/lib/passwordstate/resource.rb b/lib/passwordstate/resource.rb index 0ba7d8e839a7b23bf28b4c6dd5dc1c9cb8d9833d..76bffa8cc8aff4a83580be3794b0119a0c8342e2 100644 --- a/lib/passwordstate/resource.rb +++ b/lib/passwordstate/resource.rb @@ -36,9 +36,10 @@ module Passwordstate def self.all(client, query = {}) path = query.fetch(:_api_path, api_path) + reason = query.delete(:_reason) query = passwordstateify_hash query.reject { |k| k.to_s.start_with? '_' } - [client.request(:get, path, query: query)].flatten.map do |object| + [client.request(:get, path, query: query, reason: reason)].flatten.map do |object| new object.merge(_client: client) end end @@ -49,9 +50,10 @@ module Passwordstate return new _client: client, index_field => object if query[:_bare] path = query.fetch(:_api_path, api_path) + reason = query.delete(:_reason) query = passwordstateify_hash query.reject { |k| k.to_s.start_with? '_' } - resp = client.request(:get, "#{path}/#{object}", query: query).map do |data| + resp = client.request(:get, "#{path}/#{object}", query: query, reason: reason).map do |data| new data.merge(_client: client) end return resp.first if resp.one? || resp.empty? @@ -61,26 +63,29 @@ module Passwordstate def self.post(client, data, query = {}) path = query.fetch(:_api_path, api_path) + reason = query.delete(:_reason) data = passwordstateify_hash data query = passwordstateify_hash query.reject { |k| k.to_s.start_with? '_' } - new [client.request(:post, path, body: data, query: query)].flatten.first.merge(_client: client) + new [client.request(:post, path, body: data, query: query, reason: reason)].flatten.first.merge(_client: client) end def self.put(client, data, query = {}) path = query.fetch(:_api_path, api_path) + reason = query.delete(:_reason) data = passwordstateify_hash data query = passwordstateify_hash query.reject { |k| k.to_s.start_with? '_' } - client.request :put, path, body: data, query: query + client.request :put, path, body: data, query: query, reason: reason end def self.delete(client, object, query = {}) path = query.fetch(:_api_path, api_path) + reason = query.delete(:_reason) query = passwordstateify_hash query.reject { |k| k.to_s.start_with? '_' } object = object.send(object.class.send(index_field)) if object.is_a? Resource - client.request :delete, "#{path}/#{object}", query: query + client.request :delete, "#{path}/#{object}", query: query, reason: reason end def self.passwordstateify_hash(hash)