* add json-schema to :test in Gemfile * Create node_info_2.0_schema.json * test match_response_schema * Create match_response_schema.rb * Update nodeinfo_controller_spec.rb * Rename spec/support/node_info_2.0_schema.json to spec/support/schema/node_info_2.0_schema.json * Update match_response_schema.rb * cleanup * additionally validate the json schema itself disable throwing errors test the schema matcher * rename nodeinfo schema to nodeinfo_2.0 * use Rails.root.join to construct the path * prettify json * sync Gemfile.lock
		
			
				
	
	
		
			170 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
| {
 | |
|   "$schema": "http://json-schema.org/draft-04/schema#",
 | |
|   "id": "http://nodeinfo.diaspora.software/ns/schema/2.0#",
 | |
|   "description": "NodeInfo schema version 2.0.",
 | |
|   "type": "object",
 | |
|   "additionalProperties": false,
 | |
|   "required": [
 | |
|     "version",
 | |
|     "software",
 | |
|     "protocols",
 | |
|     "services",
 | |
|     "openRegistrations",
 | |
|     "usage",
 | |
|     "metadata"
 | |
|   ],
 | |
|   "properties": {
 | |
|     "version": {
 | |
|       "description": "The schema version, must be 2.0.",
 | |
|       "enum": ["2.0"]
 | |
|     },
 | |
|     "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"
 | |
|         }
 | |
|       }
 | |
|     },
 | |
|     "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
 | |
|     }
 | |
|   }
 | |
| }
 |