Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma into develop
authorsadposter <hannah+pleroma@coffee-and-dreams.uk>
Mon, 13 Sep 2021 15:14:58 +0000 (16:14 +0100)
committersadposter <hannah+pleroma@coffee-and-dreams.uk>
Mon, 13 Sep 2021 15:14:58 +0000 (16:14 +0100)
1  2 
config/config.exs
lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
priv/static/static/stickers.json

diff --combined config/config.exs
index 4c1eb69d58bc0d80e705921864bdc3776e6408a8,66d394655657869f8f8346fdb4a070eb506e5d6a..005388c42ea6aa0d6cbb66d48134da73fa218fd1
@@@ -221,7 -221,6 +221,7 @@@ config :pleroma, :instance
      "text/markdown",
      "text/bbcode"
    ],
 +  staff_transparency: [],
    autofollowed_nicknames: [],
    autofollowing_nicknames: [],
    max_pinned_statuses: 1,
@@@ -322,9 -321,6 +322,6 @@@ config :pleroma, :frontend_configuratio
      subjectLineBehavior: "email",
      theme: "pleroma-dark",
      webPushNotifications: false
-   },
-   masto_fe: %{
-     showInstanceSpecificPanel: true
    }
  
  config :pleroma, :assets,
index df3ccc23ba56ee4f4f46bf8dcffca979b7fb1336,69ec27ba05f1979ebeab7b040aab23bde9b82a29..5cee26afe5d86f3de4f82d86a8b938c6f95310cd
@@@ -5,14 -5,8 +5,12 @@@
  defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
    use Pleroma.Web, :controller
  
-   alias Pleroma.Web
 +  alias Pleroma.Config
 +  alias Pleroma.Stats
 +  alias Pleroma.User
 +  alias Pleroma.Web.Federator.Publisher
 +  alias Pleroma.Web.MastodonAPI.InstanceView
    alias Pleroma.Web.Endpoint
