diff --git a/BaseSpace.SDK.Tests/BaseSpace.SDK.Tests.csproj b/BaseSpace.SDK.Tests/BaseSpace.SDK.Tests.csproj index 247d7d1..02b4b88 100644 --- a/BaseSpace.SDK.Tests/BaseSpace.SDK.Tests.csproj +++ b/BaseSpace.SDK.Tests/BaseSpace.SDK.Tests.csproj @@ -71,6 +71,7 @@ + diff --git a/BaseSpace.SDK.Tests/BaseSpaceClientSettingsTests.cs b/BaseSpace.SDK.Tests/BaseSpaceClientSettingsTests.cs new file mode 100644 index 0000000..c1fd45e --- /dev/null +++ b/BaseSpace.SDK.Tests/BaseSpaceClientSettingsTests.cs @@ -0,0 +1,15 @@ +using Xunit; + +namespace Illumina.BaseSpace.SDK.Tests +{ + public class BaseSpaceClientSettingsTests + { + [Fact] + public void CanGetDefaultUserAgent() + { + var settings = new BaseSpaceClientSettings(); + + Assert.True(!string.IsNullOrWhiteSpace(settings.UserAgent)); + } + } +} diff --git a/BaseSpace.SDK/Infrastructure/BaseSpaceClientSettings.cs b/BaseSpace.SDK/Infrastructure/BaseSpaceClientSettings.cs index 9489b5e..48f6b69 100644 --- a/BaseSpace.SDK/Infrastructure/BaseSpaceClientSettings.cs +++ b/BaseSpace.SDK/Infrastructure/BaseSpaceClientSettings.cs @@ -1,7 +1,12 @@ -namespace Illumina.BaseSpace.SDK +using System.Diagnostics; +using System.Reflection; + +namespace Illumina.BaseSpace.SDK { public class BaseSpaceClientSettings : IClientSettings { + private static readonly string SDK_VERSION; + public const uint DEFAULT_RETRY_ATTEMPTS = 6; public const string DEFAULT_WEBSITE = "https://basespace.illumina.com"; @@ -17,6 +22,13 @@ public class BaseSpaceClientSettings : IClientSettings public const uint DEFAULT_MULTIPART_SIZE_THRESHOLD = 25*1024*1024; //in bytes + static BaseSpaceClientSettings() + { + var assembly = Assembly.GetExecutingAssembly(); + var fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); + SDK_VERSION = fileVersionInfo.ProductVersion; + } + public BaseSpaceClientSettings() { RetryAttempts = DEFAULT_RETRY_ATTEMPTS; @@ -26,8 +38,8 @@ public BaseSpaceClientSettings() Version = DEFAULT_VERSION; FileUploadMultipartSizeThreshold = DEFAULT_MULTIPART_SIZE_THRESHOLD; FileUploadMultipartChunkSize = DEFAULT_UPLOAD_MULTIPART_SIZE; - FileDownloadMultipartSizeThreshold = DEFAULT_DOWNLOAD_MULTIPART_SIZE; + UserAgent = GetDefaultUserAgent(); } public uint RetryAttempts { get; set; } @@ -49,5 +61,12 @@ public BaseSpaceClientSettings() public IAuthentication Authentication { get; set; } public int TimeoutMin { get; set; } + + public string UserAgent { get; set; } + + private static string GetDefaultUserAgent() + { + return string.Format("Illumina BaseSpace C# SDK {0}", SDK_VERSION); + } } } diff --git a/BaseSpace.SDK/Infrastructure/JsonWebClient.cs b/BaseSpace.SDK/Infrastructure/JsonWebClient.cs index 440c5f4..19c9176 100644 --- a/BaseSpace.SDK/Infrastructure/JsonWebClient.cs +++ b/BaseSpace.SDK/Infrastructure/JsonWebClient.cs @@ -150,6 +150,11 @@ private void WebRequestFilter(HttpWebRequest req) { settings.Authentication.UpdateHttpHeader(req); } + + if (!string.IsNullOrWhiteSpace(settings.UserAgent)) + { + req.UserAgent = settings.UserAgent; + } } } } \ No newline at end of file diff --git a/BaseSpace.SDK/Interfaces/IClientSettings.cs b/BaseSpace.SDK/Interfaces/IClientSettings.cs index 734a168..444c732 100644 --- a/BaseSpace.SDK/Interfaces/IClientSettings.cs +++ b/BaseSpace.SDK/Interfaces/IClientSettings.cs @@ -20,5 +20,7 @@ public interface IClientSettings IAuthentication Authentication { get; } int TimeoutMin { get; } + + string UserAgent { get; set; } } }