Fix backwards compatibility issues

This commit is contained in:
Jordan Brown
2022-09-27 00:41:24 -04:00
parent fcaea3e0fe
commit 80e6eb2b10
4 changed files with 19 additions and 16 deletions
+8 -3
View File
@@ -50,6 +50,11 @@ namespace Tgstation.Server.Api
/// </summary>
public const string OAuthAuthenticationScheme = "OAuth";
/// <summary>
/// Added to <see cref="MediaTypeNames.Application"/> in netstandard2.1. Can't use because of Tgstation.Server.Migrator.
/// </summary>
public const string ApplicationJsonMime = "application/json";
/// <summary>
/// Get the version of the <see cref="Api"/> the caller is using.
/// </summary>
@@ -167,9 +172,9 @@ namespace Tgstation.Server.Api
errorBuilder.Append(message);
}
var jsonAccept = new Microsoft.Net.Http.Headers.MediaTypeHeaderValue(MediaTypeNames.Application.Json);
var jsonAccept = new Microsoft.Net.Http.Headers.MediaTypeHeaderValue(ApplicationJsonMime);
if (!requestHeaders.Accept.Any(x => jsonAccept.IsSubsetOf(x)))
AddError(HeaderTypes.Accept, $"Client does not accept {MediaTypeNames.Application.Json}!");
AddError(HeaderTypes.Accept, $"Client does not accept {ApplicationJsonMime}!");
if (!requestHeaders.Headers.TryGetValue(HeaderNames.UserAgent, out var userAgentValues) || userAgentValues.Count == 0)
AddError(HeaderTypes.UserAgent, $"Missing {HeaderNames.UserAgent} header!");
@@ -306,7 +311,7 @@ namespace Tgstation.Server.Api
throw new InvalidOperationException("Specified different instance IDs in constructor and SetRequestHeaders!");
headers.Clear();
headers.Accept.Add(new MediaTypeWithQualityHeaderValue(MediaTypeNames.Application.Json));
headers.Accept.Add(new MediaTypeWithQualityHeaderValue(ApplicationJsonMime));
headers.UserAgent.Add(new ProductInfoHeaderValue(UserAgent));
headers.Add(ApiVersionHeader, new ProductHeaderValue(AssemblyName.Name, ApiVersion.ToString()).ToString());
if (OAuthProvider.HasValue)
+10 -4
View File
@@ -26,6 +26,12 @@ namespace Tgstation.Server.Client
/// <inheritdoc />
sealed class ApiClient : IApiClient
{
/// <summary>
/// PATCH <see cref="HttpMethod"/>.
/// </summary>
/// <remarks>HOW IS THIS NOT INCLUDED IN THE FRAMEWORK??!?!?</remarks>
static readonly HttpMethod HttpPatch = new ("PATCH");
/// <inheritdoc />
public Uri Url { get; }
@@ -77,7 +83,7 @@ namespace Tgstation.Server.Client
/// Get the <see cref="JsonSerializerSettings"/> to use.
/// </summary>
/// <returns>A new <see cref="JsonSerializerSettings"/> instance.</returns>
static JsonSerializerSettings GetSerializerSettings() => new JsonSerializerSettings
static JsonSerializerSettings GetSerializerSettings() => new ()
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new[] { new VersionConverter() },
@@ -171,7 +177,7 @@ namespace Tgstation.Server.Client
public Task<TResult> Update<TBody, TResult>(string route, TBody body, CancellationToken cancellationToken) where TBody : class => RunRequest<TBody, TResult>(route, body, HttpMethod.Post, null, false, cancellationToken);
/// <inheritdoc />
public Task Patch(string route, CancellationToken cancellationToken) => RunRequest<object>(route, null, HttpMethod.Patch, null, false, cancellationToken);
public Task Patch(string route, CancellationToken cancellationToken) => RunRequest<object>(route, null, HttpPatch, null, false, cancellationToken);
/// <inheritdoc />
public Task Update<TBody>(string route, TBody body, CancellationToken cancellationToken) where TBody : class => RunRequest<TBody, object>(route, body, HttpMethod.Post, null, false, cancellationToken);
@@ -204,7 +210,7 @@ namespace Tgstation.Server.Client
public Task<TResult> Create<TResult>(string route, long instanceId, CancellationToken cancellationToken) => RunRequest<object, TResult>(route, new object(), HttpMethod.Put, instanceId, false, cancellationToken);
/// <inheritdoc />
public Task<TResult> Patch<TResult>(string route, long instanceId, CancellationToken cancellationToken) => RunRequest<object, TResult>(route, new object(), HttpMethod.Patch, instanceId, false, cancellationToken);
public Task<TResult> Patch<TResult>(string route, long instanceId, CancellationToken cancellationToken) => RunRequest<object, TResult>(route, new object(), HttpPatch, instanceId, false, cancellationToken);
/// <inheritdoc />
public void AddRequestLogger(IRequestLogger requestLogger) => requestLoggers.Add(requestLogger ?? throw new ArgumentNullException(nameof(requestLogger)));
@@ -314,7 +320,7 @@ namespace Tgstation.Server.Client
content = new StringContent(
JsonConvert.SerializeObject(body, typeof(TBody), Formatting.None, GetSerializerSettings()),
Encoding.UTF8,
MediaTypeNames.Application.Json);
ApiHeaders.ApplicationJsonMime);
return RunRequest<TResult>(
route,
@@ -30,14 +30,6 @@ namespace Tgstation.Server.Client
return new CachedResponseStream(response, stream);
}
/// <inheritdoc />
public override async ValueTask DisposeAsync()
{
await base.DisposeAsync().ConfigureAwait(false);
await responseStream.DisposeAsync().ConfigureAwait(false);
response.Dispose();
}
/// <inheritdoc />
public override bool CanRead => responseStream.CanRead;
@@ -88,7 +88,7 @@ namespace Tgstation.Server.Client.Components
cancellationToken);
if (memoryStream != null)
await uploadStream!.CopyToAsync(memoryStream, cancellationToken).ConfigureAwait(false);
await uploadStream!.CopyToAsync(memoryStream).ConfigureAwait(false);
var configFile = await configFileTask.ConfigureAwait(false);