farmbot_os/farmbot_os/lib/farmbot_os/sys_calls/change_ownership.ex

57 lines
1.6 KiB
Elixir

defmodule FarmbotOS.SysCalls.ChangeOwnership do
@moduledoc false
require Logger
require FarmbotCore.Logger
import FarmbotCore.Config, only: [get_config_value: 3, update_config_value: 4]
alias FarmbotCore.{Asset, EctoMigrator}
alias FarmbotExt.Bootstrap.Authorization
def change_ownership(email, secret, server) do
server = server || get_config_value(:string, "authorization", "server")
case Authorization.authorize_with_secret(email, secret, server) do
{:ok, _token} ->
FarmbotCore.Logger.warn(
1,
"Farmbot is changing ownership to #{email} - #{server}"
)
:ok = replace_credentials(email, secret, server)
_ = clean_assets()
_ = clean_farmwares()
FarmbotCore.Logger.warn(1, "Going down for reboot")
Supervisor.start_child(
:elixir_sup,
{Task, &FarmbotOS.System.soft_restart/0}
)
:ok
{:error, _} ->
FarmbotCore.Logger.error(1, "Invalid credentials for change ownership")
{:error, "Invalid credentials for change ownership"}
end
end
defp clean_assets do
EctoMigrator.drop(Asset.Repo)
:ok
end
defp clean_farmwares do
:ok
end
defp replace_credentials(email, secret, server) do
FarmbotCore.Logger.debug(3, "Replacing credentials")
update_config_value(:string, "authorization", "password", nil)
update_config_value(:string, "authorization", "token", nil)
update_config_value(:string, "authorization", "email", email)
update_config_value(:string, "authorization", "server", server)
update_config_value(:string, "authorization", "secret", secret)
:ok
end
end