blob: cf0c91fe0e338aaed3f01fe58db32773896ab404 [file]
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://security.apache.org/schemas/dashboard/case.schema.json",
"title": "Security issue case",
"description": "One JSON file under the dashboard's `data_dir`, holding the header metadata of every email linked to a single security issue: the original report, any duplicate reports of the same issue, and follow-ups that are not part of the same mail thread. The file name carries the classification (CVE ids, date, subproject, workflow state); the contents carry only header metadata, never message bodies.",
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/email"
},
"$defs": {
"email": {
"type": "object",
"description": "Header metadata of one email linked to the case.",
"required": [
"mailtime",
"subj",
"from",
"to",
"message_id"
],
"additionalProperties": true,
"properties": {
"mailtime": {
"type": "integer",
"description": "Send time of the email, as Unix epoch seconds (UTC), parsed from the `Date:` header. The dashboard uses the first entry's mailtime as the date the case was opened and, once the case is closed, the last entry's mailtime as the date it was closed.",
"minimum": 0,
"examples": [
1700000000
]
},
"subj": {
"type": "string",
"description": "Raw `Subject:` header. May still be RFC 2047 encoded (`=?utf-8?...?=`); consumers decode it.",
"examples": [
"[SECURITY] path traversal in the FooServlet",
"CVE-2026-12345 was pushed to cve.org"
]
},
"from": {
"type": "string",
"description": "Raw `From:` header, an RFC 5322 address list.",
"examples": [
"Jane Reporter <jane@example.com>"
]
},
"to": {
"type": "string",
"description": "Raw `To:` header, an RFC 5322 address list.",
"examples": [
"security@cassandra.apache.org"
]
},
"message_id": {
"type": "string",
"description": "Raw `Message-ID:` header, angle-bracketed. Percent-encoded into the lists.apache.org thread permalink.",
"pattern": "^<.+>$",
"examples": [
"<abc123@cassandra.apache.org>"
]
},
"cc": {
"type": "string",
"description": "Raw `Cc:` header, an RFC 5322 address list. Optional: the dashboard reads it when present, to find the mailing list when `to` holds no apache.org address.",
"examples": [
"security@cassandra.apache.org"
]
},
"reply_to": {
"type": "string",
"description": "Raw `Reply-To:` header, an RFC 5322 address list. Optional: the dashboard reads it when present, to recover the reporter behind a 'Jane Reporter via Security <security@apache.org>' sender.",
"examples": [
"Jane Reporter <jane@example.com>"
]
}
}
}
},
"examples": [
[
{
"mailtime": 1700000000,
"subj": "[SECURITY] path traversal in the FooServlet",
"from": "Jane Reporter <jane@example.com>",
"to": "security@apache.org",
"message_id": "<abc123@example.com>"
},
{
"mailtime": 1700086400,
"subj": "Re: [SECURITY] path traversal in the FooServlet",
"from": "A Committer <committer@apache.org>",
"to": "security@cassandra.apache.org",
"message_id": "<def456@cassandra.apache.org>"
}
]
]
}