shubhobm's picture
feat(app): first pass at reporting app, step 2 and 3 functioning
d523c31
raw
history blame
1.87 kB
"""
Component data classes used in AVID report and vulnerability datamodels.
"""
from typing import Dict, List, Optional
from pydantic import BaseModel
from .enums import *
class LangValue(BaseModel):
"""Generic class to store a string with its language specified."""
lang: str
value: str
class Artifact(BaseModel):
"""Type and name of an affected artifact."""
type: ArtifactTypeEnum
name: str
class Detection(BaseModel):
"""Method to detect a specific issue."""
type: MethodEnum
name: str
class Affects(BaseModel):
"""Information on Artifact(s) affected by this report."""
developer: List[str]
deployer: List[str]
artifacts: List[Artifact]
class Problemtype(BaseModel):
"""Description of the problem a report/vuln is concerned with."""
classof: ClassEnum
type: Optional[TypeEnum]
description: LangValue
class Metric(BaseModel):
"""Quantification of the issue in a specific report."""
name: str
detection_method: Detection
results: Dict
class Reference(BaseModel):
"""Details for a reference of a report/vulnerability."""
type: Optional[str]
label: str
url: str # AnyUrl is a better fit, but keeping this because submissions are not standard yet
class Config: # type is excluded if None
fields = {'type': {'exclude': True}}
class AvidTaxonomy(BaseModel):
"""AVID taxonomy mappings of a report/vulnerability."""
vuln_id: Optional[str]
risk_domain: List[str]
sep_view: List[SepEnum]
lifecycle_view: List[LifecycleEnum]
taxonomy_version: str
class Config: # vuln_id is excluded if None
fields = {'vuln_id': {'exclude': True}}
class Impact(BaseModel):
"""Impact information of a report/vulnerability, e.g. different taxonomy mappings, harm and severity scores."""
avid: AvidTaxonomy