Ejemplo n.º 1
0
        public ValidationResult ValidateInput()
        {
            if (!string.IsNullOrWhiteSpace(FileHash))
            {
                if (!Hash.TryParse(FileHash, out var hash))
                {
                    return(new ValidationResult(Tx.T("TasksCommon:Utilities.FileSource.Errors.InvalidFileHash"), nameof(FileHash).Yield()));
                }

                using (var hashAlgorithm = HashAlgorithm.CreateHashAlgorithm())
                {
                    if (hash.HashData.Length != hashAlgorithm.HashSize / 8)
                    {
                        return(new ValidationResult(
                                   Tx.T("TasksCommon:Utilities.FileSource.Errors.InvalidHashSize", "algorithm", HashAlgorithm.ToString(), "expected",
                                        hashAlgorithm.HashSize.ToString(), "current", (FileHash.Length * 8).ToString()), nameof(FileHash).Yield()));
                    }
                }
            }

            if (string.IsNullOrWhiteSpace(LocalPath) && string.IsNullOrWhiteSpace(Url))
            {
                return(new ValidationResult(Tx.T("TasksCommon:Utilities.FileSource.Errors.NoFileSourceSelected"), new [] { nameof(Url), nameof(LocalPath) }));
            }

            if (!string.IsNullOrWhiteSpace(LocalPath) && !string.IsNullOrWhiteSpace(Url))
            {
                return(new ValidationResult(Tx.T("TasksCommon:Utilities.FileSource.Errors.OnlyOneSourceAllowed"), new[] { nameof(Url), nameof(LocalPath) }));
            }

            if (!string.IsNullOrWhiteSpace(LocalPath))
            {
                if (LocalPath == BinaryPlaceholder)
                {
                    if (_cachedFile != null)
                    {
                        return(ValidationResult.Success);
                    }

                    return(new ValidationResult(Tx.T("TasksCommon:Utilities.FileSource.Errors.NoCachedFileAvailable"), nameof(LocalPath).Yield()));
                }

                try
                {
                    if (!File.Exists(LocalPath))
                    {
                        return(new ValidationResult(Tx.T("TasksCommon:Utilities.FileSource.Errors.FileDoesNotExist"), nameof(LocalPath).Yield()));
                    }
                }
                catch (Exception)
                {
                    return(new ValidationResult(Tx.T("TasksCommon:Utilities.FileSource.Errors.InvalidLocalPath"), nameof(LocalPath).Yield()));
                }

                return(ValidationResult.Success);
            }

            if (!string.IsNullOrWhiteSpace(Url))
            {
                try
                {
                    var uri = new Uri(Url, UriKind.Absolute);
                    if (!string.Equals(uri.Scheme, "http", StringComparison.OrdinalIgnoreCase) &&
                        !string.Equals(uri.Scheme, "https", StringComparison.OrdinalIgnoreCase))
                    {
                        return(new ValidationResult(Tx.T("TasksCommon:Utilities.FileSource.Errors.UrlNotHttp"), nameof(Url).Yield()));
                    }

                    return(ValidationResult.Success);
                }
                catch (Exception)
                {
                    return(new ValidationResult(Tx.T("TasksCommon:Utilities.FileSource.Errors.InvalidUri"), nameof(Url).Yield()));
                }
            }

            throw new InvalidOperationException();
        }