beatsaber-scoretracker/Mod/API/Request.cs

54 lines
1.9 KiB
C#
Raw Normal View History

2024-08-07 04:19:39 +00:00
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace ScoreTracker.API
{
internal class Request
{
2024-08-07 07:26:12 +00:00
internal static readonly HttpClient HttpClient = new HttpClient();
2024-08-07 04:19:39 +00:00
/// <summary>
/// Persist the given headers for all future requests
/// </summary>
/// <param name="headers">the headers to persist</param>
public static void PersistHeaders(Dictionary<string, string> headers)
{
2024-08-07 07:26:12 +00:00
HttpClient.DefaultRequestHeaders.Clear(); // Clear existing headers
2024-08-07 04:19:39 +00:00
foreach (var header in headers)
{
2024-08-07 07:26:12 +00:00
HttpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
2024-08-07 04:19:39 +00:00
}
}
/// <summary>
/// Create a POST request to the given URL with the given data
/// </summary>
/// <param name="url">the url to post to</param>
/// <param name="data">the data to post</param>
/// <param name="checkAuth">whether to check for authentication</param>
/// <returns>the task</returns>
public static async Task<HttpResponseMessage> PostJsonAsync(string url, Dictionary<object, object> json, bool checkAuth = true)
{
if (checkAuth)
{
var authHelper = new AuthHelper();
await authHelper.EnsureLoggedIn();
if (!authHelper.IsLoggedIn)
{
throw new Exception($"Failed to log in: {authHelper.FailReason}");
}
}
var jsonString = JsonConvert.SerializeObject(json, Formatting.None);
var content = new StringContent(jsonString, Encoding.UTF8, "application/json");
// Send the POST request
2024-08-07 07:26:12 +00:00
var response = await HttpClient.PostAsync(url, content);
2024-08-07 04:19:39 +00:00
return response;
}
}
}