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