Add first try at nodeinfo
authorDashie <dashie@sigpipe.me>
Wed, 2 May 2018 19:31:42 +0000 (21:31 +0200)
committerDashie <dashie@sigpipe.me>
Wed, 2 May 2018 19:31:42 +0000 (21:31 +0200)
lib/pleroma/web/nodeinfo/nodeinfo.ex [new file with mode: 0644]
lib/pleroma/web/nodeinfo/nodeinfo_controller.ex [new file with mode: 0644]
lib/pleroma/web/router.ex

diff --git a/lib/pleroma/web/nodeinfo/nodeinfo.ex b/lib/pleroma/web/nodeinfo/nodeinfo.ex
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
new file mode 100644 (file)
index 0000000..2c06875
--- /dev/null
@@ -0,0 +1,53 @@
+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)
+
+  def schemas(conn, _params) do
+    response = %{
+      links: [
+        %{
+          rel: "http://nodeinfo.diaspora.software/ns/schema/2.0",
+          href: Web.base_url() <> "/nodeinfo/2.0"
+        }
+      ]
+    }
+
+    json(conn, response)
+  end
+
+  # Schema definition: https://github.com/jhass/nodeinfo/blob/master/schemas/2.0/schema.json
+  def nodeinfo(conn, %{"version" => "2.0"}) do
+    response = %{
+      version: "2.0",
+      software: %{
+        name: "pleroma",
+        version: "#{Keyword.get(@instance, :version)})"
+      },
+      protocols: ["ostatus", "activitypub"],
+      services: %{
+        inbound: [],
+        outbound: []
+      },
+      openRegistrations: Keyword.get(@instance, :registrations_open),
+      usage: %{
+        users: %{
+          total: Stats.get_stats().user_count,
+        }
+      },
+      metadata: %{}
+    }
+
+    json(conn, response)
+  end
+
+  def nodeinfo(conn, _) do
+    conn
+    |> put_status(404)
+    |> json(%{error: "Nodeinfo schema not handled"})
+  end
+end
index cecf5527c82a1b26cac0dad0867a6d2bd8c6ee2b..c025dea338e6727cd8206e1b805e00b17a9adcde 100644 (file)
@@ -295,6 +295,11 @@ defmodule Pleroma.Web.Router do
 
       get("/host-meta", WebFinger.WebFingerController, :host_meta)
       get("/webfinger", WebFinger.WebFingerController, :webfinger)
+      get("/nodeinfo", Nodeinfo.NodeinfoController, :schemas)
+    end
+
+    scope "/nodeinfo", Pleroma.Web do
+      get("/:version", Nodeinfo.NodeinfoController, :nodeinfo)
     end
   end