Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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());
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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
            });
        }