field(:favicon, :string)
field(:metadata_updated_at, :naive_datetime)
field(:nodeinfo, :map, default: %{})
+ field(:has_request_signatures, :boolean)
timestamps()
end
def changeset(struct, params \\ %{}) do
struct
- |> cast(params, [:host, :unreachable_since, :favicon, :nodeinfo, :metadata_updated_at])
+ |> cast(params, [
+ :host,
+ :unreachable_since,
+ :favicon,
+ :nodeinfo,
+ :metadata_updated_at,
+ :has_request_signatures
+ ])
|> validate_required([:host])
|> unique_constraint(:host)
end
%Instance{
host: Pleroma.Web.Endpoint.host(),
favicon: Pleroma.Web.Endpoint.url() <> "/favicon.png",
- nodeinfo: Pleroma.Web.Nodeinfo.NodeinfoController.raw_nodeinfo()
+ nodeinfo: Pleroma.Web.Nodeinfo.Nodeinfo.get_nodeinfo("2.1")
}
end
Logger.info("Creating metadata for #{host}")
- {:ok, instance} =
- %Instance{}
- |> changeset(%{
- host: host,
- favicon: favicon,
- nodeinfo: nodeinfo,
- metadata_updated_at: NaiveDateTime.utc_now()
- })
- |> Repo.insert()
+ %Instance{}
+ |> changeset(%{
+ host: host,
+ favicon: favicon,
+ nodeinfo: nodeinfo,
+ metadata_updated_at: NaiveDateTime.utc_now()
+ })
+ |> Repo.insert()
end
end
end)
end
end
+
+ def set_request_signatures(url_or_host) when is_binary(url_or_host) do
+ host = host(url_or_host)
+ existing_record = Repo.get_by(Instance, %{host: host})
+ changes = %{has_request_signatures: true}
+
+ cond do
+ is_nil(existing_record) ->
+ %Instance{}
+ |> changeset(Map.put(changes, :host, host))
+ |> Repo.insert()
+
+ true ->
+ existing_record
+ |> changeset(changes)
+ |> Repo.update()
+ end
+ end
+
+ def set_request_signatures(_), do: {:error, :invalid_input}
end