package cd.casic.ci.process.dto.req.vulInfo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class VulInfoDto {

    /**
     * 记录的唯一标识 ID，数据库中为主键，自增长
     */
    private Long id;

    /**
     * 创建时间，自动生成
     */
    private Date createTime;

    /**
     * 修改时间，自动生成，修改时间就是审核时间
     */
    private Date modifyTime;

    /**
     * 漏洞状态，未审核、审核中，审核完
     */
    private String verifyStatus;

    /**
     * 内部漏洞id，不需要输入，根据类型+日期随机生成，类型分为源码、固件、二进制 ，根据target_type 漏洞目标相关
     */
    private String vulId;

    /**
     * 是否开源，选项框，对勾，源码时候才会有这个概念
     */
    private String isOpenSource;

    /**
     * 中文标题
     */
    private String vulTitle;

    /**
     * 中文描述
     */
    private String vulDescription;

    /**
     * 危险等级,高中低三种
     */
    private String severity;

    /**
     * 中文修复方案
     */
    private String solution;

    /**
     * 暂时修复的缓解措施
     */
    private String relieve;

    /**
     * 目标的名称
     */
    private String targetName;

    /**
     * 漏洞类型
     */
    private List<String> cwes;

    /**
     * 利用级别，可利用和不可利用，默认不要利用
     */
    private String level;

    /**
     * 发现的漏洞目标类型，源码，二进制，固件三种
     */
    private String targetType;

    /**
     * 目标的链接，来自于人机协同系统，就是一个下载地址的url
     */
    private String targetUrl;

    /**
     * 受影响的目标，用户自己输入
     */
    private String affectProjectId;

    /**
     * 类型是源码的情况才有这个概念，安全分支列表,如果类型是源码的，这个是可选项，比如master分支，dev分支等
     */
    private String unaffectedVersions;

    /**
     * 受影响产品名
     */
    private String affectProductName;

    private String localAflCrashesId;
}
