From d7173e3c5fa49c8698c8ad325ce8b5c5cbe4ccfb Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 11 Jan 2019 15:14:25 -0500 Subject: [PATCH] Empty `User-Agent`s are still invalid --- src/Tgstation.Server.Api/ApiHeaders.cs | 5 ++++- tests/Tgstation.Server.Api.Tests/TestApiHeaders.cs | 14 +++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Tgstation.Server.Api/ApiHeaders.cs b/src/Tgstation.Server.Api/ApiHeaders.cs index abaccef4f4..6128de76be 100644 --- a/src/Tgstation.Server.Api/ApiHeaders.cs +++ b/src/Tgstation.Server.Api/ApiHeaders.cs @@ -144,6 +144,10 @@ namespace Tgstation.Server.Api if (!requestHeaders.Headers.TryGetValue(HeaderNames.UserAgent, out var userAgentValues) || userAgentValues.Count == 0) throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Missing {0} headers!", HeaderNames.UserAgent)); + RawUserAgent = userAgentValues.First(); + if (String.IsNullOrWhiteSpace(RawUserAgent)) + throw new InvalidOperationException("Malformed client User-Agent!"); + // make sure the api header matches ours if (!requestHeaders.Headers.TryGetValue(ApiVersionHeader, out var apiUserAgentHeaderValues) || !ProductInfoHeaderValue.TryParse(apiUserAgentHeaderValues.FirstOrDefault(), out var apiUserAgent) || apiUserAgent.Product.Name != AssemblyName.Name) throw new InvalidOperationException("Missing API version!"); @@ -152,7 +156,6 @@ namespace Tgstation.Server.Api throw new InvalidOperationException("Malformed API version!"); ApiVersion = apiVersion; - RawUserAgent = userAgentValues.First(); if (!requestHeaders.Headers.TryGetValue(HeaderNames.Authorization, out StringValues authorization)) throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Missing {0} header!", HeaderNames.Authorization)); diff --git a/tests/Tgstation.Server.Api.Tests/TestApiHeaders.cs b/tests/Tgstation.Server.Api.Tests/TestApiHeaders.cs index fd91e30a27..5420a0fb29 100644 --- a/tests/Tgstation.Server.Api.Tests/TestApiHeaders.cs +++ b/tests/Tgstation.Server.Api.Tests/TestApiHeaders.cs @@ -30,11 +30,13 @@ namespace Tgstation.Server.Api.Tests ApiHeaders TestHeader(string userAgent) { - var headers = new HeaderDictionary(); - headers.Add("Accept", ApiHeaders.ApplicationJson); - headers.Add("Api", "Tgstation.Server.Api/4.0.0.0"); - headers.Add("Authorization", "Bearer asdfasdf"); - headers.Add("User-Agent", userAgent); + var headers = new HeaderDictionary + { + { "Accept", ApiHeaders.ApplicationJson }, + { "Api", "Tgstation.Server.Api/4.0.0.0" }, + { "Authorization", "Bearer asdfasdf" }, + { "User-Agent", userAgent } + }; return new ApiHeaders(new RequestHeaders(headers)); }; @@ -46,6 +48,8 @@ namespace Tgstation.Server.Api.Tests header = TestHeader(ConformantHeader); Assert.AreEqual(ConformantHeader, header.RawUserAgent); Assert.IsNotNull(header.UserAgent); + + Assert.ThrowsException(() => TestHeader(String.Empty)); } } }