Class: Passwordstate::Client
- Inherits:
-
Object
- Object
- Passwordstate::Client
- Defined in:
- lib/passwordstate/client.rb
Constant Summary collapse
- USER_AGENT =
"RubyPasswordstate/#{Passwordstate::VERSION}".freeze
- DEFAULT_HEADERS =
{ 'accept' => 'application/json', 'user-agent' => USER_AGENT }.freeze
Instance Attribute Summary collapse
- #api_type ⇒ Object
-
#auth_data ⇒ Object
Returns the value of attribute auth_data.
-
#headers ⇒ Object
Returns the value of attribute headers.
-
#server_url ⇒ Object
Returns the value of attribute server_url.
-
#validate_certificate ⇒ Object
Returns the value of attribute validate_certificate.
Instance Method Summary collapse
- #folders ⇒ Object
- #hosts ⇒ Object
-
#initialize(url, options = {}) ⇒ Client
constructor
A new instance of Client.
- #inspect ⇒ Object
- #logger ⇒ Object
- #password_lists ⇒ Object
- #passwords ⇒ Object
- #request(method, api_path, options = {}) ⇒ Object
- #valid? ⇒ Boolean
- #version ⇒ Object
Constructor Details
#initialize(url, options = {}) ⇒ Client
Returns a new instance of Client.
14 15 16 17 18 19 20 |
# File 'lib/passwordstate/client.rb', line 14 def initialize(url, = {}) @server_url = URI(url) @validate_certificate = true @headers = DEFAULT_HEADERS @auth_data = .select { |k, _v| %i[apikey username password].include? k } @api_type = .fetch(:api_type) if .key? :api_type end |
Instance Attribute Details
#api_type ⇒ Object
26 27 28 |
# File 'lib/passwordstate/client.rb', line 26 def api_type @api_type || (auth_data.key?(:apikey) ? :api : :winapi) end |
#auth_data ⇒ Object
Returns the value of attribute auth_data.
11 12 13 |
# File 'lib/passwordstate/client.rb', line 11 def auth_data @auth_data end |
#headers ⇒ Object
Returns the value of attribute headers.
11 12 13 |
# File 'lib/passwordstate/client.rb', line 11 def headers @headers end |
#server_url ⇒ Object
Returns the value of attribute server_url.
11 12 13 |
# File 'lib/passwordstate/client.rb', line 11 def server_url @server_url end |
#validate_certificate ⇒ Object
Returns the value of attribute validate_certificate.
11 12 13 |
# File 'lib/passwordstate/client.rb', line 11 def validate_certificate @validate_certificate end |
Instance Method Details
#folders ⇒ Object
30 31 32 33 |
# File 'lib/passwordstate/client.rb', line 30 def folders ResourceList.new self, Passwordstate::Resources::Folder, only: %i[all search post] end |
#hosts ⇒ Object
35 36 37 38 |
# File 'lib/passwordstate/client.rb', line 35 def hosts ResourceList.new self, Passwordstate::Resources::Host, only: %i[search post delete] end |
#inspect ⇒ Object
98 99 100 |
# File 'lib/passwordstate/client.rb', line 98 def inspect "#{to_s[0..-2]} #{instance_variables.reject { |k| %i[@auth_data @http @logger].include? k }.map { |k| "#{k}=#{instance_variable_get(k).inspect}" }.join ', '}>" end |
#logger ⇒ Object
22 23 24 |
# File 'lib/passwordstate/client.rb', line 22 def logger @logger ||= Logging.logger[self] end |
#password_lists ⇒ Object
44 45 46 47 |
# File 'lib/passwordstate/client.rb', line 44 def password_lists ResourceList.new self, Passwordstate::Resources::PasswordList, except: %i[put delete] end |
#passwords ⇒ Object
40 41 42 |
# File 'lib/passwordstate/client.rb', line 40 def passwords ResourceList.new self, Passwordstate::Resources::Password end |
#request(method, api_path, options = {}) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/passwordstate/client.rb', line 65 def request(method, api_path, = {}) uri = URI(server_url + "/#{api_type}/" + api_path) uri.query = URI.encode_www_form(.fetch(:query)) if .key? :query uri.query = nil if uri.query&.empty? req_obj = Net::HTTP.const_get(method.to_s.capitalize.to_sym).new uri if .key? :body req_obj.body = .fetch(:body) req_obj.body = req_obj.body.to_json unless req_obj.body.is_a?(String) req_obj['content-type'] = 'application/json' end 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 print_http req_obj res_obj = http.request req_obj print_http res_obj return true if res_obj.is_a? Net::HTTPNoContent data = JSON.parse(res_obj.body) rescue nil if data return data if res_obj.is_a? Net::HTTPSuccess data = data&.first raise Passwordstate::HTTPError.new(res_obj.code, data&.fetch('errors', []) || []) else return res_obj.body if .fetch(:allow_html, false) raise Passwordstate::PasswordstateError, 'Response was not parseable as JSON' end end |
#valid? ⇒ Boolean
49 50 51 52 53 54 |
# File 'lib/passwordstate/client.rb', line 49 def valid? version true rescue StandardError false end |
#version ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/passwordstate/client.rb', line 56 def version @version ||= begin html = request(:get, '', allow_html: true) version = html.find_line { |line| line.include? '<span>V</span>' } version = />(\d\.\d) \(Build (.+)\)</.match(version) "#{version[1]}.#{version[2]}" end end |