From 5263940e8723ec0229e68ea5dd56d82cf9daba0a Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 4 Dec 2023 22:44:17 +0100 Subject: [PATCH 1/2] start schema v2.2 development copy "2.1" to "2.2" --- schemas/2.2/example.json | 27 ++++++ schemas/2.2/schema.json | 188 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 215 insertions(+) create mode 100644 schemas/2.2/example.json create mode 100644 schemas/2.2/schema.json diff --git a/schemas/2.2/example.json b/schemas/2.2/example.json new file mode 100644 index 0000000..b0bfa07 --- /dev/null +++ b/schemas/2.2/example.json @@ -0,0 +1,27 @@ +{ + "version": "2.1", + "software": { + "name": "diaspora", + "version": "0.5.0", + "repository": "https://github.com/diaspora/diaspora", + "homepage": "https://diasporafoundation.org/" + }, + "protocols": ["diaspora"], + "services": { + "inbound": ["gnusocial"], + "outbound": ["facebook", "twitter"] + }, + "openRegistrations": true, + "usage": { + "users": { + "total": 123, + "activeHalfyear": 42, + "activeMonth": 23 + }, + "localPosts": 500, + "localComments": 1000 + }, + "metadata": { + "chat_enabled": true + } +} diff --git a/schemas/2.2/schema.json b/schemas/2.2/schema.json new file mode 100644 index 0000000..561e644 --- /dev/null +++ b/schemas/2.2/schema.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 + } + } +} From 89e1e83fc1f0523b48313b9907d0bc38845fc5ca Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 6 Dec 2023 12:27:20 +0100 Subject: [PATCH 2/2] init 2.2 schema by adjust current version and add test for it --- schemas/2.2/example.json | 2 +- schemas/2.2/schema.json | 9 +++++---- tests/spec/nodeinfo_22_spec.rb | 11 +++++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 tests/spec/nodeinfo_22_spec.rb diff --git a/schemas/2.2/example.json b/schemas/2.2/example.json index b0bfa07..b83a70e 100644 --- a/schemas/2.2/example.json +++ b/schemas/2.2/example.json @@ -1,5 +1,5 @@ { - "version": "2.1", + "version": "2.2", "software": { "name": "diaspora", "version": "0.5.0", diff --git a/schemas/2.2/schema.json b/schemas/2.2/schema.json index 561e644..8908712 100644 --- a/schemas/2.2/schema.json +++ b/schemas/2.2/schema.json @@ -1,7 +1,8 @@ { + "title": "NodeInfo schema version 2.2", "$schema": "http://json-schema.org/draft-04/schema#", - "id": "http://nodeinfo.diaspora.software/ns/schema/2.1#", - "description": "NodeInfo schema version 2.1.", + "id": "http://nodeinfo.diaspora.software/ns/schema/2.2#", + "description": "NodeInfo is an effort to create a standardized way of exposing metadata about a server running one of the distributed social networks.", "type": "object", "additionalProperties": false, "required": [ @@ -15,9 +16,9 @@ ], "properties": { "version": { - "description": "The schema version, must be 2.1.", + "description": "The schema version, must be 2.2.", "enum": [ - "2.1" + "2.2" ] }, "software": { diff --git a/tests/spec/nodeinfo_22_spec.rb b/tests/spec/nodeinfo_22_spec.rb new file mode 100644 index 0000000..e00b7a6 --- /dev/null +++ b/tests/spec/nodeinfo_22_spec.rb @@ -0,0 +1,11 @@ +require "spec_helper" + +RSpec.describe "NodeInfo schema 2.2" do + it "is a valid draft7 json schema" do + expect(schema_for("2.2")).to match_json_schema :json_schema_draft4 + end + + it "validates the example" do + expect(example_for("2.2")).to match_json_schema :nodeinfo_22 + end +end