diff --git a/WotBlitzStatisticsPro.GraphQl/Query/WargamingAuthQuery.cs b/WotBlitzStatisticsPro.GraphQl/Query/WargamingAuthQuery.cs new file mode 100644 index 0000000..7c6ca5e --- /dev/null +++ b/WotBlitzStatisticsPro.GraphQl/Query/WargamingAuthQuery.cs @@ -0,0 +1,28 @@ +using HotChocolate.Types; +using System.Threading.Tasks; +using WotBlitzStatisticsPro.Common.Model; +using WotBlitzStatisticsPro.WgApiClient; + +namespace WotBlitzStatisticsPro.GraphQl.Query +{ + [ExtendObjectType(Name = "Query")] + public class WargamingAuthQuery + { + private readonly IWargamingAuthenticationClient _wargamingAuthenticationClient; + + public WargamingAuthQuery(IWargamingAuthenticationClient wargamingAuthenticationClient) + { + _wargamingAuthenticationClient = wargamingAuthenticationClient; + } + + /// + /// Returns authentication URL accourding Realm + /// + /// Wargaming Realm. + /// + public string LoginUrl(RealmType realmType) + { + return _wargamingAuthenticationClient.LoginUrl(realmType); + } + } +} diff --git a/WotBlitzStatisticsPro.GraphQl/Startup.cs b/WotBlitzStatisticsPro.GraphQl/Startup.cs index b1731c9..17a7541 100644 --- a/WotBlitzStatisticsPro.GraphQl/Startup.cs +++ b/WotBlitzStatisticsPro.GraphQl/Startup.cs @@ -90,6 +90,7 @@ namespace WotBlitzStatisticsPro.GraphQl .AddType() .AddType() .AddType() + .AddType() .AddMutationType(d => d.Name("Mutation")) .AddType() .AddType() diff --git a/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs b/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs index dee84f1..fed0a66 100644 --- a/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs +++ b/WotBlitzStatisticsPro.Logic/WotBlitzStatisticsLogicInstaller.cs @@ -29,6 +29,7 @@ namespace WotBlitzStatisticsPro.Logic services.AddHttpClient(); services.AddHttpClient(); services.AddHttpClient(); + services.AddHttpClient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/WotBlitzStatisticsPro.WgApiClient/IWargamingAuthenticationClient.cs b/WotBlitzStatisticsPro.WgApiClient/IWargamingAuthenticationClient.cs new file mode 100644 index 0000000..5f1c51a --- /dev/null +++ b/WotBlitzStatisticsPro.WgApiClient/IWargamingAuthenticationClient.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using WotBlitzStatisticsPro.Common.Model; + +namespace WotBlitzStatisticsPro.WgApiClient +{ + public interface IWargamingAuthenticationClient + { + string LoginUrl(RealmType realm); + } +} diff --git a/WotBlitzStatisticsPro.WgApiClient/WagramingApiClientBase.cs b/WotBlitzStatisticsPro.WgApiClient/WagramingApiClientBase.cs index e917fe9..25c52d6 100644 --- a/WotBlitzStatisticsPro.WgApiClient/WagramingApiClientBase.cs +++ b/WotBlitzStatisticsPro.WgApiClient/WagramingApiClientBase.cs @@ -47,7 +47,7 @@ namespace WotBlitzStatisticsPro.WgApiClient string method, params string[] queryParameters) where T: class { - string uri = GetUri(realmType, language, method, queryParameters); + string uri = GetBlitzUri(realmType, language, method, queryParameters); _httpClient.DefaultRequestHeaders.Accept.Clear(); _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); @@ -75,7 +75,23 @@ namespace WotBlitzStatisticsPro.WgApiClient } } - private string GetUri(RealmType realmType, RequestLanguage language, string method, string[] queryParameters) + protected string GetWotUri(RealmType realmType, string method, string[]? queryParameters) + { + var uri = new StringBuilder($"{_wotApiUrls[realmType]}{method}"); + uri.Append("?application_id=") + .Append(_wargamingApiSettings.ApplicationId); + if (queryParameters != null) + { + foreach (var param in queryParameters) + { + uri.Append("&") + .Append(param); + } + } + return uri.ToString(); + } + + private string GetBlitzUri(RealmType realmType, RequestLanguage language, string method, string[] queryParameters) { var uri = new StringBuilder($"{_blitzApiUrls[realmType]}{method}"); uri.Append("?application_id=") diff --git a/WotBlitzStatisticsPro.WgApiClient/WargamingApiClient.cs b/WotBlitzStatisticsPro.WgApiClient/WargamingApiClient.cs index 2e2ab6f..02bd27d 100644 --- a/WotBlitzStatisticsPro.WgApiClient/WargamingApiClient.cs +++ b/WotBlitzStatisticsPro.WgApiClient/WargamingApiClient.cs @@ -12,7 +12,8 @@ namespace WotBlitzStatisticsPro.WgApiClient public class WargamingApiClient : WagramingApiClientBase, IWargamingApiClient, IWargamingDictionariesApiClient, - IWargamingTanksApiClient + IWargamingTanksApiClient, + IWargamingAuthenticationClient { public WargamingApiClient( HttpClient httpClient, @@ -206,6 +207,13 @@ namespace WotBlitzStatisticsPro.WgApiClient $"account_id={accountId}").ConfigureAwait(false); return tanks?[accountId.ToString()] ?? new List(); } + #endregion + + #region Authentication + public string LoginUrl(RealmType realm) + { + return GetWotUri(realm, "auth/login/", null); + } #endregion }