content: package fuzion24.device.vulnerability.test;
  
  import android.content.Context;
  
  import org.json.JSONArray;
  import org.json.JSONObject;
  
  import java.text.SimpleDateFormat;
  import java.util.ArrayList;
  import java.util.Date;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  
  import fuzion24.device.vulnerability.vulnerabilities.VulnerabilityTest;
  import fuzion24.device.vulnerability.vulnerabilities.helper.BinaryAssets;
  
  /**
   * Created by fuzion24 on 11/23/15.
   */
  public class VulnerabilityDescriptor {
  
  
      private final String CVEorID;
      private final String description;
      private final String impact;
      private final Double CVSSV2Score;
      private final Date CVEDate;
      private final List<String> externalLinks;
      private final List<String> altNames;
      private final List<String> patches;
  
      private VulnerabilityDescriptor(String cve,
                                      String desc,
                                      String impact,
                                      Double cvssv2,
                                      String cveDate,
                                      List<String> externLinks,
                                      List<String> altNames,
                                      List<String> patches) throws Exception {
          this.CVEorID = cve;
          this.description = desc;
          this.impact = impact;
          this.CVSSV2Score = cvssv2;
          this.externalLinks = externLinks;
          this.altNames = altNames;
          this.patches = patches;
  
          SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
          Date d = sdf.parse(cveDate);
          this.CVEDate = d;
      }
  
  
      private static List<String> extractStringArray(JSONObject obj, String arrayName) throws Exception {
          JSONArray jsonStringArray = obj.getJSONArray(arrayName);
          List<String> items = new ArrayList<>();
          for (int i = 0; i < jsonStringArray.length(); i++) {
              items.add(jsonStringArray.getString(i));
          }
          return items;
      }
  
  
      public static Map<String, VulnerabilityDescriptor> getParsedVulnMap(Context ctx) throws Exception {
          String jsonVulns = BinaryAssets.extractAsset(ctx, "vuln_map.json");
          JSONObject vulnMap = new JSONObject(jsonVulns);
  
          Map<String, VulnerabilityDescriptor> descriptorMap = new HashMap<>();
          Iterator<String> keys = vulnMap.keys();
  
          while (keys.hasNext()) {
              JSONObject jobj = null;
              String description = null;
              String impact = null;
              Double cvssV2Score = null;
              String cveDate = null;
              List<String> externalLinks = null;
              List<String> altNames = null;
              List<String> patches = null;
  
              String key = keys.next();
              jobj = vulnMap.getJSONObject(key);
              String cve = jobj.getString("cve");
              altNames = extractStringArray(jobj, "altnames");
              description = jobj.getString("description");
              impact = jobj.getString("impact");
              externalLinks = extractStringArray(jobj, "external_links");
              cvssV2Score = jobj.getDouble("cvssv2");
              patches = extractStringArray(jobj, "patch");
              cveDate = jobj.getString("cvedate");
  
              VulnerabilityDescriptor vd = new VulnerabilityDescriptor(
                      cve,
                      description,
                      impact,
                      cvssV2Score,
                      cveDate,
                      externalLinks,
                      altNames,
                      patches);
  
              descriptorMap.put(key, vd);
          }
  
          return descriptorMap;
      }
  
  
      public String getCVEorID() {
          return CVEorID;
      }
  
      public String getDescription() {
          return description;
      }
  
      public String getImpact() {
          return impact;
      }
  
      public Double getCVSSV2Score() {
          return CVSSV2Score;
      }
  
      public Date getCVEDate() {
          return CVEDate;
      }
  
      public List<String> getExternalLinks() {
          return externalLinks;
      }
  
      public List<String> getAltNames() {
          return altNames;
      }
  
      public List<String> getPatches() {
          return patches;
      }
  
  
  
  }
  