Class: EasyCreds::Providers::OnePassword
- Defined in:
- lib/easy_creds/providers/one_password.rb
Defined Under Namespace
Classes: Result
Instance Attribute Summary collapse
-
#vault ⇒ Object
readonly
Returns the value of attribute vault.
Instance Method Summary collapse
- #account_email ⇒ Object
- #create_item(env, fields) ⇒ Object
- #create_vault(name) ⇒ Object
-
#initialize(vault:, runner: nil, log_dir: nil) ⇒ OnePassword
constructor
A new instance of OnePassword.
- #item(env) ⇒ Object
- #item_exists?(env) ⇒ Boolean
- #read_credentials_key(env, credentials_item) ⇒ Object
- #signed_in? ⇒ Boolean
- #update_item(env, all_fields) ⇒ Object
- #vault_exists? ⇒ Boolean
- #write_credentials_key(env, key_value, credentials_item) ⇒ Object
Constructor Details
#initialize(vault:, runner: nil, log_dir: nil) ⇒ OnePassword
Returns a new instance of OnePassword.
15 16 17 18 19 20 |
# File 'lib/easy_creds/providers/one_password.rb', line 15 def initialize(vault:, runner: nil, log_dir: nil, **) super() @vault = vault @runner = runner || method(:shell_run) @logger = build_logger(log_dir) end |
Instance Attribute Details
#vault ⇒ Object (readonly)
Returns the value of attribute vault.
13 14 15 |
# File 'lib/easy_creds/providers/one_password.rb', line 13 def vault @vault end |
Instance Method Details
#account_email ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/easy_creds/providers/one_password.rb', line 32 def account_email result = run('op', 'whoami', '--format=json') return nil unless result.ok JSON.parse(result.stdout)['email'] rescue JSON::ParserError nil end |
#create_item(env, fields) ⇒ Object
68 69 70 71 72 |
# File 'lib/easy_creds/providers/one_password.rb', line 68 def create_item(env, fields) with_template_file(build_template(env_item(env), fields)) do |path| run('op', 'item', 'create', "--vault=#{@vault}", "--template=#{path}") end.ok end |
#create_vault(name) ⇒ Object
51 52 53 |
# File 'lib/easy_creds/providers/one_password.rb', line 51 def create_vault(name) run('op', 'vault', 'create', name).ok end |
#item(env) ⇒ Object
55 56 57 58 59 60 61 62 |
# File 'lib/easy_creds/providers/one_password.rb', line 55 def item(env) result = run('op', 'item', 'get', env_item(env), "--vault=#{@vault}", '--format=json') return nil unless result.ok fields_from_json(result.stdout) rescue JSON::ParserError nil end |
#item_exists?(env) ⇒ Boolean
64 65 66 |
# File 'lib/easy_creds/providers/one_password.rb', line 64 def item_exists?(env) run('op', 'item', 'get', env_item(env), "--vault=#{@vault}", '--format=json').ok end |
#read_credentials_key(env, credentials_item) ⇒ Object
78 79 80 81 |
# File 'lib/easy_creds/providers/one_password.rb', line 78 def read_credentials_key(env, credentials_item) result = run('op', 'read', "op://#{@vault}/#{credentials_item}/#{env}") result.ok ? result.stdout.strip : nil end |
#signed_in? ⇒ Boolean
22 23 24 25 26 27 28 29 30 |
# File 'lib/easy_creds/providers/one_password.rb', line 22 def signed_in? result = run('op', 'whoami', '--format=json') return false unless result.ok data = JSON.parse(result.stdout) data.key?('account_uuid') || data.key?('email') rescue JSON::ParserError false end |
#update_item(env, all_fields) ⇒ Object
74 75 76 |
# File 'lib/easy_creds/providers/one_password.rb', line 74 def update_item(env, all_fields) update_named_item(env_item(env), all_fields) end |
#vault_exists? ⇒ Boolean
41 42 43 44 45 46 47 48 49 |
# File 'lib/easy_creds/providers/one_password.rb', line 41 def vault_exists? result = run('op', 'vault', 'list', '--format=json') return false unless result.ok vaults = JSON.parse(result.stdout) vaults.any? { |v| v['name'] == @vault } rescue JSON::ParserError false end |
#write_credentials_key(env, key_value, credentials_item) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/easy_creds/providers/one_password.rb', line 83 def write_credentials_key(env, key_value, credentials_item) existing = run('op', 'item', 'get', credentials_item, "--vault=#{@vault}", '--format=json') if existing.ok all_fields = fields_from_json(existing.stdout).merge(env => key_value) update_named_item(credentials_item, all_fields) else with_template_file(build_template(credentials_item, { env => key_value })) do |path| run('op', 'item', 'create', "--vault=#{@vault}", "--template=#{path}") end.ok end rescue JSON::ParserError => e log(:error, "JSON parse error in write_credentials_key: #{e.}") false end |