diff --git a/src/Tgstation.Server.Client/ApiClient.cs b/src/Tgstation.Server.Client/ApiClient.cs index 8107fc1913..452bcf1e23 100644 --- a/src/Tgstation.Server.Client/ApiClient.cs +++ b/src/Tgstation.Server.Client/ApiClient.cs @@ -21,7 +21,11 @@ namespace Tgstation.Server.Client public Uri Url { get; } /// - public ApiHeaders Headers { get; } + public ApiHeaders Headers + { + get => headers; + set => headers = value ?? throw new InvalidOperationException("Cannot set null headers!"); + } /// public TimeSpan Timeout @@ -40,6 +44,11 @@ namespace Tgstation.Server.Client /// readonly List requestLoggers; + /// + /// Backing field for + /// + ApiHeaders headers; + /// /// Construct an /// @@ -50,7 +59,7 @@ namespace Tgstation.Server.Client { this.httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient)); Url = url ?? throw new ArgumentNullException(nameof(url)); - Headers = apiHeaders ?? throw new ArgumentNullException(nameof(apiHeaders)); + headers = apiHeaders ?? throw new ArgumentNullException(nameof(apiHeaders)); requestLoggers = new List(); } @@ -89,7 +98,7 @@ namespace Tgstation.Server.Client if (body != null) message.Content = new StringContent(JsonConvert.SerializeObject(body, serializerSettings), Encoding.UTF8, ApiHeaders.ApplicationJson); - Headers.SetRequestHeaders(message.Headers, instanceId); + headers.SetRequestHeaders(message.Headers, instanceId); await Task.WhenAll(requestLoggers.Select(x => x.LogRequest(message, cancellationToken))).ConfigureAwait(false); diff --git a/src/Tgstation.Server.Client/IApiClient.cs b/src/Tgstation.Server.Client/IApiClient.cs index 48c7d93234..7eb8538156 100644 --- a/src/Tgstation.Server.Client/IApiClient.cs +++ b/src/Tgstation.Server.Client/IApiClient.cs @@ -10,7 +10,7 @@ namespace Tgstation.Server.Client /// interface IApiClient : IDisposable { - ApiHeaders Headers { get; } + ApiHeaders Headers { get; set; } Uri Url { get; } diff --git a/src/Tgstation.Server.Client/IServerClient.cs b/src/Tgstation.Server.Client/IServerClient.cs index bab14898f7..9432ea9afd 100644 --- a/src/Tgstation.Server.Client/IServerClient.cs +++ b/src/Tgstation.Server.Client/IServerClient.cs @@ -16,9 +16,9 @@ namespace Tgstation.Server.Client Uri Url { get; } /// - /// The being used to access the server + /// The used to access the server /// - Token Token { get; } + Token Token { get; set; } /// /// The connection timeout diff --git a/src/Tgstation.Server.Client/ServerClient.cs b/src/Tgstation.Server.Client/ServerClient.cs index de049e6aa5..4eac7213cc 100644 --- a/src/Tgstation.Server.Client/ServerClient.cs +++ b/src/Tgstation.Server.Client/ServerClient.cs @@ -13,7 +13,15 @@ namespace Tgstation.Server.Client public Uri Url => apiClient.Url; /// - public Token Token { get; } + public Token Token + { + get => token; + set + { + token = value ?? throw new InvalidOperationException("Cannot set a null Token!"); + apiClient.Headers = new ApiHeaders(apiClient.Headers.UserAgent, token.Bearer); + } + } /// public TimeSpan Timeout @@ -36,6 +44,11 @@ namespace Tgstation.Server.Client /// readonly IApiClient apiClient; + /// + /// Backing field for + /// + Token token; + /// /// Construct a /// @@ -44,7 +57,7 @@ namespace Tgstation.Server.Client public ServerClient(IApiClient apiClient, Token token) { this.apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient)); - Token = token ?? throw new ArgumentNullException(nameof(token)); + this.token = token ?? throw new ArgumentNullException(nameof(token)); if (Token.Bearer != apiClient.Headers.Token) throw new ArgumentOutOfRangeException(nameof(token), token, "Provided token does not match apiClient headers!"); diff --git a/src/Tgstation.Server.Client/Tgstation.Server.Client.csproj b/src/Tgstation.Server.Client/Tgstation.Server.Client.csproj index 9ebd873506..a3fb7a256e 100644 --- a/src/Tgstation.Server.Client/Tgstation.Server.Client.csproj +++ b/src/Tgstation.Server.Client/Tgstation.Server.Client.csproj @@ -3,7 +3,7 @@ netstandard2.0 Full - 4.0.1 + 4.0.2 true Cyberboss /tg/station 13 @@ -16,7 +16,7 @@ https://raw.githubusercontent.com/tgstation/tgstation-server/master/build/tgs.ico https://github.com/tgstation/tgstation-server/blob/master/LICENSE json web api tgstation-server tgstation ss13 byond client - Initial release + Added the ability to change the Token of IServerClient 2018