X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Finstances%2Finstance.ex;h=6ddfa5042ae386fa642d47fdf67a99c2d8bfe466;hb=a079ec3a3cdfd42d2cbd51c7698c2c87828e5778;hp=fcf3181bf530550cb18120a6b873b0772f6b67db;hpb=b7e8ce235073ab45db24dfc6c27bc6998b43a200;p=akkoma diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index fcf3181bf..6ddfa5042 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -26,6 +26,7 @@ defmodule Pleroma.Instances.Instance do field(:favicon, :string) field(:metadata_updated_at, :naive_datetime) field(:nodeinfo, :map, default: %{}) + field(:has_request_signatures, :boolean) timestamps() end @@ -34,7 +35,14 @@ defmodule Pleroma.Instances.Instance do 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 @@ -159,7 +167,7 @@ defmodule Pleroma.Instances.Instance do end def update_metadata(%URI{host: host} = uri) do - Logger.info("Checking metadata for #{host}") + Logger.debug("Checking metadata for #{host}") existing_record = Repo.get_by(Instance, %{host: host}) if reachable?(host) do @@ -176,17 +184,14 @@ defmodule Pleroma.Instances.Instance do favicon = scrape_favicon(uri) nodeinfo = scrape_nodeinfo(uri) - {:ok, instance} = - existing_record - |> changeset(%{ - host: host, - favicon: favicon, - nodeinfo: nodeinfo, - metadata_updated_at: NaiveDateTime.utc_now() - }) - |> Repo.update() - - @cachex.put(:instances_cache, "instances:#{host}", instance) + existing_record + |> changeset(%{ + host: host, + favicon: favicon, + nodeinfo: nodeinfo, + metadata_updated_at: NaiveDateTime.utc_now() + }) + |> Repo.update() else {:discard, "Does not require update"} end @@ -196,17 +201,14 @@ defmodule Pleroma.Instances.Instance do Logger.info("Creating metadata for #{host}") - {:ok, instance} = - %Instance{} - |> changeset(%{ - host: host, - favicon: favicon, - nodeinfo: nodeinfo, - metadata_updated_at: NaiveDateTime.utc_now() - }) - |> Repo.insert() - - @cachex.put(:instances_cache, "instances:#{host}", instance) + %Instance{} + |> changeset(%{ + host: host, + favicon: favicon, + nodeinfo: nodeinfo, + metadata_updated_at: NaiveDateTime.utc_now() + }) + |> Repo.insert() end end @@ -322,4 +324,24 @@ defmodule Pleroma.Instances.Instance do 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