X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fnodeinfo%2Fnodeinfo_controller.ex;h=67cef004a1fde647c2e46abf0c25a8acaa509ed4;hb=b0ec4f33e661cb14730a622d64dbc721e2723825;hp=2c06875f2afdc9632528271be5660b1c705f6653;hpb=67dadd954ee0bc0c42b95a9ca0e471051a75a7b6;p=akkoma diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 2c06875f2..67cef004a 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -1,18 +1,16 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do use Pleroma.Web, :controller - alias Pleroma.Web.Nodeinfo alias Pleroma.Stats alias Pleroma.Web - - @instance Application.get_env(:pleroma, :instance) + alias Pleroma.{User, Repo} def schemas(conn, _params) do response = %{ links: [ %{ rel: "http://nodeinfo.diaspora.software/ns/schema/2.0", - href: Web.base_url() <> "/nodeinfo/2.0" + href: Web.base_url() <> "/nodeinfo/2.0.json" } ] } @@ -22,32 +20,64 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do # Schema definition: https://github.com/jhass/nodeinfo/blob/master/schemas/2.0/schema.json def nodeinfo(conn, %{"version" => "2.0"}) do + instance = Application.get_env(:pleroma, :instance) + media_proxy = Application.get_env(:pleroma, :media_proxy) + suggestions = Application.get_env(:pleroma, :suggestions) + chat = Application.get_env(:pleroma, :chat) + gopher = Application.get_env(:pleroma, :gopher) + stats = Stats.get_stats() + + staff_accounts = + User.moderator_user_query() + |> Repo.all() + |> Enum.map(fn u -> u.ap_id end) + response = %{ version: "2.0", software: %{ name: "pleroma", - version: "#{Keyword.get(@instance, :version)})" + version: Keyword.get(instance, :version) }, protocols: ["ostatus", "activitypub"], services: %{ inbound: [], outbound: [] }, - openRegistrations: Keyword.get(@instance, :registrations_open), + openRegistrations: Keyword.get(instance, :registrations_open), usage: %{ users: %{ - total: Stats.get_stats().user_count, - } + total: stats.user_count || 0 + }, + localPosts: stats.status_count || 0 }, - metadata: %{} + metadata: %{ + nodeName: Keyword.get(instance, :name), + nodeDescription: Keyword.get(instance, :description), + mediaProxy: Keyword.get(media_proxy, :enabled), + private: !Keyword.get(instance, :public, true), + suggestions: %{ + enabled: Keyword.get(suggestions, :enabled, false), + thirdPartyEngine: Keyword.get(suggestions, :third_party_engine, ""), + timeout: Keyword.get(suggestions, :timeout, 5000), + web: Keyword.get(suggestions, :web, "") + }, + staffAccounts: staff_accounts, + chat: Keyword.get(chat, :enabled), + gopher: Keyword.get(gopher, :enabled) + } } - json(conn, response) + conn + |> put_resp_header( + "content-type", + "application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.0#; charset=utf-8" + ) + |> json(response) end def nodeinfo(conn, _) do conn |> put_status(404) - |> json(%{error: "Nodeinfo schema not handled"}) + |> json(%{error: "Nodeinfo schema version not handled"}) end end