class CryptopusAdapter

Public Instance Methods

find_account_by_name(name) click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 49
def find_account_by_name(name)
  secret_account = Account.find_by_name_and_folder_id(name, session_adapter.selected_folder.id)

  raise CryptopusAccountNotFoundError unless secret_account

  secret_account
end
get(path) click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 16
def get(path)
  uri = URI("#{root_url}/#{path}")
  request = new_request(:get, uri)
  send_request(request, uri)
end
patch(path, body) click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 29
def patch(path, body)
  uri = URI("#{root_url}/#{path}")
  request = new_request(:patch, uri)
  request.body = body
  send_request(request, uri)
end
post(path, body) click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 22
def post(path, body)
  uri = URI("#{root_url}/#{path}")
  request = new_request(:post, uri)
  request.body = body
  send_request(request, uri)
end
renewed_auth_token() click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 57
def renewed_auth_token
  json = get("api_users/#{current_user_id}/token")
  JSON.parse(json)['token']
end
root_url() click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 10
def root_url
  raise SessionMissingError unless session_adapter.session_data[:url]

  @root_url ||= "#{session_adapter.session_data[:url]}/api"
end
save_secret(secret) click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 36
def save_secret(secret)
  secret_account = secret.to_account
  secret_account.folder = session_adapter.selected_folder.id

  persisted_secret = Account.find_by_name_and_folder_id(secret.name,
                                                        session_adapter.selected_folder.id)
  if persisted_secret
    patch("accounts/#{persisted_secret.id}", secret_account.to_json)
  else
    post('accounts', secret_account.to_json)
  end
end

Private Instance Methods

current_user_id() click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 64
def current_user_id
  users = JSON.parse(get('api_users'), symbolize_names: true)
  users[:data].find do |user|
    user[:attributes][:username] == session_adapter.session_data[:username]
  end[:id]
end
header_token() click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 75
def header_token
  Base64.strict_encode64(session_adapter.session_data[:token] || '')
end
new_request(verb, uri) click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 79
def new_request(verb, uri)
  request = Object.const_get("Net::HTTP::#{verb.capitalize}").new(uri)
  request['Authorization-User'] = session_adapter.session_data[:username]
  request['Authorization-Password'] = header_token
  if [:post, :patch].include? verb
    request['Content-Type'] = 'application/json'
    request['Accept'] = 'application/vnd.api+json'
  end
  request
end
send_request(request, uri) click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 90
def send_request(request, uri)
  is_ssl_connection = uri.port == 443
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: is_ssl_connection) do |http|
    http.request(request)
  end
  raise UnauthorizedError if response.is_a?(Net::HTTPUnauthorized)
  raise ForbiddenError if response.is_a?(Net::HTTPForbidden)

  response.body
end
session_adapter() click to toggle source
# File lib/adapters/cryptopus_adapter.rb, line 71
def session_adapter
  @session_adapter ||= SessionAdapter.new
end