{ "type": "object", "description": "The schema for vulnerability finding details", "additionalProperties": false, "patternProperties": { "^.*$": { "allOf": [ { "$ref": "#/definitions/named_field" }, { "$ref": "#/definitions/detail_type" } ] } }, "definitions": { "detail_type": { "oneOf": [ { "$ref": "#/definitions/named_list" }, { "$ref": "#/definitions/list" }, { "$ref": "#/definitions/table" }, { "$ref": "#/definitions/text" }, { "$ref": "#/definitions/url" }, { "$ref": "#/definitions/code" }, { "$ref": "#/definitions/value" }, { "$ref": "#/definitions/diff" }, { "$ref": "#/definitions/markdown" }, { "$ref": "#/definitions/commit" }, { "$ref": "#/definitions/file_location" }, { "$ref": "#/definitions/module_location" } ] }, "text_value": { "type": "string" }, "named_field": { "type": "object", "required": [ "name" ], "properties": { "name": { "$ref": "#/definitions/text_value", "minLength": 1 }, "description": { "$ref": "#/definitions/text_value" } } }, "named_list": { "type": "object", "description": "An object with named and typed fields", "required": [ "type", "items" ], "properties": { "type": { "const": "named-list" }, "items": { "type": "object", "patternProperties": { "^.*$": { "allOf": [ { "$ref": "#/definitions/named_field" }, { "$ref": "#/definitions/detail_type" } ] } } } } }, "list": { "type": "object", "description": "A list of typed fields", "required": [ "type", "items" ], "properties": { "type": { "const": "list" }, "items": { "type": "array", "items": { "$ref": "#/definitions/detail_type" } } } }, "table": { "type": "object", "description": "A table of typed fields", "required": [ "type", "rows" ], "properties": { "type": { "const": "table" }, "header": { "type": "array", "items": { "$ref": "#/definitions/detail_type" } }, "rows": { "type": "array", "items": { "type": "array", "items": { "$ref": "#/definitions/detail_type" } } } } }, "text": { "type": "object", "description": "Raw text", "required": [ "type", "value" ], "properties": { "type": { "const": "text" }, "value": { "$ref": "#/definitions/text_value" } } }, "url": { "type": "object", "description": "A single URL", "required": [ "type", "href" ], "properties": { "type": { "const": "url" }, "text": { "$ref": "#/definitions/text_value" }, "href": { "type": "string", "minLength": 1, "examples": ["http://mysite.com"] } } }, "code": { "type": "object", "description": "A codeblock", "required": [ "type", "value" ], "properties": { "type": { "const": "code" }, "value": { "type": "string" }, "lang": { "type": "string", "description": "A programming language" } } }, "value": { "type": "object", "description": "A field that can store a range of types of value", "required": ["type", "value"], "properties": { "type": { "const": "value" }, "value": { "type": ["number", "string", "boolean"] } } }, "diff": { "type": "object", "description": "A diff", "required": [ "type", "before", "after" ], "properties": { "type": { "const": "diff" }, "before": { "type": "string" }, "after": { "type": "string" } } }, "markdown": { "type": "object", "description": "GitLab flavoured markdown, see https://docs.gitlab.com/ee/user/markdown.html", "required": [ "type", "value" ], "properties": { "type": { "const": "markdown" }, "value": { "$ref": "#/definitions/text_value", "examples": ["Here is markdown `inline code` #1 [test](gitlab.com)\n\n![GitLab Logo](https://about.gitlab.com/images/press/logo/preview/gitlab-logo-white-preview.png)"] } } }, "commit": { "type": "object", "description": "A commit/tag/branch within the GitLab project", "required": [ "type", "value" ], "properties": { "type": { "const": "commit" }, "value": { "type": "string", "description": "The commit SHA", "minLength": 1 } } }, "file_location": { "type": "object", "description": "A location within a file in the project", "required": [ "type", "file_name", "line_start" ], "properties": { "type": { "const": "file-location" }, "file_name": { "type": "string", "minLength": 1 }, "line_start": { "type": "integer" }, "line_end": { "type": "integer" } } }, "module_location": { "type": "object", "description": "A location within a binary module of the form module+relative_offset", "required": [ "type", "module_name", "offset" ], "properties": { "type": { "const": "module-location" }, "module_name": { "type": "string", "minLength": 1, "examples": ["compiled_binary"] }, "offset": { "type": "integer", "examples": [100] } } } } }