{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/loobin-1.0.json",
  "additionalProperties": false,
  "definitions": {
    "ExampleUseCase": {
      "title": "ExampleUseCase",
      "description": "Use case base class",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "type": "string"
        },
        "description": {
          "title": "Description",
          "type": "string"
        },
        "code": {
          "title": "Code",
          "type": "string"
        },
        "tactics": {
          "title": "Tactics",
          "type": "array",
          "items": {
            "enum": [
              "Reconnaissance",
              "Resource Development",
              "Initial Access",
              "Execution",
              "Persistence",
              "Privilege Escalation",
              "Defense Evasion",
              "Credential Access",
              "Discovery",
              "Lateral Movement",
              "Collection",
              "Exfiltration",
              "Command and Control",
              "Impact"
            ],
            "type": "string"
          }
        },
        "tags": {
          "title": "Tags",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": ["name", "description"]
    },
    "Detection": {
      "title": "Detection",
      "description": "Detection base class",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "type": "string"
        },
        "url": {
          "title": "Url",
          "type": "string"
        }
      },
      "required": ["name", "url"]
    },
    "Resource": {
      "title": "Resource",
      "description": "External reference base class",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "type": "string"
        },
        "url": {
          "title": "Url",
          "type": "string"
        }
      },
      "required": ["name", "url"]
    }
  },
  "description": "LOOBin base class",
  "properties": {
    "name": {
      "title": "Name",
      "description": "Name of the LOOBin",
      "type": "string"
    },
    "author": {
      "title": "Author",
      "description": "Author of the LOOBin",
      "type": "string"
    },
    "short_description": {
      "title": "Short Description",
      "description": "A short description of the LOOBin.This will display in the LOOBin card list and the LOOBins website search results.",
      "type": "string"
    },
    "full_description": {
      "title": "Full Description",
      "description": "A full description of the LOOBin.This will display on the LOOBin's single page.",
      "type": "string"
    },
    "created": {
      "title": "Created",
      "description": "Date the LOOBin was created",
      "type": "string",
      "format": "date"
    },
    "example_use_cases": {
      "title": "Example Use Cases",
      "description": "A list of example use cases for the LOOBin",
      "type": "array",
      "items": {
        "$ref": "#/definitions/ExampleUseCase"
      }
    },
    "paths": {
      "title": "Paths",
      "description": "A list of paths to the LOOBin",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "detections": {
      "title": "Detections",
      "description": "A list of detections for the LOOBin",
      "type": "array",
      "items": {
        "$ref": "#/definitions/Detection"
      }
    },
    "resources": {
      "title": "Resource",
      "description": "A list of useful resources for the LOOBin",
      "type": "array",
      "items": {
        "$ref": "#/definitions/Resource"
      }
    },
    "acknowledgements": {
      "title": "Acknowledgements",
      "description": "Acknowledgements for the LOOBin",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "name",
    "author",
    "short_description",
    "full_description",
    "created",
    "example_use_cases",
    "paths",
    "detections"
  ],
  "title": "LOOBin",
  "type": "object"
}
