using System.IO; using System.Threading; using System.Threading.Tasks; using FModel.ViewModels.ApiEndpoints.Models; using RestSharp; using Serilog; namespace FModel.ViewModels.ApiEndpoints { public class BenbotApiEndpoint : AbstractApiProvider { public BenbotApiEndpoint(IRestClient client) : base(client) { } public async Task GetAesKeysAsync(CancellationToken token) { var request = new RestRequest("https://benbot.app/api/v2/aes", Method.GET) { OnBeforeDeserialization = resp => { resp.ContentType = "application/json; charset=utf-8"; } }; var response = await _client.ExecuteAsync(request, token).ConfigureAwait(false); Log.Information("[{Method}] [{Status}({StatusCode})] '{Resource}'", request.Method, response.StatusDescription, (int) response.StatusCode, request.Resource); return response.Data; } public AesResponse GetAesKeys(CancellationToken token) { return GetAesKeysAsync(token).GetAwaiter().GetResult(); } public async Task GetMappingsAsync(CancellationToken token) { var request = new RestRequest("https://benbot.app/api/v1/mappings", Method.GET) { OnBeforeDeserialization = resp => { resp.ContentType = "application/json; charset=utf-8"; } }; var response = await _client.ExecuteAsync(request, token).ConfigureAwait(false); Log.Information("[{Method}] [{Status}({StatusCode})] '{Resource}'", request.Method, response.StatusDescription, (int) response.StatusCode, request.Resource); return response.Data; } public MappingsResponse[] GetMappings(CancellationToken token) { return GetMappingsAsync(token).GetAwaiter().GetResult(); } public async Task DownloadFileAsync(string fileLink, string installationPath) { var request = new RestRequest(fileLink, Method.GET); var data = _client.DownloadData(request); await File.WriteAllBytesAsync(installationPath, data); } public void DownloadFile(string fileLink, string installationPath) { DownloadFileAsync(fileLink, installationPath).GetAwaiter().GetResult(); } } }