Make manifest.config validation less strict

pull/974/head
connor rigby 2019-07-25 07:52:37 -07:00 committed by Connor Rigby
parent 99cb4c3fa8
commit 242b96a792
No known key found for this signature in database
GPG Key ID: 29A88B24B70456E0
1 changed files with 1 additions and 45 deletions

View File

@ -7,31 +7,6 @@ defmodule FarmbotCore.Asset.FarmwareInstallation.Manifest do
alias FarmbotCore.Project
defmodule Config do
use Ecto.Schema
@primary_key false
embedded_schema do
field(:label, :string)
field(:value, :string)
field(:order, :integer)
end
def view(config) do
%{
label: config.label,
value: config.value,
order: config.order
}
end
def changeset(config, params) do
config
|> cast(params, [:label, :value, :order])
|> validate_required([:label, :value, :order])
end
end
embedded_schema do
field(:package, :string)
field(:language, :string)
@ -58,7 +33,7 @@ defmodule FarmbotCore.Asset.FarmwareInstallation.Manifest do
zip: manifest.zip,
executable: manifest.executable,
args: manifest.args,
config: Map.new(manifest.config, fn({key, config_data}) -> {key, Config.view(config_data)} end),
config: manifest.config,
package_version: manifest.package_version,
farmware_tools_version_requirement: manifest.farmware_tools_version_requirement,
farmware_manifest_version: manifest.farmware_manifest_version,
@ -97,7 +72,6 @@ defmodule FarmbotCore.Asset.FarmwareInstallation.Manifest do
|> validate_farmware_manifest_version()
|> validate_farmware_tools_version_requirement()
|> validate_package_version()
|> validate_config()
|> validate_url()
|> validate_zip()
end
@ -165,24 +139,6 @@ defmodule FarmbotCore.Asset.FarmwareInstallation.Manifest do
end
end
defp validate_config(%{valid?: false} = change), do: change
defp validate_config(changeset) do
config = get_field(changeset, :config)
Enum.reduce(config, changeset, fn
{name, %{} = params}, changeset when is_binary(name) ->
case Config.changeset(%Config{}, params) do
%{valid?: true} = config_changeset ->
validated_config_data = Ecto.Changeset.apply_changes(config_changeset)
new_config = Map.put(config, name, validated_config_data)
put_change(changeset, :config, new_config)
%{valid?: false} = config_changeset ->
add_error(changeset, :config, "invalid config item", config_changeset.errors)
end
{_, _}, changeset ->
add_error(changeset, :config, "invalid config item (bad key or value type)")
end)
end
defp validate_url(%{valid?: false} = change), do: change
defp validate_url(changeset) do
# `url` is optional