2019-07-09 23:13:23 -06:00
|
|
|
# Pleroma: A lightweight social networking server
|
2021-01-12 23:49:20 -07:00
|
|
|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
|
2019-07-09 23:13:23 -06:00
|
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2019-01-23 08:37:25 -07:00
|
|
|
defmodule Pleroma.Instances do
|
|
|
|
@moduledoc "Instances context."
|
|
|
|
|
|
|
|
@adapter Pleroma.Instances.Instance
|
|
|
|
|
2019-01-28 05:25:06 -07:00
|
|
|
defdelegate filter_reachable(urls_or_hosts), to: @adapter
|
|
|
|
defdelegate reachable?(url_or_host), to: @adapter
|
|
|
|
defdelegate set_reachable(url_or_host), to: @adapter
|
|
|
|
defdelegate set_unreachable(url_or_host, unreachable_since \\ nil), to: @adapter
|
2020-10-15 16:32:20 -06:00
|
|
|
defdelegate get_consistently_unreachable(), to: @adapter
|
2019-01-28 05:25:06 -07:00
|
|
|
|
|
|
|
def set_consistently_unreachable(url_or_host),
|
|
|
|
do: set_unreachable(url_or_host, reachability_datetime_threshold())
|
2019-01-23 08:37:25 -07:00
|
|
|
|
2019-01-25 05:10:21 -07:00
|
|
|
def reachability_datetime_threshold do
|
|
|
|
federation_reachability_timeout_days =
|
2019-06-14 09:45:05 -06:00
|
|
|
Pleroma.Config.get([:instance, :federation_reachability_timeout_days], 0)
|
2019-01-25 05:10:21 -07:00
|
|
|
|
|
|
|
if federation_reachability_timeout_days > 0 do
|
|
|
|
NaiveDateTime.add(
|
|
|
|
NaiveDateTime.utc_now(),
|
|
|
|
-federation_reachability_timeout_days * 24 * 3600,
|
|
|
|
:second
|
|
|
|
)
|
|
|
|
else
|
|
|
|
~N[0000-01-01 00:00:00]
|
|
|
|
end
|
|
|
|
end
|
2019-01-24 09:15:23 -07:00
|
|
|
|
|
|
|
def host(url_or_host) when is_binary(url_or_host) do
|
|
|
|
if url_or_host =~ ~r/^http/i do
|
|
|
|
URI.parse(url_or_host).host
|
|
|
|
else
|
|
|
|
url_or_host
|
|
|
|
end
|
|
|
|
end
|
2019-01-23 08:37:25 -07:00
|
|
|
end
|