1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.FedSockets.SocketInfo do
12 alias Pleroma.Web.FedSockets.SocketInfo
13 @default_connection_duration 15 * 60 * 1000
15 def build(uri, conn_pid \\ nil) do
18 |> build_pids(conn_pid)
22 def touch(%SocketInfo{} = socket_info),
23 do: %{socket_info | connected_until: new_ttl()}
25 def connect(%SocketInfo{} = socket_info),
26 do: %{socket_info | state: :connected}
28 def expired?(%{connected_until: connected_until}),
29 do: connected_until < :erlang.monotonic_time(:millisecond)
32 do: build_origin(uri).origin
34 defp build_pids(socket_info, conn_pid),
35 do: struct(socket_info, pid: self(), conn_pid: conn_pid)
37 defp build_origin(uri) when is_binary(uri),
38 do: uri |> URI.parse() |> build_origin
40 defp build_origin(%{host: host, port: nil, scheme: scheme}),
41 do: build_origin(%{host: host, port: URI.default_port(scheme)})
43 defp build_origin(%{host: host, port: port}),
44 do: %SocketInfo{origin: "#{host}:#{port}"}
48 Pleroma.Config.get([:fed_sockets, :connection_duration], @default_connection_duration)
50 :erlang.monotonic_time(:millisecond) + connection_duration