40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Instances do
 | |
|   @moduledoc "Instances context."
 | |
| 
 | |
|   @adapter Pleroma.Instances.Instance
 | |
| 
 | |
|   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
 | |
| 
 | |
|   def set_consistently_unreachable(url_or_host),
 | |
|     do: set_unreachable(url_or_host, reachability_datetime_threshold())
 | |
| 
 | |
|   def reachability_datetime_threshold do
 | |
|     federation_reachability_timeout_days =
 | |
|       Pleroma.Config.get([:instance, :federation_reachability_timeout_days], 0)
 | |
| 
 | |
|     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
 | |
| 
 | |
|   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
 | |
| end
 | 
