defmodule NervesBackdoor do
def home() do
Application.get_env(:nerves_backdoor, :home)
end
def name() do
Application.get_env(:nerves_backdoor, :name)
end
def hostname() do
Application.get_env(:nerves_backdoor, :hostname, gethostname())
end
def version() do
Application.get_env(:nerves_backdoor, :version)
end
def port() do
Application.get_env(:nerves_backdoor, :port)
end
def ifname() do
Application.get_env(:nerves_backdoor, :ifname)
end
def io_led() do
Application.get_env(:nerves_backdoor, :io_led)
end
def io_btn() do
Application.get_env(:nerves_backdoor, :io_btn)
end
def blink_ms() do
Application.get_env(:nerves_backdoor, :blink_ms)
end
def mac() do
case MACAddress.mac_address(ifname()) do
{:ok, mac} -> mac |> MACAddress.to_hex(case: :upper)
_ -> "00:00:00:00:00:00"
end
|> String.replace(":", "")
end
def password(type \\ :current) do
case type do
:default ->
mac()
:current ->
path = pass_path()
case File.read(path) do
{:ok, data} -> String.trim(data)
_ -> mac()
end
end
end
def pass_reset() do
File.mkdir_p(home())
File.rm(pass_path())
end
def pass_set(password) do
File.write(pass_path(), password)
end
def pass_path() do
Path.join(home(), "password.txt")
end
def gethostname() do
{:ok, hostname} = :inet.gethostname()
hostname |> to_string
end
def blink() do
io = NervesBackdoor.io_led()
ms = NervesBackdoor.blink_ms()
{:ok, gpio} = NervesBackdoor.Gpio.output(io)
:ok = NervesBackdoor.Gpio.write(gpio, 1)
:timer.sleep(ms)
:ok = NervesBackdoor.Gpio.write(gpio, 0)
:timer.sleep(ms)
:ok = NervesBackdoor.Gpio.write(gpio, 1)
:timer.sleep(ms)
:ok = NervesBackdoor.Gpio.write(gpio, 0)
:timer.sleep(ms)
:ok = NervesBackdoor.Gpio.write(gpio, 1)
:timer.sleep(ms)
:ok = NervesBackdoor.Gpio.write(gpio, 0)
:ok = NervesBackdoor.Gpio.close(gpio)
end
end