Vintage Net Wifi - Passing credentials by configuration at compile time

Hello there :slight_smile:

I am using the vintage net wifi package on my nerves project.

I don’t want to source my WIFI credentials to git but unfortunately the WIFI is configured at compile time and I need to pass the credentials in my target.exs file.

I was wondering if someone figured out a way to read the wifi credentials from a configuration file at compile time that is not sourced to git.

I’ve tried to read from environment variables but I have problems trying to load those environment variables into my system because of the following:

I’ve thought on having an environment variable WIFI_SSID_LIST=ssid1,ssid2,ssid3

but if the SSID contains &, the export $(cat .env | xargs) command will fail:

export: not valid in this context: &

So then I started thinking on having a separate file and reading it using File.read on the target.exs but I am not sure about it.

Is there someone that has tried something else?

1 Like

target.exs is a Elixir script, so you can populate that data from anywhere. I sometimes do things like this

ssid = System.get_env("WIFI_SSID")
psk = System.get_env("WIFI_PSK")
config :vintage_net,
  regulatory_domain: "US",
  config: [
    {"wlan0", %{type: VintageNetWiF, networks: [%{ssid: ssid, psk: psk}]}},
  ]

You can extend this to have a list if you want as well.

unfortunately the WIFI is configured at compile time and I need to pass the credentials in my target.exs file.

you don’t have to set them at compile-time. you can do this:

config :vintage_net,
  regulatory_domain: "US",
  config: [
    {"wlan0", %{type: VintageNetWiFi}},
  ]

And then configure it at runtime with

iex()> VintageNetWiFi.quick_configure(ssid, psk)
5 Likes

I don’t know what OS you are running on, but have you tried to source the .env file instead of cattting it?

source .env

1 Like

I am running Mac OS, source .env only works if the .env file declares the variables with the export keyword at the beginning

so I had it like

KEY=VALUE

now I’ve changed it to:

export KEY=VALUE

and now it works :slight_smile: I didn’t want to use the export keyword since most libraries like dotenv don’t require it but I guess its fine

Thanks so much :slight_smile:

Configuring it at runtime looks like a good solution for my use case