Skip to content

Commit

Permalink
Use IOdata instead of post processing
Browse files Browse the repository at this point in the history
  • Loading branch information
ConnorRigby authored and fhunleth committed May 9, 2019
1 parent 4ff7aea commit b3ffddd
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 63 deletions.
86 changes: 46 additions & 40 deletions lib/vintage_net/technology/wifi.ex
Original file line number Diff line number Diff line change
Expand Up @@ -94,66 +94,62 @@ defmodule VintageNet.Technology.WiFi do
end

defp wifi_to_supplicant_contents(wifi, control_interface_path, regulatory_domain) do
"""
ctrl_interface=#{control_interface_path}
country=#{regulatory_domain}
""" <> into_wifi_network_config(wifi)
[
"ctrl_interface=#{control_interface_path}",
"\n",
"country=#{regulatory_domain}",
"\n",
into_wifi_network_config(wifi)
]
|> IO.iodata_to_binary()
end

defp key_mgmt_to_string(key) when key in [:none, :wep], do: "NONE"
defp key_mgmt_to_string(:wpa_psk), do: "WPA-PSK"
defp key_mgmt_to_string(:wpa_eap), do: "WPA-EAP"

defp into_wifi_network_config(%{networks: networks}) do
Enum.reduce(networks, "", fn network, config ->
config <> into_wifi_network_config(network)
end)
Enum.map(networks, &into_wifi_network_config/1)
end

defp into_wifi_network_config(%{key_mgmt: :wep} = wifi) do
"""
network={
#{into_config_string(wifi, :ssid)}
key_mgmt=NONE
wep_tx_keyidx=0
wep_key0=#{wifi.psk}
}
"""
network_config([
into_config_string(wifi, :ssid),
"key_mgmt=NONE",
"wep_tx_keyidx=0",
"wep_key0=#{wifi.psk}"
])
end

defp into_wifi_network_config(%{key_mgmt: :wpa_eap} = wifi) do
"""
network={
#{into_config_string(wifi, :ssid)}
#{into_config_string(wifi, :key_mgmt)}
#{into_config_string(wifi, :scan_ssid)}
#{into_config_string(wifi, :priority)}
#{into_config_string(wifi, :pairwise)}
#{into_config_string(wifi, :group)}
#{into_config_string(wifi, :eap)}
#{into_config_string(wifi, :identity)}
#{into_config_string(wifi, :password)}
#{into_config_string(wifi, :phase1)}
#{into_config_string(wifi, :phase2)}
}
"""
network_config([
into_config_string(wifi, :ssid),
into_config_string(wifi, :key_mgmt),
into_config_string(wifi, :scan_ssid),
into_config_string(wifi, :priority),
into_config_string(wifi, :pairwise),
into_config_string(wifi, :group),
into_config_string(wifi, :eap),
into_config_string(wifi, :identity),
into_config_string(wifi, :password),
into_config_string(wifi, :phase1),
into_config_string(wifi, :phase2)
])
end

defp into_wifi_network_config(wifi) do
"""
network={
#{into_config_string(wifi, :ssid)}
#{into_config_string(wifi, :psk)}
#{into_config_string(wifi, :key_mgmt)}
#{into_config_string(wifi, :scan_ssid)}
#{into_config_string(wifi, :priority)}
}
"""
network_config([
into_config_string(wifi, :ssid),
into_config_string(wifi, :psk),
into_config_string(wifi, :key_mgmt),
into_config_string(wifi, :scan_ssid),
into_config_string(wifi, :priority)
])
end

defp into_config_string(wifi, opt_key) do
case Map.get(wifi, opt_key) do
nil -> ""
nil -> nil
opt -> wifi_opt_to_config_string(wifi, opt_key, opt)
end
end
Expand Down Expand Up @@ -224,4 +220,14 @@ defmodule VintageNet.Technology.WiFi do
{:ok, hostname} = :inet.gethostname()
to_string(hostname)
end

defp network_config(config) do
config =
Enum.map(config, fn
nil -> []
conf -> [conf, "\n"]
end)

["network={", "\n", config, "}", "\n"]
end
end
34 changes: 11 additions & 23 deletions test/vintage_net/config_wifi_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ defmodule VintageNet.ConfigWiFiTest do
ssid="testing"
psk=1234567890123456789012345678901234567890123456789012345678901234
key_mgmt=WPA-PSK
}
"""}
],
Expand Down Expand Up @@ -81,8 +79,6 @@ defmodule VintageNet.ConfigWiFiTest do
ssid="testing"
psk=1EE0A473A954F61007E526365D4FDC056FE2A102ED2CE77D64492A9495B83030
key_mgmt=WPA-PSK
}
"""}
],
Expand Down Expand Up @@ -126,10 +122,7 @@ defmodule VintageNet.ConfigWiFiTest do
country=00
network={
ssid="testing"
key_mgmt=NONE
}
"""}
],
Expand Down Expand Up @@ -225,7 +218,6 @@ defmodule VintageNet.ConfigWiFiTest do
psk=1234567890123456789012345678901234567890123456789012345678901234
key_mgmt=WPA-PSK
scan_ssid=1
}
"""}
],
Expand All @@ -244,7 +236,7 @@ defmodule VintageNet.ConfigWiFiTest do
assert {:ok, output} == WiFi.to_raw_config("wlan0", input, default_opts())
end

test "create a EAP network" do
test "create a basic EAP network" do
input = %{
type: VintageNet.Technology.WiFi,
wifi: %{
Expand Down Expand Up @@ -276,17 +268,16 @@ defmodule VintageNet.ConfigWiFiTest do
ctrl_interface=/tmp/vintage_net/wpa_supplicant
country=00
network={
ssid="testing"
key_mgmt=WPA-EAP
scan_ssid=1
pairwise=CCMP TKIP
group=CCMP TKIP
eap=PEAP
identity=user1
password=supersecret
phase1=peapver=auto
phase2=MSCHAPV2
ssid="testing"
key_mgmt=WPA-EAP
scan_ssid=1
pairwise=CCMP TKIP
group=CCMP TKIP
eap=PEAP
identity=user1
password=supersecret
phase1=peapver=auto
phase2=MSCHAPV2
}
"""}
],
Expand Down Expand Up @@ -352,21 +343,18 @@ defmodule VintageNet.ConfigWiFiTest do
ssid="first_priority"
psk=1234567890123456789012345678901234567890123456789012345678901234
key_mgmt=WPA-PSK
priority=100
}
network={
ssid="second_priority"
psk=1234567890123456789012345678901234567890123456789012345678901234
key_mgmt=WPA-PSK
priority=1
}
network={
ssid="third_priority"
psk=1234567890123456789012345678901234567890123456789012345678901234
key_mgmt=NONE
priority=0
}
"""}
Expand Down

0 comments on commit b3ffddd

Please sign in to comment.