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(); }