Class: Keystorage::Manager

Inherits:
Object
  • Object
show all
Includes:
Keystorage
Defined in:
lib/keystorage/manager.rb

Overview

ks = keystorage::Manager.new(:file =>“”,:secret=> “P@ssword”) ks.get(“mygroup”,“mykey”) # => “mysecret”

Constant Summary

Constants included from Keystorage

DEFAULT_FILE, DEFAULT_SECRET

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Keystorage

#render, #render_text

Constructor Details

#initialize(options = {}) ⇒ Manager

Returns a new instance of Manager.



9
10
11
# File 'lib/keystorage/manager.rb', line 9

def initialize options = {}
  @options = options
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



8
9
10
# File 'lib/keystorage/manager.rb', line 8

def options
  @options
end

Instance Method Details

#exec(*cmd) ⇒ Object

Raises:



59
60
61
62
# File 'lib/keystorage/manager.rb', line 59

def exec *cmd
  raise SecretMissMatch unless valid?
  system(envs.collect{ |k,v| "#{k}='#{v}'" }.join(' ') + " " + cmd.join(' '))
end

#get(group, key) ⇒ Object

Raises:



21
22
23
24
# File 'lib/keystorage/manager.rb', line 21

def get(group,key)
  raise SecretMissMatch unless valid?
  decode(file[group][key])
end

#groupsObject



13
14
15
# File 'lib/keystorage/manager.rb', line 13

def groups
  file.keys.delete_if {|i| i == "@" }
end

#keys(group) ⇒ Object



17
18
19
# File 'lib/keystorage/manager.rb', line 17

def keys(group)
  file[group].keys
end

#password(new_secret) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/keystorage/manager.rb', line 42

def password new_secret
  raise SecretMissMatch unless valid?

  # update passwords
  data = file.each { |name,keys|
    next if name == "@"
    keys.each { |key,value|
      keys[key] = encode(decode(value),new_secret)
    }
  }
  # update root group and write to file
  write root!(new_secret,data)
rescue Errno::ENOENT
  write({})
  retry
end

#set(group, key, value) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/keystorage/manager.rb', line 26

def set(group,key,value)
  raise RejectGroupName.new("Cannot use '@' for group name.") if group == "@"
  raise SecretMissMatch unless valid?

  data = file
  data[group] = {} unless data.has_key?(group)
  data[group][key] = {} unless data[group].has_key?(key)
  data[group][key] = encode(value)
  write(data)

  data[group][key]
rescue Errno::ENOENT
  write({})
  retry
end