private void WuModule(EntityPolicyModules policyModule) { var clientWuModule = new DtoClientWuModule(); var wuModule = new ServiceWuModule().GetModule(policyModule.ModuleId); clientWuModule.Guid = wuModule.Guid; clientWuModule.DisplayName = wuModule.Name; clientWuModule.Arguments = wuModule.AdditionalArguments; clientWuModule.Order = policyModule.Order; clientWuModule.Timeout = wuModule.Timeout; clientWuModule.RedirectOutput = wuModule.RedirectStdOut; clientWuModule.RedirectError = wuModule.RedirectStdError; foreach (var successCode in wuModule.SuccessCodes.Split(',')) { clientWuModule.SuccessCodes.Add(successCode); } if (policyModule.ConditionId != -1) { var conditionScript = new ServiceScriptModule().GetModule(policyModule.ConditionId); if (conditionScript != null) { clientWuModule.ConditionFailedAction = policyModule.ConditionFailedAction; clientWuModule.ConditionNextOrder = policyModule.ConditionNextModule; clientWuModule.Condition = new DtoClientModuleCondition(); clientWuModule.Condition.Arguments = conditionScript.Arguments; clientWuModule.Condition.DisplayName = conditionScript.Name; clientWuModule.Condition.Guid = conditionScript.Guid; clientWuModule.Condition.RedirectError = conditionScript.RedirectStdError; clientWuModule.Condition.RedirectOutput = conditionScript.RedirectStdOut; if (conditionScript.ImpersonationId != -1) { var scriptImpersonationGuid = new ServiceImpersonationAccount().GetGuid(conditionScript.ImpersonationId); if (!string.IsNullOrEmpty(scriptImpersonationGuid)) { clientWuModule.Condition.RunAs = scriptImpersonationGuid; } } clientWuModule.Condition.ScriptType = conditionScript.ScriptType; foreach (var successCode in conditionScript.SuccessCodes.Split(',')) { clientWuModule.Condition.SuccessCodes.Add(successCode); } clientWuModule.Condition.Timeout = conditionScript.Timeout; clientWuModule.Condition.WorkingDirectory = conditionScript.WorkingDirectory; } } var moduleFiles = new ServiceModule().GetModuleFiles(wuModule.Guid); foreach (var file in moduleFiles.OrderBy(x => x.FileName)) { var clientFile = new DtoClientFileHash(); clientFile.FileName = file.FileName; clientFile.FileHash = file.Md5Hash; clientWuModule.Files.Add(clientFile); } _clientPolicy.WuModules.Add(clientWuModule); }
public WuModuleController() { _wuModuleServices = new ServiceWuModule(); _auditLogService = new ServiceAuditLog(); _userId = Convert.ToInt32(((ClaimsIdentity)User.Identity).Claims.Where(c => c.Type == "user_id") .Select(c => c.Value).SingleOrDefault()); }
private void CopyWuModule(EntityPolicyModules policyModule) { var wuModuleExport = new DtoWuModuleExport(); var wuModule = new ServiceWuModule().GetModule(policyModule.ModuleId); wuModuleExport.DisplayName = wuModule.Name; wuModuleExport.Description = wuModule.Description; wuModuleExport.Arguments = wuModule.AdditionalArguments; wuModuleExport.Order = policyModule.Order; wuModuleExport.Timeout = wuModule.Timeout; wuModuleExport.RedirectOutput = wuModule.RedirectStdOut; wuModuleExport.RedirectError = wuModule.RedirectStdError; wuModuleExport.SuccessCodes = wuModule.SuccessCodes; wuModuleExport.Guid = wuModule.Guid; wuModuleExport.ConditionFailedAction = policyModule.ConditionFailedAction; wuModuleExport.ConditionNextOrder = policyModule.ConditionNextModule; var uploadedFiles = new ServiceUploadedFile().GetFilesForModule(wuModule.Guid); foreach (var file in uploadedFiles.OrderBy(x => x.Name)) { var uploadedFile = new DtoUploadedFileExport(); uploadedFile.FileName = file.Name; uploadedFile.Md5Hash = file.Hash; uploadedFile.ModuleGuid = file.Guid; wuModuleExport.UploadedFiles.Add(uploadedFile); } var externalFiles = new ServiceExternalDownload().GetForModule(wuModule.Guid); foreach (var file in externalFiles.OrderBy(x => x.FileName)) { var externalFile = new DtoExternalFileExport(); externalFile.FileName = file.FileName; externalFile.Sha256Hash = file.Sha256Hash; externalFile.Url = file.Url; externalFile.ModuleGuid = file.ModuleGuid; wuModuleExport.ExternalFiles.Add(externalFile); } if (policyModule.ConditionId != -1) { wuModuleExport.Condition = GetCondition(policyModule.ConditionId); } _policyExport.WuModules.Add(wuModuleExport); }
public DtoActionResult Restore(int moduleId, EnumModule.ModuleType moduleType) { var result = _moduleServices.RestoreModule(moduleId, moduleType); if (result == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); } if (result.Success) { var auditLog = new EntityAuditLog(); switch (moduleType) { case EnumModule.ModuleType.Command: var cModule = new ServiceCommandModule().GetModule(moduleId); auditLog.ObjectName = cModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(cModule); break; case EnumModule.ModuleType.FileCopy: var fModule = new ServiceFileCopyModule().GetModule(moduleId); auditLog.ObjectName = fModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(fModule); break; case EnumModule.ModuleType.Printer: var pModule = new ServicePrinterModule().GetModule(moduleId); auditLog.ObjectName = pModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(pModule); break; case EnumModule.ModuleType.Script: var scModule = new ServiceScriptModule().GetModule(moduleId); auditLog.ObjectName = scModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(scModule); break; case EnumModule.ModuleType.Software: var sModule = new ServiceSoftwareModule().GetModule(moduleId); auditLog.ObjectName = sModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(sModule); break; case EnumModule.ModuleType.Wupdate: var uModule = new ServiceWuModule().GetModule(moduleId); auditLog.ObjectName = uModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(uModule); break; case EnumModule.ModuleType.Message: var messageModule = new ServiceMessageModule().GetModule(moduleId); auditLog.ObjectName = messageModule.Name; auditLog.ObjectJson = JsonConvert.SerializeObject(messageModule); break; } auditLog.ObjectType = moduleType.ToString(); auditLog.ObjectId = result.Id; auditLog.UserId = _userId; auditLog.AuditType = EnumAuditEntry.AuditType.Restore; _auditLogService.AddAuditLog(auditLog); } return(result); }
private string VerifyWindowsUpdate(EntityPolicyModules policyModule) { var wuModule = new ServiceWuModule().GetModule(policyModule.ModuleId); if (string.IsNullOrEmpty(wuModule.Name)) { return("A Windows Update Module Has An Invalid Name"); } if (wuModule.Archived) { return("Windows Update Module: " + wuModule.Name + " Is Archived"); } if (string.IsNullOrEmpty(wuModule.Guid)) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid GUID"); } int value; if (!int.TryParse(wuModule.Timeout.ToString(), out value)) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid Timeout"); } if (!int.TryParse(policyModule.Order.ToString(), out value)) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid Order"); } List <string> successCodes = new List <string>(); foreach (var successCode in wuModule.SuccessCodes.Split(',')) { successCodes.Add(successCode); } if (successCodes.Count == 0) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid Success Code"); } if (successCodes.Any(code => !int.TryParse(code, out value))) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid Success Code"); } var uploadedFiles = new ServiceUploadedFile().GetFilesForModule(wuModule.Guid); var externalFiles = new ServiceExternalDownload().GetForModule(wuModule.Guid); if (uploadedFiles == null && externalFiles == null) { return("Windows Update Module: " + wuModule.Name + " Does Not Have Any Associated Files"); } try { if (uploadedFiles.Count == 0 && externalFiles.Count == 0) { return("Windows Update Module: " + wuModule.Name + " Does Not Have Any Associated Files"); } } catch { return("Windows Update Module: " + wuModule.Name + " Error While Determining Associated Files"); } var firstExtension = ""; int uploadFileCounter = 0; foreach (var file in uploadedFiles) { var ext = Path.GetExtension(file.Name); if (ext == null) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid File Extension In The Uploaded Files List"); } if (!ext.ToLower().Equals(".cab") && !ext.ToLower().Equals(".msu")) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid File Extension In The Uploaded Files List"); } if (uploadFileCounter == 0) { firstExtension = ext; } else { if (!firstExtension.Equals(ext)) { return("Windows Update Module: " + wuModule.Name + " All Files Per Windows Update Module Must Be The Same Type. IE. All .msu Or All .cab"); } } uploadFileCounter++; } int externalFileCounter = 0; foreach (var file in externalFiles) { var ext = Path.GetExtension(file.FileName); if (ext == null) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid File Extension In The External Files List"); } if (!ext.ToLower().Equals(".cab") && !ext.ToLower().Equals(".msu")) { return("Windows Update Module: " + wuModule.Name + " Has An Invalid File Extension In The External Files List"); } if (uploadFileCounter == 0 && string.IsNullOrEmpty(firstExtension)) //don't overwrite extension that may have been set in uploaded files { firstExtension = ext; } else { if (!firstExtension.Equals(ext)) { return("Windows Update Module: " + wuModule.Name + " All Files Per Windows Update Module Must Be The Same Type. IE. All .msu Or All .cab"); } } externalFileCounter++; } var basePath = Path.Combine(ServiceSetting.GetSettingValue(SettingStrings.StoragePath), "software_uploads"); using (var unc = new UncServices()) { if (unc.NetUseWithCredentials() || unc.LastError == 1219) { try { foreach (var file in uploadedFiles.OrderBy(x => x.Name)) { if (string.IsNullOrEmpty(file.Hash)) { return("Windows Update Module: " + wuModule.Name + " " + file.Name + " Does Not Have An MD5 Hash"); } var fullPath = Path.Combine(basePath, file.Guid, file.Name); if (!File.Exists(fullPath)) { return("Windows Update Module: " + wuModule.Name + " " + fullPath + " Does Not Exist"); } } foreach (var file in externalFiles.OrderBy(x => x.FileName)) { if (file.Status != EnumFileDownloader.DownloadStatus.Complete) { return("Windows Update Module: " + wuModule.Name + " " + file.FileName + " Has Not Finished Downloading Or Is In An Error State"); } if (string.IsNullOrEmpty(file.Md5Hash)) { return("Windows Update Module: " + wuModule.Name + " " + file.FileName + " Does Not Have An MD5 Hash"); } var fullPath = Path.Combine(basePath, file.ModuleGuid, file.FileName); if (!File.Exists(fullPath)) { return("Windows Update Module: " + wuModule.Name + " " + fullPath + " Does Not Exist"); } } } catch (Exception ex) { Logger.Debug(ex.Message); return("Windows Update Module: " + wuModule.Name + " Unknown Error Trying To Verify Files"); } } else { return("Could Not Reach Storage Path"); } } return(null); }
private DtoActionResult CreateWindowsUpdate() { foreach (var wuModuleModule in _export.WuModules) { if (_export.Instructions.Contains("[generate-module-guid]")) { wuModuleModule.Guid = Guid.NewGuid().ToString(); } if (_uow.WindowsUpdateModuleRepository.Exists(h => h.Guid.Equals(wuModuleModule.Guid))) { return(new DtoActionResult() { ErrorMessage = "A Windows Update Module With This Guid Already Exists. " + wuModuleModule.Guid }); } var wu = new EntityWuModule(); wu.Name = wuModuleModule.DisplayName; wu.Description = "Added Via Policy Template " + _export.Name + " On " + DateTime.Now + "\r\n" + wu.Description; wu.Guid = wuModuleModule.Guid; wu.AdditionalArguments = wuModuleModule.Arguments; wu.RedirectStdError = wuModuleModule.RedirectError; wu.RedirectStdOut = wuModuleModule.RedirectOutput; wu.SuccessCodes = wuModuleModule.SuccessCodes; wu.Timeout = wuModuleModule.Timeout; if (wuModuleModule.UploadedFiles.Any()) { _policyHasInternalFiles = true; } if (wuModuleModule.ExternalFiles.Any()) { _policyHasExternalFiles = true; } if (_uow.WindowsUpdateModuleRepository.Exists(h => h.Name.Equals(wu.Name))) { for (var c = 1; c <= 100; c++) { if (c == 100) { return new DtoActionResult() { ErrorMessage = "Could Not Determine A Windows Update Name" } } ; var newName = wu.Name + "_" + c; if (!_uow.WindowsUpdateModuleRepository.Exists(h => h.Name == newName)) { wu.Name = newName; break; } } } var addResult = new ServiceWuModule().AddModule(wu); if (!addResult.Success) { return(addResult); } var policyModule = new EntityPolicyModules(); policyModule.Guid = wu.Guid; policyModule.ModuleId = addResult.Id; policyModule.ModuleType = EnumModule.ModuleType.Wupdate; policyModule.Name = wu.Name; policyModule.Order = wuModuleModule.Order; policyModule.PolicyId = _policy.Id; policyModule.ConditionFailedAction = wuModuleModule.ConditionFailedAction; policyModule.ConditionNextModule = wuModuleModule.ConditionNextOrder; var conditionId = CreateCondition(wuModuleModule.Condition); if (conditionId != 0) { policyModule.ConditionId = conditionId; } else { policyModule.ConditionId = -1; } _uow.PolicyModulesRepository.Insert(policyModule); } return(new DtoActionResult() { Success = true }); }