Purge gopher frontend
authorFloatingGhost <hannah@coffee-and-dreams.uk>
Mon, 27 Jun 2022 16:31:16 +0000 (17:31 +0100)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Mon, 27 Jun 2022 16:31:16 +0000 (17:31 +0100)
CHANGELOG.md
config/config.exs
docs/configuration/cheatsheet.md
lib/pleroma/application.ex
lib/pleroma/config/transfer_task.ex
lib/pleroma/gopher/server.ex [deleted file]
lib/pleroma/web/mastodon_api/views/instance_view.ex

index a3824e8b79c85b18c3dbde998912fa8fe87ed686..9513a54fa796cb4f1e066fab5a42b787f39b636d 100644 (file)
@@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
 ### Removed
 - SSH frontend, to be potentially re-enabled via a bridge rather than wired into the main system
+- Gopher frontend, as above
 
 ## 2.5.2
 
index 850a42eea9c0c61174e1c95b15ccdf98c5032f0f..ea0b233603e4cf8532734c71fc347b6bc78ad5a8 100644 (file)
@@ -97,7 +97,6 @@ config :pleroma, :uri_schemes,
     "http",
     "dat",
     "dweb",
-    "gopher",
     "hyper",
     "ipfs",
     "ipns",
@@ -474,11 +473,6 @@ config :phoenix, :json_library, Jason
 
 config :phoenix, :filter_parameters, ["password", "confirm"]
 
-config :pleroma, :gopher,
-  enabled: false,
-  ip: {0, 0, 0, 0},
-  port: 9999
-
 config :pleroma, Pleroma.Web.Metadata,
   providers: [
     Pleroma.Web.Metadata.Providers.OpenGraph,
index caa7f2edc693e447b3c1c230807e4d35da82c2b8..3b8f8cc52f6d4445b67c065a688b52263a3ea881 100644 (file)
@@ -833,15 +833,6 @@ To enable them, both the `rum_enabled` flag has to be set and the following spec
 
 This will probably take a long time.
 
-## Alternative client protocols
-
-### :gopher
-* `enabled`: Enables the gopher interface
-* `ip`: IP address to bind to
-* `port`: Port to bind to
-* `dstport`: Port advertised in urls (optional, defaults to `port`)
-
-
 ## Authentication
 
 ### :admin_token
index 952579c7f87dab951739930a05b9e1eff32ec8e5..d37454d2c7cabedfbd308aff385b47e3a2ef09b5 100644 (file)
@@ -107,8 +107,7 @@ defmodule Pleroma.Application do
         ] ++
         task_children(@mix_env) ++
         dont_run_in_test(@mix_env) ++
-        shout_child(shout_enabled?()) ++
-        [Pleroma.Gopher.Server]
+        shout_child(shout_enabled?())
 
     # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
     # for other strategies and supported options
index 5371aae7a420c96bd857e1a7fe60a242e97e08d0..99d49f995e7b6e23241c69965bf5aacd547a4b82 100644 (file)
@@ -29,8 +29,7 @@ defmodule Pleroma.Config.TransferTask do
     do: [
       {:pleroma, Pleroma.Captcha, [:seconds_valid]},
       {:pleroma, Pleroma.Upload, [:proxy_remote]},
-      {:pleroma, :instance, [:upload_limit]},
-      {:pleroma, :gopher, [:enabled]}
+      {:pleroma, :instance, [:upload_limit]}
     ]
 
   def start_link(restart_pleroma? \\ true) do
diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex
deleted file mode 100644 (file)
index 1b85c49..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-# Pleroma: A lightweight social networking server
-# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
-# SPDX-License-Identifier: AGPL-3.0-only
-
-defmodule Pleroma.Gopher.Server do
-  use GenServer
-  require Logger
-
-  def start_link(_) do
-    config = Pleroma.Config.get(:gopher, [])
-    ip = Keyword.get(config, :ip, {0, 0, 0, 0})
-    port = Keyword.get(config, :port, 1234)
-
-    if Keyword.get(config, :enabled, false) do
-      GenServer.start_link(__MODULE__, [ip, port], [])
-    else
-      Logger.info("Gopher server disabled")
-      :ignore
-    end
-  end
-
-  def init([ip, port]) do
-    Logger.info("Starting gopher server on #{port}")
-
-    :ranch.start_listener(
-      :gopher,
-      100,
-      :ranch_tcp,
-      [ip: ip, port: port],
-      __MODULE__.ProtocolHandler,
-      []
-    )
-
-    {:ok, %{ip: ip, port: port}}
-  end
-end
-
-defmodule Pleroma.Gopher.Server.ProtocolHandler do
-  alias Pleroma.Activity
-  alias Pleroma.HTML
-  alias Pleroma.Object
-  alias Pleroma.User
-  alias Pleroma.Web.ActivityPub.ActivityPub
-  alias Pleroma.Web.ActivityPub.Visibility
-
-  def start_link(ref, socket, transport, opts) do
-    pid = spawn_link(__MODULE__, :init, [ref, socket, transport, opts])
-    {:ok, pid}
-  end
-
-  def init(ref, socket, transport, [] = _Opts) do
-    :ok = :ranch.accept_ack(ref)
-    loop(socket, transport)
-  end
-
-  def info(text) do
-    text = String.replace(text, ~r/[\t\n]/, "")
-
-    String.split(text, "\r")
-    |> Enum.map(fn text ->
-      "i#{text}\tfake\t(NULL)\t0\r\n"
-    end)
-    |> Enum.join("")
-  end
-
-  def link(name, selector, type \\ 1) do
-    address = Pleroma.Web.Endpoint.host()
-    port = Pleroma.Config.get([:gopher, :port], 1234)
-    dstport = Pleroma.Config.get([:gopher, :dstport], port)
-    "#{type}#{name}\t#{selector}\t#{address}\t#{dstport}\r\n"
-  end
-
-  def render_activities(activities) do
-    activities
-    |> Enum.reverse()
-    |> Enum.map(fn activity ->
-      user = User.get_cached_by_ap_id(activity.data["actor"])
-
-      object = Object.normalize(activity, fetch: false)
-      like_count = object.data["like_count"] || 0
-      announcement_count = object.data["announcement_count"] || 0
-
-      link("Post ##{activity.id} by #{user.nickname}", "/notices/#{activity.id}") <>
-        info("#{like_count} likes, #{announcement_count} repeats") <>
-        "i\tfake\t(NULL)\t0\r\n" <>
-        info(HTML.strip_tags(String.replace(object.data["content"], "<br>", "\r")))
-    end)
-    |> Enum.join("i\tfake\t(NULL)\t0\r\n")
-  end
-
-  def response("") do
-    info("Welcome to #{Pleroma.Config.get([:instance, :name], "Pleroma")}!") <>
-      link("Public Timeline", "/main/public") <>
-      link("Federated Timeline", "/main/all") <> ".\r\n"
-  end
-
-  def response("/main/public") do
-    posts =
-      %{type: ["Create"], local_only: true}
-      |> ActivityPub.fetch_public_activities()
-      |> render_activities()
-
-    info("Welcome to the Public Timeline!") <> posts <> ".\r\n"
-  end
-
-  def response("/main/all") do
-    posts =
-      %{type: ["Create"]}
-      |> ActivityPub.fetch_public_activities()
-      |> render_activities()
-
-    info("Welcome to the Federated Timeline!") <> posts <> ".\r\n"
-  end
-
-  def response("/notices/" <> id) do
-    with %Activity{} = activity <- Activity.get_by_id(id),
-         true <- Visibility.is_public?(activity) do
-      activities =
-        ActivityPub.fetch_activities_for_context(activity.data["context"])
-        |> render_activities
-
-      user = User.get_cached_by_ap_id(activity.data["actor"])
-
-      info("Post #{activity.id} by #{user.nickname}") <>
-        link("More posts by #{user.nickname}", "/users/#{user.nickname}") <> activities <> ".\r\n"
-    else
-      _e ->
-        info("Not public") <> ".\r\n"
-    end
-  end
-
-  def response("/users/" <> nickname) do
-    with %User{} = user <- User.get_cached_by_nickname(nickname) do
-      params = %{
-        type: ["Create"],
-        actor_id: user.ap_id
-      }
-
-      activities =
-        params
-        |> ActivityPub.fetch_public_activities()
-        |> render_activities()
-
-      info("Posts by #{user.nickname}") <> activities <> ".\r\n"
-    else
-      _e ->
-        info("No such user") <> ".\r\n"
-    end
-  end
-
-  def loop(socket, transport) do
-    case transport.recv(socket, 0, 5000) do
-      {:ok, data} ->
-        data = String.trim_trailing(data, "\r\n")
-        transport.send(socket, response(data))
-        :ok = transport.close(socket)
-
-      _ ->
-        :ok = transport.close(socket)
-    end
-  end
-end
index 019296291e0e5b9749beacebb39dec5e318e4a34..c36271654274d2f44da00d667c10135735176a62 100644 (file)
@@ -68,9 +68,6 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do
       if Config.get([:media_proxy, :enabled]) do
         "media_proxy"
       end,
-      if Config.get([:gopher, :enabled]) do
-        "gopher"
-      end,
       # backwards compat
       if Config.get([:shout, :enabled]) do
         "chat"