farmbot_os/farmbot_os/lib/farmbot_os/configurator/config_data_layer.ex

144 lines
3.8 KiB
Elixir

defmodule FarmbotOS.Configurator.ConfigDataLayer do
@moduledoc """
implementation of Configurator.DataLayer responsible for
gathering and storing data Via Ecto.
"""
@behaviour FarmbotOS.Configurator.DataLayer
require FarmbotCore.Logger
alias FarmbotCore.Config
alias FarmbotOS.FileSystem
alias FarmbotCore.Asset
@impl FarmbotOS.Configurator.DataLayer
def save_config(%{
"ifname" => ifname,
"iftype" => iftype,
"net_config_dns_name" => net_config_dns_name,
"net_config_ntp1" => net_config_ntp1,
"net_config_ntp2" => net_config_ntp2,
"net_config_ssh_key" => net_config_ssh_key,
"net_config_ssid" => net_config_ssid,
"net_config_security" => net_config_security,
"net_config_psk" => net_config_psk,
"net_config_identity" => net_config_identity,
"net_config_password" => net_config_password,
"net_config_domain" => net_config_domain,
"net_config_name_servers" => net_config_name_servers,
"net_config_ipv4_method" => net_config_ipv4_method,
"net_config_ipv4_address" => net_config_ipv4_address,
"net_config_ipv4_gateway" => net_config_ipv4_gateway,
"net_config_ipv4_subnet_mask" => net_config_ipv4_subnet_mask,
"net_config_reg_domain" => net_config_reg_domain,
"auth_config_email" => auth_config_email,
"auth_config_password" => auth_config_password,
"auth_config_server" => auth_config_server
}) do
network_params = %{
name: ifname,
type: iftype,
ssid: net_config_ssid,
psk: net_config_psk,
security: net_config_security,
identity: net_config_identity,
password: net_config_password,
ipv4_method: net_config_ipv4_method,
ipv4_address: net_config_ipv4_address,
ipv4_gateway: net_config_ipv4_gateway,
ipv4_subnet_mask: net_config_ipv4_subnet_mask,
domain: net_config_domain,
name_servers: net_config_name_servers,
regulatory_domain: net_config_reg_domain
}
# Network settings
_ = Config.input_network_config!(network_params)
# Runtime network configuration
_ =
Config.update_config_value(
:string,
"settings",
"default_ntp_server_1",
net_config_ntp1
)
_ =
Config.update_config_value(
:string,
"settings",
"default_ntp_server_2",
net_config_ntp2
)
_ =
Config.update_config_value(
:string,
"settings",
"default_dns_name",
net_config_dns_name
)
if net_config_ssh_key do
Asset.new_public_key!(%{
name: "authorized_ssh_key",
public_key: net_config_ssh_key
})
end
# Farmbot specific auth data
_ = Config.update_config_value(:string, "authorization", "secret", nil)
_ =
Config.update_config_value(
:string,
"authorization",
"email",
auth_config_email
)
_ =
Config.update_config_value(
:string,
"authorization",
"password",
auth_config_password
)
_ =
Config.update_config_value(
:string,
"authorization",
"server",
auth_config_server
)
:ok
end
@impl FarmbotOS.Configurator.DataLayer
def load_last_reset_reason() do
file_path = Path.join(FileSystem.data_path(), "last_reset_reason")
case File.read(file_path) do
{:ok, data} -> data
_ -> nil
end
end
@impl FarmbotOS.Configurator.DataLayer
def load_email() do
Config.get_config_value(:string, "authorization", "email")
end
@impl FarmbotOS.Configurator.DataLayer
def load_password() do
Config.get_config_value(:string, "authorization", "password")
end
@impl FarmbotOS.Configurator.DataLayer
def load_server() do
Config.get_config_value(:string, "authorization", "server")
end
end