diaspora/diaspora_federation

View on GitHub
docs/schemas/federation_entities.json

Summary

Maintainability
Test Coverage
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://diaspora.github.io/diaspora_federation/schemas/federation_entities.json",
  "oneOf": [
    {"$ref": "#/definitions/comment"},
    {"$ref": "#/definitions/like"},
    {"$ref": "#/definitions/participation"},
    {"$ref": "#/definitions/poll_participation"},
    {"$ref": "#/definitions/status_message"},
    {"$ref": "#/definitions/reshare"},
    {"$ref": "#/definitions/profile"},
    {"$ref": "#/definitions/location"},
    {"$ref": "#/definitions/embed"},
    {"$ref": "#/definitions/photo"},
    {"$ref": "#/definitions/poll"},
    {"$ref": "#/definitions/poll_answer"}
  ],

  "definitions": {
    "signature": {
      "oneOf" : [
        {
          "type": "string",
          "minLength": 30
        },
        {
          "type": "string",
          "maxLength": 0,
          "description": "Allow empty string when no signature is provided"
        }
      ]
    },

    "guid": {
      "type": "string",
      "minLength": 16,
      "maxLength": 255
    },

    "relayable": {
      "type": "object",
      "description": "please don't use this object unless you're defining a new child relayable schema",
      "properties": {
        "entity_data": {
          "type": "object",
          "properties": {
            "author": { "type": "string" },
            "guid": { "$ref": "#/definitions/guid" },
            "parent_guid": { "$ref": "#/definitions/guid" },
            "author_signature": { "$ref": "#/definitions/signature" }
          },
          "required": [
            "author", "guid", "parent_guid"
          ]
        },
        "property_order": {
          "type": "array",
          "items": { "type": "string" }
        }
      },
      "required": [
        "entity_data", "entity_type", "property_order"
      ]
    },

    "comment": {
      "allOf": [
        {"$ref": "#/definitions/relayable"},
        {
          "type": "object",
          "properties": {
            "entity_data": {
              "type": "object",
              "properties": {
                "text": { "type": "string" },
                "created_at": { "type": "string" }
              },
              "required": ["text"]
            },
            "entity_type": {
              "type": "string",
              "pattern": "^comment$"
            }
          }
        }
      ]
    },

    "like": {
      "allOf": [
        {"$ref": "#/definitions/relayable"},
        {
          "type": "object",
          "properties": {
            "entity_type": {
              "type": "string",
              "pattern": "^like$"
            },
            "entity_data": {
              "type": "object",
              "properties": {
                "positive": { "type": "boolean" },
                "parent_type": { "enum": ["Post", "Comment"] }
              },
              "required": ["positive", "parent_type"]
            }
          }
        }
      ]
    },

    "participation": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "pattern": "^participation$"
        },
        "entity_data": {
          "type": "object",
          "properties": {
            "author": { "type": "string" },
            "guid": { "$ref": "#/definitions/guid" },
            "parent_guid": { "$ref": "#/definitions/guid" },
            "parent_type": {"enum": ["Post"]}
          }
        }
      }
    },

    "poll_participation": {
      "allOf": [
        {"$ref": "#/definitions/relayable"},
        {
          "type": "object",
          "properties": {
            "entity_type": {
              "type": "string",
              "pattern": "^poll_participation$"
            },
            "entity_data": {
              "type": "object",
              "properties": {
                "poll_answer_guid": { "$ref": "#/definitions/guid" }
              },
              "required": ["poll_answer_guid"]
            }
          }
        }
      ]
    },

    "post": {
      "type": "object",
      "description": "please don't use this object unless you're defining a new child post schema",
      "properties": {
        "entity_data": {
          "type": "object",
          "properties": {
            "guid": { "$ref": "#/definitions/guid" },
            "public": { "type": "boolean" },
            "created_at": { "type": "string" },
            "provider_display_name" : { "type": "string" }
          },
          "required": [
            "guid", "public", "created_at"
          ]
        }
      },
      "required": [
        "entity_type", "entity_data"
      ]
    },

    "status_message": {
      "allOf": [
        {"$ref": "#/definitions/post"},
        {
          "type": "object",
          "properties": {
            "entity_type": {
              "type": "string",
              "pattern": "^status_message$"
            },

            "entity_data": {
              "type": "object",
              "properties": {
                "text": { "type": "string" },

                "location": {
                  "oneOf": [
                    { "$ref": "#/definitions/location" },
                    { "type": "null" }
                  ]
                },

                "poll": {
                  "oneOf": [
                    { "$ref": "#/definitions/poll" },
                    { "type": "null" }
                  ]
                },

                "photos": {
                  "type": ["array", "null"],
                  "items": { "$ref": "#/definitions/photo" }
                }
              },

              "required": ["text"]
            }
          }
        }
      ]
    },

    "reshare": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "pattern": "^reshare$"
        },

        "entity_data": {
          "type": "object",
          "properties": {
            "author": { "type": "string" },
            "guid": { "$ref": "#/definitions/guid" },
            "created_at": { "type": "string" },
            "root_author": {"type": "string"},
            "root_guid": {"$ref": "#/definitions/guid"}
          },
          "required": ["author", "guid", "created_at"]
        }
      },
      "required": ["entity_type", "entity_data"]
    },

    "profile": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "pattern": "^profile$"
        },
        "entity_data": {
          "type": "object",
          "properties": {
            "full_name": { "type": ["string", "null"] },
            "first_name": { "type": ["string", "null"] },
            "last_name": { "type": ["string", "null"] },
            "gender": { "type": ["string", "null"] },
            "bio": { "type": ["string", "null"] },
            "birthday": { "type": ["string", "null"] },
            "location": { "type": ["string", "null"] },
            "image_url": { "type": ["string", "null"] },
            "author": { "type": "string" }
          },
          "required": [
            "author"
          ]
        }
      },
      "required" :["entity_data", "entity_type"]
    },

    "photo": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "pattern": "^photo$"
        },
        "entity_data": {
          "type": "object",
          "properties": {
            "author": { "type": "string" },
            "guid": {"$ref": "#/definitions/guid"},
            "public": {"type": "boolean"},
            "created_at": {"type": "string"},
            "remote_photo_path": {"type": "string"},
            "remote_photo_name": {"type": "string"},
            "text": {"type": ["null", "string"]},
            "status_message_guid": {"$ref": "#/definitions/guid"},
            "width": {"type": "number"},
            "height": {"type": "number"}
          },
          "required": [
            "author", "guid", "public", "created_at", "remote_photo_path", "remote_photo_name"
          ]
        }
      }
    },

    "poll_answer": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "pattern": "^poll_answer$"
        },
        "entity_data": {
          "type": "object",
          "properties": {
            "guid": { "$ref": "#/definitions/guid" },
            "answer": { "type": "string" }
          },
          "required": [
            "answer",
            "guid"
          ]
        }
      }
    },

    "poll": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "pattern": "^poll$"
        },
        "entity_data": {
          "type": "object",
          "properties": {
            "guid": {
              "$ref": "#/definitions/guid"
            },
            "question": {
              "type": "string"
            },
            "poll_answers": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/poll_answer"
              }
            }
          },
          "required": [
            "guid",
            "question",
            "poll_answers"
          ]
        }
      }
    },

    "location": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "pattern": "^location$"
        },
        "entity_data": {
          "type": "object",
          "properties": {
            "address": {
              "type": "string"
            },
            "lat": {
              "type": "string"
            },
            "lng": {
              "type": "string"
            }
          },
          "required": [
            "address",
            "lat",
            "lng"
          ]
        }
      }
    },

    "embed": {
      "type": "object",
      "properties": {
        "entity_type": {
          "type": "string",
          "pattern": "^embed$"
        },
        "entity_data": {
          "type": "object",
          "properties": {
            "url": { "type": ["string", "null"] },
            "title": { "type": ["string", "null"] },
            "description": { "type": ["string", "null"] },
            "image": { "type": ["string", "null"] },
            "nothing": { "type": "boolean" }
          }
        }
      }
    }
  }
}