From ae9aacd89d0aac56b519322866a826b90ee35da4 Mon Sep 17 00:00:00 2001 From: Mark Haines Date: Tue, 13 Jan 2015 19:03:11 +0000 Subject: [PATCH] Add a JSON schema for matrix federation events --- drafts/event_schema.yaml | 120 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 drafts/event_schema.yaml diff --git a/drafts/event_schema.yaml b/drafts/event_schema.yaml new file mode 100644 index 00000000..00b0d175 --- /dev/null +++ b/drafts/event_schema.yaml @@ -0,0 +1,120 @@ +# JSON Schema for Matrix events. http://json-schema.org/ +title: "Matrix Event" +type: object +properties: + auth_events: + description: The events needed to authenticate this event + $ref: "#/definitions/event_reference_list" + content: + type: object + description: The body of the event. + depth: + type: integer + description: A number one greater than that of any preceeding event. + minimum: 0 + event_id: + $ref: "#/definitions/event_id" + hashes: + $ref: "#/definitions/hashes" + origin: + $ref: "#/definitions/server_id" + origin_server_ts: + type: integer + description: Posix timestamp on the originating server + minimum: 0 + prev_events: + description: The event(s) this event came after. + $ref: "#/definitions/event_reference_list" + prev_state: + description: The state event(s) this event replaces. + $ref: "#/definitions/event_reference_list" + room_id: + $ref: "#/definitions/room_id" + sender: + oneOf: + - $ref: "#/definitions/user_id" + - $ref: "#/definitions/server_id" + state_key: + type: string + type: + type: string + unsigned: + type: object +required: +- auth_events +- content +- depth +- event_id +- hashes +- origin +- origin_server_ts +- prev_events +- room_id +- sender +- type +dependencies: + state_key: + - prev_state + prev_state: + - state_key + + +definitions: + server_id: + type: string + description: Identifies a server. + pattern: "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*\ + ([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\ + (:[0-9]*[0-9])?$" + event_id: + type: string + description: Identifies an event. + pattern: "^\\$[^:]+:\ + (([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*\ + ([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\ + (:[0-9]*[0-9])?$" + room_id: + type: string + description: Identifies a room. + pattern: "^\\![^:]+:\ + (([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*\ + ([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\ + (:[0-9]*[0-9])?$" + user_id: + type: string + description: Identifies a user. + pattern: "^\\@[^:]+:\ + (([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*\ + ([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\ + (:[0-9]*[0-9])?$" + base64: + type: string + description: Base64 string without padding. + pattern: "^[a-zA-Z0-9/+]*$" + hashes: + type: object + description: Hashes + minProperties: 1 + additionalProperties: + $ref: "#/definitions/base64" + signatures: + type: object + description: Signatures + additionalProperties: + type: object + minProperties: 1 + additionalProperties: + $ref: "#/definitions/base64" + event_reference: + type: array + items: + - type: string + description: Event id of the referenced event. + $ref: "#/definitions/event_id" + - type: object + description: Reference hashes of the reference event. + $ref: "#/definitions/hashes" + event_reference_list: + type: array + items: + $ref: "#/definitions/event_reference"