Beispiel #1
0
        // Methods
        public override async Task <StepResults> Perform(Dictionary <string, object> variableCache, IProgress <ProgressReport> progress)
        {
            var column = StartMessage.Trim().Length > 0 ? ": " : "";

            var progressReport = new ProgressReport();
            var stepResults    = new StepResults {
                Message = column + Common.ProcessVariableTokens(ValidMessage, variableCache), Status = StepStatus.Success
            };

            progress.Report(new ProgressReport {
                Message = Common.ProcessVariableTokens(StartMessage, variableCache), Percentage = 0, NewLine = false
            });
            await Task.Delay(10);

            if ((Variable == string.Empty && Path == string.Empty) || (Variable != string.Empty && !variableCache.ContainsKey(Variable)))
            {
                stepResults.Message = $"{column}A file was not provided.";
                stepResults.Status  = StepStatus.Failure;
            }
            else if (Hash == string.Empty)
            {
                stepResults.Message = $"{column}A hash was not provided.";
                stepResults.Status  = StepStatus.Failure;
            }

            var file = string.Empty;

            if (stepResults.Status == StepStatus.Success)
            {
                if (variableCache.ContainsKey(Variable))
                {
                    file = variableCache[Variable].ToString();
                }
                else
                {
                    file = Common.ProcessVariableTokens(Path, variableCache);
                }

                if (!File.Exists(file))
                {
                    stepResults.Message = $"{column}The file provided does not exist.";
                    stepResults.Status  = StepStatus.Failure;
                }
            }

            var result = string.Empty;

            if (stepResults.Status == StepStatus.Success)
            {
                switch (Type)
                {
                case HashTypes.None:
                    stepResults.Message = $"{column}A hash type was not selected.";
                    stepResults.Status  = StepStatus.Failure;
                    break;

                case HashTypes.SHA1:
                    result = await SHA1Hash.ComputeHashAsync(File.OpenRead(file), progress);

                    if (Hash.ToUpper() != result)
                    {
                        stepResults.Message = $"\r\nExpected {Hash.ToUpper()} but got {result.ToUpper()} instead.\r\n" + Common.ProcessVariableTokens(InvalidMessage, variableCache);
                        stepResults.Status  = StepStatus.Failure;
                    }
                    break;

                case HashTypes.SHA256:
                    result = await SHA256Hash.ComputeHashAsync(File.OpenRead(file), progress);

                    if (Hash.ToUpper() != result)
                    {
                        stepResults.Message = $"\r\nExpected {Hash.ToUpper()} but got {result.ToUpper()} instead.\r\n" + Common.ProcessVariableTokens(InvalidMessage, variableCache);
                        stepResults.Status  = StepStatus.Failure;
                    }
                    break;
                }
            }

            progress.Report(progressReport);
            return(stepResults);
        }
Beispiel #2
0
        // Methods
        public override async Task <StepResults> Perform(Dictionary <string, object> variableCache, IProgress <ProgressReport> progress)
        {
            var progressReport = new ProgressReport();
            var stepResults    = new StepResults {
                Message = Common.ProcessVariableTokens(ValidMessage, variableCache), Status = StepStatus.Success
            };

            Hash = Hash.ToUpper();

            progress.Report(new ProgressReport {
                Message = StartMessage, Percentage = 0
            });

            if (Variable == string.Empty || !variableCache.ContainsKey(Variable))
            {
                stepResults.Message = $"{Name}: A file was not provided.";
                stepResults.Status  = StepStatus.Failure;
            }
            else if (!File.Exists(variableCache[Variable].ToString()))
            {
                stepResults.Message = $"{Name}: The file provided does not exist.";
                stepResults.Status  = StepStatus.Failure;
            }
            else if (Hash == string.Empty)
            {
                stepResults.Message = $"{Name}: A hash was not provided.";
                stepResults.Status  = StepStatus.Failure;
            }

            var result = string.Empty;

            if (stepResults.Status == StepStatus.Success)
            {
                switch (Type)
                {
                case HashTypes.None:
                    stepResults.Message = $"{Name}: A hash type was not selected.";
                    stepResults.Status  = StepStatus.Failure;
                    break;

                case HashTypes.SHA1:
                    result = await SHA1Hash.ComputeHashAsync(File.OpenRead(variableCache[Variable].ToString()), progress);

                    if (Hash != result)
                    {
                        stepResults.Message = $"Expected {Hash} but got {result} instead.\r\n" + Common.ProcessVariableTokens(InvalidMessage, variableCache);
                        stepResults.Status  = StepStatus.Failure;
                    }
                    break;

                case HashTypes.SHA256:
                    result = await SHA256Hash.ComputeHashAsync(File.OpenRead(variableCache[Variable].ToString()), progress);

                    if (Hash != result)
                    {
                        stepResults.Message = $"Expected {Hash} but got {result} instead.\r\n" + Common.ProcessVariableTokens(InvalidMessage, variableCache);
                        stepResults.Status  = StepStatus.Failure;
                    }
                    break;
                }
            }

            progress.Report(progressReport);
            return(stepResults);
        }