class StackMaster::ParameterResolvers::OnePassword
Constants
- OnePasswordBinaryNotFound
- OnePasswordInvalidResponse
- OnePasswordNotAbleToAuthenticate
- OnePasswordNotFound
Public Class Methods
new(config, stack_definition)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 11 def initialize(config, stack_definition) @config = config @stack_definition = stack_definition end
Public Instance Methods
resolve(params={})
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 16 def resolve(params={}) raise OnePasswordNotAbleToAuthenticate, "1password requires the `OP_SESSION_<name>` to be set, (remember to sign in?)" if ENV.keys.grep(/OP_SESSION_\w+$/).empty? get_items(params) end
Private Instance Methods
create_struct(title, vault)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 56 def create_struct(title, vault) JSON.parse(op_get_item(title, vault), object_class: OpenStruct) end
get_items(params)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 75 def get_items(params) case params['type'] when 'password' return get_password(params['title'], params['vault']) when 'secureNote' return get_secure_note(params['title'], params['vault']) end end
get_password(title, vault)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 60 def get_password(title, vault) # There are two types of password that can be returned. # One is attached to a Login item in 1Password # the other is to a Password item. if is_login_item?(create_struct(title, vault)) login_item(create_struct(title, vault)) else password_item(create_struct(title, vault)) end end
get_secure_note(title, vault)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 71 def get_secure_note(title, vault) create_struct(title, vault).details.notesPlain end
is_login_item?(data)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 38 def is_login_item?(data) data.details.password.nil? end
login_item(data)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 46 def login_item(data) data.details.fields[1].value end
op_get_item(item, vault)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 50 def op_get_item(item, vault) validate_op_installed? item = %x(op get item --vault='#{vault}' '#{item}' 2>&1) item if validate_response?(item) end
password_item(data)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 42 def password_item(data) data.details.password end
validate_op_installed?()
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 23 def validate_op_installed? %x(op --version) rescue Errno::ENOENT => exception raise OnePasswordBinaryNotFound, "The op cli needs to be installed and in the PATH, #{exception}" end
validate_response?(item)
click to toggle source
# File lib/stack_master/parameter_resolvers/one_password.rb, line 29 def validate_response?(item) item.match(/\[LOG\].+(?<error>\(.+)$/) do |i| raise OnePasswordNotFound, "Failed to return item from 1password, #{i['error']}" end JSON.parse(item) rescue JSON::ParserError => exception raise OnePasswordInvalidResponse, "Failed to parse JSON returned, #{item}: #{exception}" end