Module: TwoPass
- Defined in:
- lib/2pass.rb,
lib/2pass/version.rb
Constant Summary collapse
- VAULT_DIR =
"#{Dir.home}/.2pass"- VERSION =
"2.0.0"
Class Method Summary collapse
- .add_secret(vault_name, id, value, env: nil) ⇒ Object
- .create_symlink(vault_name, target_path, env: nil) ⇒ Object
- .get_secret(vault_name, id, env: nil) ⇒ Object
- .list_content(vault_name, env: nil, format: :table) ⇒ Object
- .save_vault(vault_name, data, env: nil) ⇒ Object
Class Method Details
.add_secret(vault_name, id, value, env: nil) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/2pass.rb', line 60 def add_secret(vault_name, id, value, env: nil) new_secret = { id: id, value: value } data = load_vault(vault_name, env: env) existing_entry_id = data.find_index { |hash| hash[:id] == new_secret[:id] } if existing_entry_id raise "The secret already exists" end data << new_secret save_vault(vault_name, data, env: env) end |
.create_symlink(vault_name, target_path, env: nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/2pass.rb', line 15 def create_symlink(vault_name, target_path, env: nil) FileUtils.mkdir_p(VAULT_DIR) symlink_path = vault_file_path(vault_name, env: env) if File.exist?(symlink_path) puts "Symlink already exists: #{symlink_path}" else File.symlink(target_path, symlink_path) puts "Created symlink: #{symlink_path} -> #{target_path}" end end |
.get_secret(vault_name, id, env: nil) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/2pass.rb', line 74 def get_secret(vault_name, id, env: nil) vault = load_vault(vault_name, env: env) entry = vault.find { |hash| hash[:id] == id } if entry entry[:value] else raise "Entry not found" end end |
.list_content(vault_name, env: nil, format: :table) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/2pass.rb', line 33 def list_content(vault_name, env: nil, format: :table) vault = load_vault(vault_name, env: env) if format == :table rows = vault .sort_by { |hash| hash[:id] } .each_with_object([]) do |h, arr| arr << [h[:id], h[:value]] end Terminal::Table.new( rows: rows, title: env || nil, style: {all_separators: true} ).to_s elsif format == :dotenv vault .map { |h| "#{h[:id]}=#{h[:value]}" } .sort .join("\n") elsif format == :json JSON.pretty_generate( vault .map { |hash| hash.slice(:id, :value) } .sort_by { |hash| hash[:id] } ) end end |
.save_vault(vault_name, data, env: nil) ⇒ Object
27 28 29 30 31 |
# File 'lib/2pass.rb', line 27 def save_vault(vault_name, data, env: nil) FileUtils.mkdir_p(VAULT_DIR) file_path = vault_file_path(vault_name, env: env) File.write(file_path, YAML.dump(data)) end |