57 lines
1.6 KiB
Elixir
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
|