private int GetDetectionDeviceId() { using (FalconOrchestratorDB db = new FalconOrchestratorDB()) { int detectDeviceId; if (db.Devices.Any(x => x.Hostname.Equals(data.ComputerName))) { int deviceId = db.Devices.Where(x => x.Hostname.Equals(data.ComputerName)).Select(x => x.DeviceId).Single(); DetectionDevice detectDevice = new DetectionDevice(); detectDevice.DeviceId = deviceId; detectDevice.IPAddress = data.IPAddress; db.DetectionDevices.Add(detectDevice); db.SaveChanges(); detectDeviceId = detectDevice.DetectionDeviceId; } else { Device device = new Device(); device.Hostname = data.ComputerName; device.SensorId = data.SensorId; device.Domain = data.MachineDomain; db.Devices.Add(device); DetectionDevice detectDevice = new DetectionDevice(); detectDevice.DeviceId = device.DeviceId; db.DetectionDevices.Add(detectDevice); db.SaveChanges(); detectDeviceId = detectDevice.DetectionDeviceId; } return(detectDeviceId); } }
public void Update(DetectionEditViewModel model) { using (FalconOrchestratorDB db = new FalconOrchestratorDB()) { if (model.Tags != null) { int tagId; foreach (string line in model.Tags.Split(',')) { //if tag already exists, get ID if (db.Tags.Any(x => x.Name.Equals(line.ToLower()))) { tagId = db.Tags.Where(x => x.Name.Equals(line.ToLower())).Select(x => x.TagId).FirstOrDefault(); } //otherwise create a new tag and return that ID else { Tag tag = new Tag(); tag.Name = line.ToLower(); db.Tags.Add(tag); db.SaveChanges(); tagId = tag.TagId; } //Associate the tag with the detection DetectionTag dt = new DetectionTag(); dt.DetectionId = model.DetectionId; dt.TagId = tagId; db.DetectionTags.Add(dt); db.SaveChanges(); } } Detection detection = db.Detections.Find(model.DetectionId); detection.CustomSeverityId = model.CustomSeverityId; detection.ResponderId = model.ResponderId; detection.Comment = model.Comment; //If status in DB is currently of type open but view model is of type closed, set closed date to current time if ((detection.StatusId.Equals(1) || detection.StatusId.Equals(2) || detection.StatusId.Equals(3) || detection.StatusId.Equals(4)) && model.StatusId.Equals(5) || model.StatusId.Equals(6) || model.StatusId.Equals(7)) { detection.ClosedDate = DateTime.UtcNow; } //If status in DB is currently of type closed but view model is of type open, set closed date to null if ((detection.StatusId.Equals(5) || detection.StatusId.Equals(6) || detection.StatusId.Equals(7)) && model.StatusId.Equals(1) || model.StatusId.Equals(2) || model.StatusId.Equals(3) || detection.StatusId.Equals(4)) { detection.ClosedDate = null; } //order matters, set status after closed date handling logic detection.StatusId = model.StatusId; db.Entry(detection).State = System.Data.Entity.EntityState.Modified; //if IP manually provided update db record with the new IP if (model.Asset.IPAddress != null) { DetectionDevice dd = db.DetectionDevices.Find(detection.DetectionDeviceId); dd.IPAddress = model.Asset.IPAddress; db.Entry(dd).State = System.Data.Entity.EntityState.Modified; } //if IP already exists and user supplies empty value update with null value if (detection.DetectionDevice.IPAddress != null && model.Asset.IPAddress == null) { DetectionDevice dd = db.DetectionDevices.Find(detection.DetectionDeviceId); dd.IPAddress = null; db.Entry(dd).State = System.Data.Entity.EntityState.Modified; } db.SaveChanges(); } }