Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions mrblib/main_task.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,70 @@
require 'machine'
require "watchdog"
require 'env'
require 'yaml'
require "mbedtls"
require "base64"
require 'esp32'
Watchdog.disable
require "shell"
STDIN = IO.new
STDOUT = IO.new

def decrypt(decoded_password)
cipher = MbedTLS::Cipher.new("AES-256-CBC")
cipher.decrypt
key_len = cipher.key_len
iv_len = cipher.iv_len
unique_id = Machine.unique_id
len = unique_id.length
cipher.key = (unique_id * ((key_len / len + 1) * len))[0, key_len].to_s
cipher.iv = (unique_id * ((iv_len / len + 1) * len))[0, iv_len].to_s
# Based on successful debug run: CBC mode has empty tag, so entire data is ciphertext
ciphertext = decoded_password
cipher.update(ciphertext) + cipher.finish
end

def parse_wifi_config
wifi_config_path = ENV['WIFI_CONFIG_PATH'] || ENV_DEFAULT_WIFI_CONFIG_PATH

unless File.file?(wifi_config_path)
puts "File #{wifi_config_path} does not exist"
return
end

config = File.open(wifi_config_path, "r") do |f|
YAML.load(f.read.to_s)
end

begin
ssid = config['wifi']['ssid']
encoded_password = config['wifi']['encoded_password']
rescue
puts "Invalid configuration file"
return
end

decoded_password = Base64.decode64(encoded_password)
password = decrypt(decoded_password)

return ssid, password
end

def setup_wifi
ssid, password = parse_wifi_config
return if ssid.nil? || password.nil?

ESP32::WiFi.init
5.times do |i|
break if ESP32::WiFi.connect_timeout(ssid, password, ESP32::Auth::WPA2_AES_PSK, 10000)

puts "Retrying WiFi connection..."
Machine.delay_ms(1000)
end
print "WiFi "
puts ESP32::WiFi.tcpip_link_status == ESP32::WiFi::LINK_UP ? "connected successfully" : "connection failed"
end

# Setup flash disk
begin
STDIN.echo = false
Expand All @@ -18,6 +78,8 @@
end

begin
setup_wifi

if File.exist?("/home/app.mrb")
puts "Loading app.mrb"
load "/home/app.mrb"
Expand Down