class Pione::Relay::RelayClientDB
Public Class Methods
new(path)
click to toggle source
# File lib/pione/relay/relay-client-db.rb, line 4 def initialize(path) raise TypeError.new(path) unless path.kind_of?(Pathname) @path = path @table = read_database end
Public Instance Methods
add(name, password)
click to toggle source
# File lib/pione/relay/relay-client-db.rb, line 14 def add(name, password) # stretching x 1000 @table[name] = (1..1000).inject("") {|hash, _| Digest::SHA512.hexdigest("%s:%s:%s" % [hash, name, password]) } end
auth(uuid, name, response)
click to toggle source
# File lib/pione/relay/relay-client-db.rb, line 10 def auth(uuid, name, response) Digest::SHA512.hexdigest("%s:%s" % [uuid, @table[name]]) == response end
delete(name)
click to toggle source
# File lib/pione/relay/relay-client-db.rb, line 21 def delete(name) @table.delete(name) save end
names()
click to toggle source
# File lib/pione/relay/relay-client-db.rb, line 26 def names @table.keys end
save()
click to toggle source
# File lib/pione/relay/relay-client-db.rb, line 30 def save @path.open("w+", 0600) do |f| @table.each do |name, digest| f.puts "%s:%s" % [name, digest] if name and digest end end end
Private Instance Methods
read_database()
click to toggle source
# File lib/pione/relay/relay-client-db.rb, line 40 def read_database if @path.exist? @path.readlines.inject({}) do |tbl, line| name, digest = line.chomp.split(":") tbl.tap{ tbl.store(name, digest) } end else {} end end