/// <summary> /// Метод выстаскивает текстовое описание угроз, парсит, приводит к типу Threat и возвращает массив объектов Threat. /// </summary> /// <param name="file"></param> /// <returns></returns> public static List <Threat> GetThreatsFromXlsx(FileInfo file, KPSZIContext db) { List <List <string> > listOfXlslxRows = File_Selected_New(file); List <ThreatSource> tss = db.ThreatSources.ToList(); List <Threat> listOfAllThreatsFromFile = new List <Threat>(); for (int i = 0; i < listOfXlslxRows[0].Count; i++) { Threat thr = new Threat(); thr.ThreatNumber = Convert.ToInt32(listOfXlslxRows[0][i]); thr.Name = listOfXlslxRows[1][i]; thr.Description = listOfXlslxRows[2][i]; thr.ThreatSources = ThreatSource.Parse(listOfXlslxRows[3][i], tss); thr.ObjectOfInfluence = listOfXlslxRows[4][i]; thr.ConfidenceViolation = (listOfXlslxRows[5][i] == "1") ? true : false; thr.IntegrityViolation = (listOfXlslxRows[6][i] == "1") ? true : false; thr.AvailabilityViolation = (listOfXlslxRows[7][i] == "1") ? true : false; thr.DateOfAdd = DateTime.Parse(listOfXlslxRows[8][i]); thr.DateOfChange = DateTime.Parse(listOfXlslxRows[9][i]); listOfAllThreatsFromFile.Add(thr); } return(listOfAllThreatsFromFile); }
/// <summary> /// Метод парсит текстовое описание источника угрозы и приводит к объекту класса ThreatSource /// </summary> /// <param name="str"></param> /// <returns></returns> public static List <ThreatSource> Parse(string str, List <ThreatSource> tss) { // Список распарсенных источников угроз List <ThreatSource> listOfTS = new List <ThreatSource>(); if (str == "" || str == null) { ThreatSource tsnull = tss.Where(t => t.Potencial == 3).FirstOrDefault(); listOfTS.Add(tsnull); return(listOfTS); } string[] arrOfTextTS = str.Split(','); // Если массив пустой, то добавляем в него всю строку: if (arrOfTextTS == null) { arrOfTextTS = new string[1] { str }; } foreach (string s in arrOfTextTS) { ThreatSource ts = new ThreatSource(); if (s.ToLower().Contains("внутренний")) { if (s.ToLower().Contains("низким")) { ts = tss.Where(t => t.InternalIntruder == true && t.Potencial == 0).FirstOrDefault(); } else if (s.ToLower().Contains("средним")) { ts = tss.Where(t => t.InternalIntruder == true && t.Potencial == 1).FirstOrDefault(); } else if (s.ToLower().Contains("высоким")) { ts = tss.Where(t => t.InternalIntruder == true && t.Potencial == 2).FirstOrDefault(); } } else if (s.ToLower().Contains("внешний")) { if (s.ToLower().Contains("низким")) { ts = tss.Where(t => t.InternalIntruder == false && t.Potencial == 0).FirstOrDefault(); } else if (s.ToLower().Contains("средним")) { ts = tss.Where(t => t.InternalIntruder == false && t.Potencial == 1).FirstOrDefault(); } else if (s.ToLower().Contains("высоким")) { ts = tss.Where(t => t.InternalIntruder == false && t.Potencial == 2).FirstOrDefault(); } } else { MessageBox.Show("Произошла ошибка парсинга поля 'Источник угроз'.\nПриступай к дебаггингу", "Ахтунг!", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } listOfTS.Add(ts); } return(listOfTS); }