--  alias Pleroma.Web.Nodeinfo.Nodeinfo
  
    def schemas(conn, _params) do
      response = %{
      json(conn, response)
    end
  
 +  # returns a nodeinfo 2.0 map, since 2.1 just adds a repository field
 +  # under software.
 +  def raw_nodeinfo do
 +    stats = Stats.get_stats()
 +
 +    staff_accounts =
 +      User.all_superusers()
 +      |> Enum.map(fn u -> u.ap_id end)
 +      |> Enum.filter(fn u -> not Enum.member?(Config.get([:instance, :staff_transparency]), u) end)
 +
 +    features = InstanceView.features()
 +    federation = InstanceView.federation()
 +
 +    %{
 +      version: "2.0",
 +      software: %{
 +        name: Pleroma.Application.name() |> String.downcase(),
 +        version: Pleroma.Application.version()
 +      },
 +      protocols: Publisher.gather_nodeinfo_protocol_names(),
 +      services: %{
 +        inbound: [],
 +        outbound: []
 +      },
 +      openRegistrations: Config.get([:instance, :registrations_open]),
 +      usage: %{
 +        users: %{
 +          total: Map.get(stats, :user_count, 0)
 +        },
 +        localPosts: Map.get(stats, :status_count, 0)
 +      },
 +      metadata: %{
 +        nodeName: Config.get([:instance, :name]),
 +        nodeDescription: Config.get([:instance, :description]),
 +        private: !Config.get([:instance, :public], true),
 +        suggestions: %{
 +          enabled: false
 +        },
 +        staffAccounts: staff_accounts,
 +        federation: federation,
 +        pollLimits: Config.get([:instance, :poll_limits]),
 +        postFormats: Config.get([:instance, :allowed_post_formats]),
 +        uploadLimits: %{
 +          general: Config.get([:instance, :upload_limit]),
 +          avatar: Config.get([:instance, :avatar_upload_limit]),
 +          banner: Config.get([:instance, :banner_upload_limit]),
 +          background: Config.get([:instance, :background_upload_limit])
 +        },
 +        fieldsLimits: %{
 +          maxFields: Config.get([:instance, :max_account_fields]),
 +          maxRemoteFields: Config.get([:instance, :max_remote_account_fields]),
 +          nameLength: Config.get([:instance, :account_field_name_length]),
 +          valueLength: Config.get([:instance, :account_field_value_length])
 +        },
 +        accountActivationRequired: Config.get([:instance, :account_activation_required], false),
 +        invitesEnabled: Config.get([:instance, :invites_enabled], false),
 +        mailerEnabled: Config.get([Pleroma.Emails.Mailer, :enabled], false),
 +        features: features,
 +        restrictedNicknames: Config.get([Pleroma.User, :restricted_nicknames]),
 +        skipThreadContainment: Config.get([:instance, :skip_thread_containment], false)
 +      }
 +    }
 +  end
 +
    # Schema definition: https://github.com/jhass/nodeinfo/blob/master/schemas/2.0/schema.json
    # and https://github.com/jhass/nodeinfo/blob/master/schemas/2.1/schema.json
 -  def nodeinfo(conn, %{"version" => version}) do
 -    case Nodeinfo.get_nodeinfo(version) do
 -      {:error, :missing} ->
 -        render_error(conn, :not_found, "Nodeinfo schema version not handled")
 -
 -      node_info ->
 -        conn
 -        |> put_resp_header(
 -          "content-type",
 -          "application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.0#; charset=utf-8"
 -        )
 -        |> json(node_info)
 -    end
 +  def nodeinfo(conn, %{"version" => "2.0"}) do
 +    conn
 +    |> put_resp_header(
 +      "content-type",
 +      "application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.0#; charset=utf-8"
 +    )
 +    |> json(raw_nodeinfo())
 +  end
 +
 +  def nodeinfo(conn, %{"version" => "2.1"}) do
 +    raw_response = raw_nodeinfo()
 +
 +    updated_software =
 +      raw_response
 +      |> Map.get(:software)
 +      |> Map.put(:repository, Pleroma.Application.repository())
 +
 +    response =
 +      raw_response
 +      |> Map.put(:software, updated_software)
 +      |> Map.put(:version, "2.1")
 +
 +    conn
 +    |> put_resp_header(
 +      "content-type",
 +      "application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.1#; charset=utf-8"
 +    )
 +    |> json(response)
 +  end
 +
 +  def nodeinfo(conn, _) do
 +    render_error(conn, :not_found, "Nodeinfo schema version not handled")
    end
  end
index 978d7b0b57f73e15b9c6e6fbfd2e9ecce49ec84a,0000000000000000000000000000000000000000..a8f4a23c1f34aef4dd40f7e9a62dbd15921ad749
mode 100644,000000..100644
--- /dev/null
@@@ -1,1 -1,0 +1,1 @@@
- {"menhera": "/static/stickers/menhera/", "yotsuba": "/static/stickers/yotsuba/", "yuruyuri": "/static/stickers/yuruyuri/", "bocchi": "/static/stickers/bocchi/", "yurukawa": "/static/stickers/yurukawa/", "gabdrop": "/static/stickers/gabdrop/", "evangelion": "/static/stickers/evangelion/", "shakaijin_kanojo": "/static/stickers/shakaijin_kanojo/", "pko": "/static/stickers/pko/", "ihba": "/static/stickers/ihba/", "azurlane": "/static/stickers/azurlane/", "omesis": "/static/stickers/omesis/"}
++{"menhera": "/static/stickers/menhera/", "yotsuba": "/static/stickers/yotsuba/", "yuruyuri": "/static/stickers/yuruyuri/", "bocchi": "/static/stickers/bocchi/", "yurukawa": "/static/stickers/yurukawa/", "gabdrop": "/static/stickers/gabdrop/", "evangelion": "/static/stickers/evangelion/", "shakaijin_kanojo": "/static/stickers/shakaijin_kanojo/", "pko": "/static/stickers/pko/", "ihba": "/static/stickers/ihba/", "azurlane": "/static/stickers/azurlane/", "omesis": "/static/stickers/omesis/", "molcar": "/static/stickers/molcar/"}