class Meshchat::Configuration::Settings

Constants

DEFAULT_SETTINGS
FILENAME

Public Class Methods

new() click to toggle source
Calls superclass method Meshchat::Configuration::HashFile::new
# File lib/meshchat/configuration/settings.rb, line 84
def initialize
  @default_settings = DEFAULT_SETTINGS
  @filename = FILENAME
  super
end

Public Instance Methods

debug?() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 19
def debug?
  %w(true 1 yes y t).include?(self['debug'].try(:downcase))
end
errors() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 94
def errors
  messages = []
  messages << 'must have an alias' unless self['alias'].present?
  messages << 'must have ip set' unless self['ip'].present?
  messages << 'must have port set' unless self['port'].present?
  messages << 'must have uid set' unless self['uid'].present?
  messages
end
generate_keys() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 62
def generate_keys
  @key_pair = OpenSSL::PKey::RSA.new(2048)
  self['publickey'] = @key_pair.public_key.to_pem
  self['privatekey'] = @key_pair.to_pem
  Display.success 'new keys generated'
end
generate_uid() click to toggle source

generates 32 bytes

# File lib/meshchat/configuration/settings.rb, line 57
def generate_uid
  self['uid'] = SecureRandom.hex(32)
  Display.success 'new uid set'
end
identity() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 76
def identity
  "#{self['alias']}@#{location}##{self['uid']}"
end
identity_as_json() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 23
def identity_as_json
  {
    'alias' => self['alias'],
    'location' => location,
    'uid' => self['uid'],
    'publickey' => public_key
  }
end
is_complete?() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 103
def is_complete?
  valid? && self['privatekey'] && self['publickey']
end
key_pair() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 69
def key_pair
  if !@key_pair && keys_exist?
    @key_pair = OpenSSL::PKey::RSA.new(self['privatekey'] + self['publickey'])
  end
  @key_pair
end
keys_exist?() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 40
def keys_exist?
  public_key.present? && private_key.present?
end
location() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 80
def location
  "#{self['ip']}:#{self['port']}"
end
private_key() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 52
def private_key
  self['privatkey']
end
public_key() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 48
def public_key
  self['publickey']
end
share() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 32
def share
  data = identity_as_json.to_json

  filename = "#{identity_as_json['alias']}.json"
  File.open(filename, 'w') { |f| f.syswrite(data) }
  Display.info "#{filename} written..."
end
uid_exists?() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 44
def uid_exists?
  self['uid'].present?
end
valid?() click to toggle source
# File lib/meshchat/configuration/settings.rb, line 90
def valid?
  errors.empty?
end