class Pione::Relay::RelayAccountDB

Constants

Account

Public Class Methods

new(path) click to toggle source
# File lib/pione/relay/relay-account-db.rb, line 10
def initialize(path)
  raise TypeError.new(path) unless path.kind_of?(Pathname)
  @path = path
  @table = read_database
end

Public Instance Methods

add(realm, name, password) click to toggle source
# File lib/pione/relay/relay-account-db.rb, line 16
def add(realm, name, password)
  # stretching x 1000
  digest = (1..1000).inject("") {|hash, _|
    Digest::SHA512.hexdigest("%s:%s:%s" % [hash, name, password])
  }
  @table[realm] = Account.new(name, digest)
end
delete(realm) click to toggle source
# File lib/pione/relay/relay-account-db.rb, line 24
def delete(realm)
  @table.delete(realm)
  save
end
realms() click to toggle source
# File lib/pione/relay/relay-account-db.rb, line 29
def realms
  @table.keys
end
save() click to toggle source
# File lib/pione/relay/relay-account-db.rb, line 33
def save
  @path.open("w+", 0600) do |f|
    @table.each do |realm, account|
      f.puts "%s:%s:%s" % [realm, account.name, account.digest] if realm and account
    end
  end
end

Private Instance Methods

read_database() click to toggle source
# File lib/pione/relay/relay-account-db.rb, line 43
def read_database
  if @path.exist?
    @path.readlines.inject({}) do |tbl, line|
      realm, name, digest = line.chomp.split(":")
      tbl.tap{ tbl.store(realm, Account.new(name, digest)) }
    end
  else
    {}
  end
end