diff options
author | lambda <pleromagit@rogerbraun.net> | 2018-05-04 19:17:19 +0000 |
---|---|---|
committer | lambda <pleromagit@rogerbraun.net> | 2018-05-04 19:17:19 +0000 |
commit | 11a1241d41a166714aca22afff6f540a11d642aa (patch) | |
tree | 60fc1c28296c171ba35f2d4e85d24128eb35b3f3 /lib | |
parent | 90c4bed0af40911e0f8a28743814e4c07e91e9ae (diff) | |
parent | c3f9e24c70722366a31c20eae24fdb81790df2f8 (diff) | |
download | pleroma-11a1241d41a166714aca22afff6f540a11d642aa.tar.gz |
Merge branch 'feature/nodeinfo' into 'develop'
Implements the nodeinfo endpoints
See merge request pleroma/pleroma!140
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/nodeinfo/nodeinfo.ex | 1 | ||||
-rw-r--r-- | lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 63 | ||||
-rw-r--r-- | lib/pleroma/web/router.ex | 5 |
3 files changed, 69 insertions, 0 deletions
diff --git a/lib/pleroma/web/nodeinfo/nodeinfo.ex b/lib/pleroma/web/nodeinfo/nodeinfo.ex new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/lib/pleroma/web/nodeinfo/nodeinfo.ex @@ -0,0 +1 @@ + diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex new file mode 100644 index 000000000..36a7802ed --- /dev/null +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -0,0 +1,63 @@ +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" + } + ] + } + + 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 + stats = Stats.get_stats() + + 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.user_count || 0 + }, + localPosts: stats.status_count || 0 + }, + metadata: %{ + nodeName: Keyword.get(@instance, :name) + } + } + + 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 version not handled"}) + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index cecf5527c..c025dea33 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -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 |