Class: Aspera::Keychain::OnePasswordApi

Inherits:
Base
  • Object
show all
Includes:
OnePasswordBase
Defined in:
lib/aspera/keychain/one_password_api.rb

Overview

Manage secrets using the 1Password Connect REST API https://developer.1password.com/docs/connect/connect-api-reference/

Constant Summary

Constants inherited from Base

Base::CONTENT_KEYS

Instance Method Summary collapse

Methods inherited from Base

#validate_set

Constructor Details

#initialize(url:, token:, vault_id:) ⇒ OnePasswordApi

Returns a new instance of OnePasswordApi.

Parameters:

  • url (String) —

    Base URL of the 1Password Connect server (e.g. http://localhost:8080)

  • token (String) —

    Bearer token (Connect token or service-account token)

  • vault_id (String) —

    ID of the 1Password vault to operate on



16
17
18
19
20
21
22
23
# File 'lib/aspera/keychain/one_password_api.rb', line 16

def initialize(url:, token:, vault_id:)
  super()
  @vault_id = vault_id
  @api = Rest::Client.new(
    base_url: url,
    headers:  {'Authorization' => "Bearer #{token}"}
  )
end

Instance Method Details

#all ⇒ Object



32
33
34
35
36
37
# File 'lib/aspera/keychain/one_password_api.rb', line 32

def all
  items = @api.read("v1/vaults/#{@vault_id}/items")
  return items.map do |item|
    item_to_secret(@api.read("v1/vaults/#{@vault_id}/items/#{item['id']}")).merge(id: item['id'])
  end
end

#delete(label:, id: nil) ⇒ Object



55
56
57
58
59
# File 'lib/aspera/keychain/one_password_api.rb', line 55

def delete(label:, id: nil)
  iid = id || resolve_id(label, exception: true)
  @api.delete("v1/vaults/#{@vault_id}/items/#{iid}")
  nil
end

#get(label:, id: nil, exception: true) ⇒ Object



49
50
51
52
53
# File 'lib/aspera/keychain/one_password_api.rb', line 49

def get(label:, id: nil, exception: true)
  iid = id || resolve_id(label, exception: exception)
  return if iid.nil?
  return item_to_secret(@api.read("v1/vaults/#{@vault_id}/items/#{iid}")).merge(id: iid)
end

#ids ⇒ Object



39
40
41
# File 'lib/aspera/keychain/one_password_api.rb', line 39

def ids
  @api.read("v1/vaults/#{@vault_id}/items").map { |item| {id: item['id'], label: item['title']} }
end

#info ⇒ Object



25
26
27
28
29
30
# File 'lib/aspera/keychain/one_password_api.rb', line 25

def info
  {
    url:      @api.base_url,
    vault_id: @vault_id
  }
end

#set(options) ⇒ Object



43
44
45
46
47
# File 'lib/aspera/keychain/one_password_api.rb', line 43

def set(options)
  validate_set(options)
  @api.create("v1/vaults/#{@vault_id}/items", build_item(options))
  nil
end