2021-09-27 12:42:46 +00:00
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Net.Http;
|
|
|
|
using System.Text.Json;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
using Wabbajack.DTOs;
|
|
|
|
using Wabbajack.DTOs.Logins;
|
|
|
|
using Wabbajack.Networking.Http.Interfaces;
|
|
|
|
using Wabbajack.Networking.NexusApi.DTOs;
|
|
|
|
using Wabbajack.RateLimiter;
|
2023-10-12 18:33:06 +00:00
|
|
|
using ClientConfiguration = Wabbajack.Networking.WabbajackClientApi.Configuration;
|
2021-09-27 12:42:46 +00:00
|
|
|
|
2021-10-23 16:51:17 +00:00
|
|
|
namespace Wabbajack.Networking.NexusApi;
|
|
|
|
|
|
|
|
public class ProxiedNexusApi : NexusApi
|
2021-09-27 12:42:46 +00:00
|
|
|
{
|
2021-10-23 16:51:17 +00:00
|
|
|
private readonly ITokenProvider<WabbajackApiState> _apiState;
|
2023-10-12 18:33:06 +00:00
|
|
|
private readonly ClientConfiguration _wabbajackClientConfiguration;
|
2021-09-27 12:42:46 +00:00
|
|
|
|
2021-10-23 16:51:17 +00:00
|
|
|
public HashSet<string> ProxiedEndpoints = new()
|
|
|
|
{
|
|
|
|
Endpoints.ModInfo,
|
|
|
|
Endpoints.ModFiles,
|
|
|
|
Endpoints.ModFile
|
|
|
|
};
|
2021-09-27 12:42:46 +00:00
|
|
|
|
2021-10-23 16:51:17 +00:00
|
|
|
public ProxiedNexusApi(ITokenProvider<NexusApiState> apiKey, ILogger<ProxiedNexusApi> logger, HttpClient client,
|
|
|
|
IResource<HttpClient> limiter,
|
|
|
|
ApplicationInfo appInfo, JsonSerializerOptions jsonOptions, ITokenProvider<WabbajackApiState> apiState,
|
2023-10-12 18:33:06 +00:00
|
|
|
ClientConfiguration wabbajackClientConfiguration)
|
2021-10-23 16:51:17 +00:00
|
|
|
: base(apiKey, logger, client, limiter, appInfo, jsonOptions)
|
|
|
|
{
|
|
|
|
_apiState = apiState;
|
|
|
|
_wabbajackClientConfiguration = wabbajackClientConfiguration;
|
|
|
|
}
|
2021-09-27 12:42:46 +00:00
|
|
|
|
2021-10-23 16:51:17 +00:00
|
|
|
protected override async ValueTask<HttpRequestMessage> GenerateMessage(HttpMethod method, string uri,
|
2022-10-07 22:57:12 +00:00
|
|
|
params object?[] parameters)
|
2021-10-23 16:51:17 +00:00
|
|
|
{
|
|
|
|
var msg = await base.GenerateMessage(method, uri, parameters);
|
|
|
|
if (ProxiedEndpoints.Contains(uri))
|
|
|
|
msg.RequestUri = new Uri($"https://build.wabbajack.org/{string.Format(uri, parameters)}");
|
|
|
|
msg.Headers.Add(_wabbajackClientConfiguration.MetricsKeyHeader, (await _apiState.Get())!.MetricsKey);
|
|
|
|
return msg;
|
|
|
|
}
|
2021-09-27 12:42:46 +00:00
|
|
|
|
2021-10-23 16:51:17 +00:00
|
|
|
protected override ResponseMetadata ParseHeaders(HttpResponseMessage result)
|
|
|
|
{
|
|
|
|
if (result.RequestMessage!.RequestUri!.Host == "build.wabbajack.org")
|
|
|
|
return new ResponseMetadata {IsReal = false};
|
|
|
|
return base.ParseHeaders(result);
|
2021-09-27 12:42:46 +00:00
|
|
|
}
|
|
|
|
}
|