Class: Seekrit::Store

Inherits:
Object
  • Object
show all
Defined in:
lib/seekrit/store.rb

Constant Summary collapse

CIPHER =
'aes-256-cbc'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(password, file, cipher = CIPHER) ⇒ Store

Returns a new instance of Store.



14
15
16
17
18
19
# File 'lib/seekrit/store.rb', line 14

def initialize(password, file, cipher=CIPHER)
  @password = password
  @cipher   = cipher
  @file     = file
  @secrets  = load_data(file)
end

Instance Attribute Details

#secretsObject (readonly)

Returns the value of attribute secrets.



12
13
14
# File 'lib/seekrit/store.rb', line 12

def secrets
  @secrets
end

Instance Method Details

#[](name) ⇒ Object



25
26
27
# File 'lib/seekrit/store.rb', line 25

def [](name)
  secrets[name] && decrypt(secrets[name])
end

#[]=(name, value) ⇒ Object



29
30
31
# File 'lib/seekrit/store.rb', line 29

def []=(name, value)
  secrets[name] = encrypt(value)
end

#delete(name) ⇒ Object



33
34
35
# File 'lib/seekrit/store.rb', line 33

def delete(name)
  secrets.delete(name)
end

#export(io) ⇒ Object



49
50
51
52
53
# File 'lib/seekrit/store.rb', line 49

def export(io)
  secrets.sort_by{ |k,_| k }.each do |name, value|
    io << escape(name) << "\t" << escape(decrypt(value)) << "\n"
  end
end

#import(io) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/seekrit/store.rb', line 55

def import(io)
  secrets.clear
  while line = io.gets
    name, data = line.chomp.split(/\t/, 2).map{ |a| unescape(a) }
    self[name] = data
  end
end

#keysObject



21
22
23
# File 'lib/seekrit/store.rb', line 21

def keys
  secrets.keys
end

#rename(oldname, newname) ⇒ Object



37
38
39
40
# File 'lib/seekrit/store.rb', line 37

def rename(oldname, newname)
  self[newname] = self[oldname]
  delete(oldname)
end

#saveObject



42
43
44
45
46
47
# File 'lib/seekrit/store.rb', line 42

def save
  @file.rewind
  secrets.sort_by{ |k,_| k }.each do |name, value|
    @file << escape(name) << "\t" << hexdump(value) << "\n"
  end
end