Module: TwoPass

Defined in:
lib/2pass.rb,
lib/2pass/version.rb

Constant Summary collapse

VAULT_DIR =
"#{Dir.home}/.2pass"
VERSION =
"1.0.0"

Class Method Summary collapse

Class Method Details

.add_secret(vault_name, id, value) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/2pass.rb', line 45

def self.add_secret(vault_name, id, value)
  new_secret = {
    id: id,
    value: value,
    uuid: SecureRandom.uuid
  }
  data = load_vault(vault_name)
  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)
end


12
13
14
15
16
17
18
19
20
21
22
# File 'lib/2pass.rb', line 12

def self.create_symlink(vault_name, target_path)
  FileUtils.mkdir_p(VAULT_DIR)
  symlink_path = "#{VAULT_DIR}/#{vault_name}.yml"

  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) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/2pass.rb', line 60

def self.get_secret(vault_name, id)
  vault = load_vault(vault_name)
  entry = vault.find { |hash| hash[:id] == id }
  if entry
    entry[:value]
  else
    raise "Entry not found"
  end
end

.list_content(vault_name) ⇒ Object



40
41
42
43
# File 'lib/2pass.rb', line 40

def self.list_content(vault_name)
  vault = load_vault(vault_name)
  JSON.pretty_generate(vault)
end

.load_vault(vault_name) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/2pass.rb', line 24

def self.load_vault(vault_name)
  file_path = "#{VAULT_DIR}/#{vault_name}.yml"
  return [] unless File.exist?(file_path)

  YAML.load_file(file_path, symbolize_names: true) || []
rescue Psych::SyntaxError => e
  STDERR.puts "Error parsing YAML file: #{e.message}"
  []
end

.save_vault(vault_name, data) ⇒ Object



34
35
36
37
38
# File 'lib/2pass.rb', line 34

def self.save_vault(vault_name, data)
  FileUtils.mkdir_p(VAULT_DIR)
  file_path = "#{VAULT_DIR}/#{vault_name}.yml"
  File.write(file_path, YAML.dump(data))
end