Select Git revision
Login.cs 3.61 KiB
using System.Net;
using System.Net.Http.Headers;
using Lightquark.NET.Objects.Reply;
using Newtonsoft.Json;
namespace Lightquark.NET;
public partial class Client
{
private Timer? _refreshTimer;
public async Task<(bool success, string error, string? accessToken, string? refreshToken)> AcquireToken(string email, string password)
{
try
{
var finalUri = new Uri(new Uri(NetworkInformation!.BaseUrl!), $"{Version}/auth/token");
Console.WriteLine($"{finalUri}");
var res = await _httpClient.PostAsync(finalUri, new StringContent(JsonConvert.SerializeObject(new
{
email, password
}), new MediaTypeHeaderValue("application/json")));
var parsedRes = JsonConvert.DeserializeObject<Reply<AuthReplyResponse>>(await res.Content.ReadAsStringAsync());
if (parsedRes == null)
{
throw new Exception("Parsing failure");
}
switch (res.StatusCode)
{
case HttpStatusCode.OK:
UseToken(parsedRes.Response.AccessToken!, parsedRes.Response.RefreshToken!);
return (true, string.Empty, AccessToken, RefreshToken);
case HttpStatusCode.BadRequest:
case HttpStatusCode.Forbidden:
return (false, parsedRes.Response.Message, null, null);
default:
return (false, $"Unknown problem logging in {res.StatusCode}", null, null);
}
}
catch (Exception ex)
{
return (false, $"Failed to log in ({ex.Message})", null, null);
}
}
public void UseToken(string? accessToken, string refreshToken)
{
RefreshToken = refreshToken;
AccessToken = accessToken;
}
private async void AcquireToken(object? state = null)
{
Console.WriteLine($"Refreshing token {AccessToken} {RefreshToken}");
try
{
var finalUri = new Uri(new Uri(NetworkInformation!.BaseUrl!), $"{Version}/auth/refresh");
Console.WriteLine($"{finalUri}");
var res = await _httpClient.PostAsync(finalUri, new StringContent(JsonConvert.SerializeObject(new
{
accessToken = AccessToken, refreshToken = RefreshToken
}), new MediaTypeHeaderValue("application/json")));
var parsedRes = JsonConvert.DeserializeObject<Reply<RefreshReplyResponse>>(await res.Content.ReadAsStringAsync());
if (parsedRes == null)
{
throw new Exception("Parsing failure");