class Zlown::Core

Public Class Methods

init(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 180
def self.init(args = [], opts = {})
  Core.init_dirs(args, opts)

  Core.init_service_template(args, opts)

  Core.init_config_file(args, opts)

  Core.update_configs(args, opts)
end
init_boot_script(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 136
def self.init_boot_script(args = [], opts = {})
  config = Core.load_config(args, opts)

  template = File.read(Zlown::Config::BOOT_SCRIPT_TEMPLATE)
  content = template
              .gsub('${IFACE_AP}', config[:ap])
              .gsub('${IFACE_UPSTREAM}', config[:upstream])

  # To write changes to the file, use:
  File.open(Zlown::Config::BOOT_SCRIPT, 'w') do |file|
    puts "Writting file #{Zlown::Config::BOOT_SCRIPT}"
    file.puts content
  end

  cmd = "chmod +x #{Zlown::Config::BOOT_SCRIPT}"
  puts cmd
  system cmd
end
init_config_file(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 63
def self.init_config_file(args = [], opts = {})
  config = Core.load_config(args, opts)

  cli = HighLine.new
  config[:upstream] = cli.ask('Upstream Interface?') { |q| q.default = config[:upstream] }
  config[:ap] = cli.ask('Wi-Fi ap Interface?') { |q| q.default = config[:ap] }
  config[:driver] = cli.ask('Wi-Fi Driver?') { |q| q.default = config[:driver] }
  config[:ssid] = cli.ask('Wi-Fi SSID?') { |q| q.default = config[:ssid] }
  config[:channel] = cli.ask('Wi-Fi Channel?') { |q| q.default = config[:channel] }

  puts "Writting config to #{Zlown::Config::CONFIG_FILE}"
  File.open(Zlown::Config::CONFIG_FILE, 'w') do |f|
    f.write config.to_yaml
  end

  config
end
init_dirs(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 35
def self.init_dirs(args = [], opts = {})
  unless File.directory?(Zlown::Config::APP_DIR)
    puts "Creating directory #{Zlown::Config::APP_DIR}"
    FileUtils.mkdir_p(Zlown::Config::APP_DIR)
  end

  unless File.directory?(Zlown::Config::DATA_DIR)
    puts "Creating directory #{Zlown::Config::DATA_DIR}"
    FileUtils.mkdir_p(Zlown::Config::DATA_DIR)
  end

  unless File.directory?(Zlown::Config::RUN_DIR)
    puts "Creating directory #{Zlown::Config::RUN_DIR}"
    FileUtils.mkdir_p(Zlown::Config::RUN_DIR)
  end
end
init_dnsmaq(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 101
def self.init_dnsmaq(args = [], opts = {})
  config = Core.load_config(args, opts)

  template = File.read(Zlown::Config::DNSMASQ_TEMPLATE)
  content = template.gsub('${IFACE_AP}', config[:ap])

  # To write changes to the file, use:
  File.open(Zlown::Config::DNSMASQ_CONFIG, 'w') do |file|
    puts "Writting file #{Zlown::Config::DNSMASQ_CONFIG}"
    file.puts content
  end
end
init_hostapd(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 114
def self.init_hostapd(args = [], opts = {})
  # See https://www.offensive-security.com/kali-linux/kali-linux-evil-wireless-access-point/
  cmd = "sed -i 's#^DAEMON_CONF=.*#DAEMON_CONF=/etc/hostapd/hostapd.conf#' /etc/init.d/hostapd"
  puts cmd
  system cmd

  config = Core.load_config(args, opts)

  template = File.read(Zlown::Config::HOSTAPD_TEMPLATE)
  content = template
              .gsub('${IFACE}', config[:ap])
              .gsub('${DRIVER}', config[:driver])
              .gsub('${SSID}', config[:ssid])
              .gsub('${CHANNEL}', config[:channel])

  # To write changes to the file, use:
  File.open(Zlown::Config::HOSTAPD_CONFIG, 'w') do |file|
    puts "Writting file #{Zlown::Config::HOSTAPD_CONFIG}"
    file.puts content
  end
end
init_rc_local(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 155
def self.init_rc_local(args = [], opts = {})
  Core.init_boot_script(args, opts)

  config = Core.load_config(args, opts)

  template = File.read(Zlown::Config::RCLOCAL_TEMPLATE)
  content = template

  # To write changes to the file, use:
  File.open(Zlown::Config::RCLOCAL_CONFIG, 'w') do |file|
    puts "Writting file #{Zlown::Config::RCLOCAL_CONFIG}"
    file.puts content
  end
end
init_service_template(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 52
def self.init_service_template(args = [], opts = {})
  template = File.read(Zlown::Config::SERVICE_TEMPLATE)
  content = template.gsub('#{RUN_CMD}', Zlown::Config::RUN_CMD)

  # To write changes to the file, use:
  File.open(Zlown::Config::SERVICE_FILE, 'w') do |file|
    puts "Writting file #{Zlown::Config::SERVICE_FILE}"
    file.puts content
  end
end
init_systemctl(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 81
def self.init_systemctl(args = [], opts = {})
  # TODO: Process dnsmasq.conf and hostapd.conf

  cmd = "systemctl enable #{Zlown::Config::HOSTAPD_SERVICE}"
  puts cmd
  system cmd

  cmd = "systemctl enable #{Zlown::Config::DNSMASQ_SERVICE}"
  puts cmd
  system cmd

  cmd = "systemctl start #{Zlown::Config::HOSTAPD_SERVICE}"
  puts cmd
  system cmd

  cmd = "systemctl start #{Zlown::Config::DNSMASQ_SERVICE}"
  puts cmd
  system cmd
end
install(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 29
def self.install(args = [], opts = {})
  cmd = 'apt-get install -y hostapd dnsmasq wireless-tools iw wvdial'
  puts cmd
  system cmd
end
load_config(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 15
def self.load_config(args = [], opts = {})
  config = {
    upstream: 'eth0',
    ap: 'wlan0',
    driver: 'nl80211',
    ssid: 'FreeWifi',
    channel: '6'
  }

  if File.exist?(Zlown::Config::CONFIG_FILE)
    config = config.merge(YAML.load(File.open(Zlown::Config::CONFIG_FILE)))
  end
end
update_configs(args = [], opts = {}) click to toggle source
# File lib/zlown/core/core.rb, line 170
def self.update_configs(args = [], opts = {})
  Core.init_dnsmaq(args, opts)

  Core.init_hostapd(args, opts)

  Core.init_rc_local(args, opts)

  Core.init_systemctl(args, opts)
end