using System.IdentityModel.Tokens.Jwt; using System.Text; using Microsoft.IdentityModel.Tokens; using MoonCore.Attributes; using MoonCore.Helpers; using MoonCore.Models; using MoonlightServers.Daemon.Configuration; using MoonlightServers.DaemonShared.PanelSide.Http.Responses; namespace MoonlightServers.Daemon.Services; [Singleton] public class RemoteService { private readonly HttpApiClient ApiClient; public RemoteService(AppConfiguration configuration) { ApiClient = CreateHttpClient(configuration); } public async Task GetStatus() { await ApiClient.Get("api/remote/servers/node/trip"); } public async Task> GetServers(int page, int perPage) { return await ApiClient.GetJson>( $"api/remote/servers?page={page}&pageSize={perPage}" ); } public async Task GetServer(int serverId) { return await ApiClient.GetJson( $"api/remote/servers/{serverId}" ); } public async Task GetServerInstallation(int serverId) { return await ApiClient.GetJson( $"api/remote/servers/{serverId}/install" ); } #region Helpers private HttpApiClient CreateHttpClient(AppConfiguration configuration) { var formattedUrl = configuration.Remote.Url.EndsWith('/') ? configuration.Remote.Url : configuration.Remote.Url + "/"; var httpClient = new HttpClient() { BaseAddress = new Uri(formattedUrl) }; httpClient.DefaultRequestHeaders.Add( "Authorization", $"Bearer {configuration.Security.TokenId}.{configuration.Security.Token}" ); return new HttpApiClient(httpClient); } #endregion }