Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/diaspora/diaspora.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Neff <benjamin@coding4coffee.ch>2022-07-23 04:55:00 +0300
committerBenjamin Neff <benjamin@coding4coffee.ch>2022-07-23 17:59:37 +0300
commit49ba740b45c57e4ec745736c84226dc55b18d10b (patch)
tree23613ce55d04dbdf7ff23c1006fd0335893f79e8
parente984fa7d91a287bc0882cc3db2f451158035243b (diff)
Add NodeInfo 2.1
-rw-r--r--app/presenters/node_info_presenter.rb2
-rw-r--r--lib/node_info.rb31
-rw-r--r--spec/controllers/node_info_controller_spec.rb5
-rw-r--r--spec/presenters/node_info_presenter_spec.rb31
-rw-r--r--vendor/nodeinfo/schemas/2.0.json2
-rw-r--r--vendor/nodeinfo/schemas/2.1.json188
6 files changed, 251 insertions, 8 deletions
diff --git a/app/presenters/node_info_presenter.rb b/app/presenters/node_info_presenter.rb
index 8eeda65d3..f0c231e27 100644
--- a/app/presenters/node_info_presenter.rb
+++ b/app/presenters/node_info_presenter.rb
@@ -30,6 +30,8 @@ class NodeInfoPresenter
def add_static_data(doc)
doc.software.name = "diaspora"
+ doc.software.repository = "https://github.com/diaspora/diaspora"
+ doc.software.homepage = "https://diasporafoundation.org/"
doc.protocols.protocols << "diaspora"
end
diff --git a/lib/node_info.rb b/lib/node_info.rb
index f2118af26..6237daeca 100644
--- a/lib/node_info.rb
+++ b/lib/node_info.rb
@@ -4,13 +4,13 @@ require "pathname"
require "json-schema"
module NodeInfo
- VERSIONS = %w(1.0 2.0).freeze
- SCHEMAS = {}
+ VERSIONS = %w[1.0 2.0 2.1].freeze
+ SCHEMAS = {} # rubocop:disable Style/MutableConstant
private_constant :VERSIONS, :SCHEMAS
- # rubocop:disable Metrics/BlockLength
Document = Struct.new(:version, :software, :protocols, :services, :open_registrations, :usage, :metadata) do
- Software = Struct.new(:name, :version) do
+ # rubocop:disable Lint/ConstantDefinitionInBlock
+ Software = Struct.new(:name, :version, :repository, :homepage) do
def initialize(name=nil, version=nil)
super(name, version)
end
@@ -21,6 +21,13 @@ module NodeInfo
"version" => version
}
end
+
+ def version_21_hash
+ version_10_hash.merge(
+ "repository" => repository,
+ "homepage" => homepage
+ )
+ end
end
Protocols = Struct.new(:protocols) do
@@ -80,6 +87,7 @@ module NodeInfo
}
end
end
+ # rubocop:enable Lint/ConstantDefinitionInBlock
def self.build
new.tap do |doc|
@@ -98,6 +106,8 @@ module NodeInfo
version_10_hash
when "2.0"
version_20_hash
+ when "2.1"
+ version_21_hash
end
end
@@ -144,6 +154,18 @@ module NodeInfo
)
end
+ def version_21_hash
+ deep_compact(
+ "version" => "2.1",
+ "software" => software.version_21_hash,
+ "protocols" => protocols.version_20_array,
+ "services" => services.version_10_hash,
+ "openRegistrations" => open_registrations,
+ "usage" => usage.version_10_hash,
+ "metadata" => metadata
+ )
+ end
+
def deep_compact(hash)
hash.tap do |hash|
hash.reject! {|_, value|
@@ -153,7 +175,6 @@ module NodeInfo
end
end
end
- # rubocop:enable Metrics/BlockLength
def self.schema(version)
SCHEMAS[version] ||= JSON.parse(
diff --git a/spec/controllers/node_info_controller_spec.rb b/spec/controllers/node_info_controller_spec.rb
index fcad4bc31..5c2925cbb 100644
--- a/spec/controllers/node_info_controller_spec.rb
+++ b/spec/controllers/node_info_controller_spec.rb
@@ -20,6 +20,9 @@ describe NodeInfoController do
}, {
"rel" => "http://nodeinfo.diaspora.software/ns/schema/2.0",
"href" => node_info_url("2.0")
+ }, {
+ "rel" => "http://nodeinfo.diaspora.software/ns/schema/2.1",
+ "href" => node_info_url("2.1")
}]
end
end
@@ -33,7 +36,7 @@ describe NodeInfoController do
end
end
- %w(1.0 2.0).each do |version|
+ %w[1.0 2.0 2.1].each do |version|
context "version #{version}" do
it "responds to JSON" do
get :document, params: {version: version}, format: :json
diff --git a/spec/presenters/node_info_presenter_spec.rb b/spec/presenters/node_info_presenter_spec.rb
index 8929213b0..005a042a6 100644
--- a/spec/presenters/node_info_presenter_spec.rb
+++ b/spec/presenters/node_info_presenter_spec.rb
@@ -183,5 +183,36 @@ describe NodeInfoPresenter do
)
end
end
+
+ context "version 2.1" do
+ it "provides generic pod data in json" do
+ expect(NodeInfoPresenter.new("2.1").as_json.as_json).to eq(
+ "version" => "2.1",
+ "software" => {
+ "name" => "diaspora",
+ "version" => AppConfig.version_string,
+ "repository" => "https://github.com/diaspora/diaspora",
+ "homepage" => "https://diasporafoundation.org/"
+ },
+ "protocols" => ["diaspora"],
+ "services" => {
+ "inbound" => [],
+ "outbound" => AppConfig.configured_services.map(&:to_s)
+ },
+ "openRegistrations" => AppConfig.settings.enable_registrations?,
+ "usage" => {
+ "users" => {}
+ },
+ "metadata" => {
+ "nodeName" => AppConfig.settings.pod_name,
+ "camo" => {
+ "markdown" => AppConfig.privacy.camo.proxy_markdown_images?,
+ "opengraph" => AppConfig.privacy.camo.proxy_opengraph_thumbnails?,
+ "remotePods" => AppConfig.privacy.camo.proxy_remote_pod_images?
+ }
+ }
+ )
+ end
+ end
end
end
diff --git a/vendor/nodeinfo/schemas/2.0.json b/vendor/nodeinfo/schemas/2.0.json
index ddaca625e..da56bed13 100644
--- a/vendor/nodeinfo/schemas/2.0.json
+++ b/vendor/nodeinfo/schemas/2.0.json
@@ -1,5 +1,3 @@
-
-
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "http://nodeinfo.diaspora.software/ns/schema/2.0#",
diff --git a/vendor/nodeinfo/schemas/2.1.json b/vendor/nodeinfo/schemas/2.1.json
new file mode 100644
index 000000000..561e64479
--- /dev/null
+++ b/vendor/nodeinfo/schemas/2.1.json
@@ -0,0 +1,188 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "id": "http://nodeinfo.diaspora.software/ns/schema/2.1#",
+ "description": "NodeInfo schema version 2.1.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "version",
+ "software",
+ "protocols",
+ "services",
+ "openRegistrations",
+ "usage",
+ "metadata"
+ ],
+ "properties": {
+ "version": {
+ "description": "The schema version, must be 2.1.",
+ "enum": [
+ "2.1"
+ ]
+ },
+ "software": {
+ "description": "Metadata about server software in use.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "version"
+ ],
+ "properties": {
+ "name": {
+ "description": "The canonical name of this server software.",
+ "type": "string",
+ "pattern": "^[a-z0-9-]+$"
+ },
+ "version": {
+ "description": "The version of this server software.",
+ "type": "string"
+ },
+ "repository": {
+ "description": "The url of the source code repository of this server software.",
+ "type": "string"
+ },
+ "homepage": {
+ "description": "The url of the homepage of this server software.",
+ "type": "string"
+ }
+ }
+ },
+ "protocols": {
+ "description": "The protocols supported on this server.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "enum": [
+ "activitypub",
+ "buddycloud",
+ "dfrn",
+ "diaspora",
+ "libertree",
+ "ostatus",
+ "pumpio",
+ "tent",
+ "xmpp",
+ "zot"
+ ]
+ }
+ },
+ "services": {
+ "description": "The third party sites this server can connect to via their application API.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "inbound",
+ "outbound"
+ ],
+ "properties": {
+ "inbound": {
+ "description": "The third party sites this server can retrieve messages from for combined display with regular traffic.",
+ "type": "array",
+ "minItems": 0,
+ "items": {
+ "enum": [
+ "atom1.0",
+ "gnusocial",
+ "imap",
+ "pnut",
+ "pop3",
+ "pumpio",
+ "rss2.0",
+ "twitter"
+ ]
+ }
+ },
+ "outbound": {
+ "description": "The third party sites this server can publish messages to on the behalf of a user.",
+ "type": "array",
+ "minItems": 0,
+ "items": {
+ "enum": [
+ "atom1.0",
+ "blogger",
+ "buddycloud",
+ "diaspora",
+ "dreamwidth",
+ "drupal",
+ "facebook",
+ "friendica",
+ "gnusocial",
+ "google",
+ "insanejournal",
+ "libertree",
+ "linkedin",
+ "livejournal",
+ "mediagoblin",
+ "myspace",
+ "pinterest",
+ "pnut",
+ "posterous",
+ "pumpio",
+ "redmatrix",
+ "rss2.0",
+ "smtp",
+ "tent",
+ "tumblr",
+ "twitter",
+ "wordpress",
+ "xmpp"
+ ]
+ }
+ }
+ }
+ },
+ "openRegistrations": {
+ "description": "Whether this server allows open self-registration.",
+ "type": "boolean"
+ },
+ "usage": {
+ "description": "Usage statistics for this server.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "users"
+ ],
+ "properties": {
+ "users": {
+ "description": "statistics about the users of this server.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "total": {
+ "description": "The total amount of on this server registered users.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "activeHalfyear": {
+ "description": "The amount of users that signed in at least once in the last 180 days.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "activeMonth": {
+ "description": "The amount of users that signed in at least once in the last 30 days.",
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ },
+ "localPosts": {
+ "description": "The amount of posts that were made by users that are registered on this server.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "localComments": {
+ "description": "The amount of comments that were made by users that are registered on this server.",
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ },
+ "metadata": {
+ "description": "Free form key value pairs for software specific values. Clients should not rely on any specific key present.",
+ "type": "object",
+ "minProperties": 0,
+ "additionalProperties": true
+ }
+ }
+}