From 60e96572ffe5f050c389a20b76d5596a813f1d6a Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 19:34:49 -0600 Subject: [PATCH] Always refresh token, regardless of expiration date. --- Source/AudibleUtilities/Mkb79Auth.cs | 49 +++++++++++++--------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/Source/AudibleUtilities/Mkb79Auth.cs b/Source/AudibleUtilities/Mkb79Auth.cs index ec0f0520..7aff3840 100644 --- a/Source/AudibleUtilities/Mkb79Auth.cs +++ b/Source/AudibleUtilities/Mkb79Auth.cs @@ -45,7 +45,6 @@ namespace AudibleUtilities [JsonProperty("activation_bytes")] public string ActivationBytes { get; private set; } - [JsonIgnore] public Dictionary WebsiteCookies { @@ -67,7 +66,6 @@ namespace AudibleUtilities private set => _expires = new DateTimeOffset(value).ToUnixTimeMilliseconds() / 1000d; } - [JsonIgnore] public ISystemDateTime SystemDateTime { get; } = new SystemDateTime(); [JsonIgnore] public Locale Locale => Localization.Get(LocaleCode); [JsonIgnore] public string DeviceSerialNumber => DeviceInfo.DeviceSerialNumber; @@ -83,11 +81,6 @@ namespace AudibleUtilities public Task GetPrivateKeyAsync() => Task.FromResult(new PrivateKey(DevicePrivateKey)); } - public partial class StoreAuthenticationCookie - { - [JsonProperty("cookie")] - public string Cookie { get; set; } - } public partial class CustomerInfo { @@ -124,31 +117,36 @@ namespace AudibleUtilities public static Mkb79Auth FromJson(string json) => JsonConvert.DeserializeObject(json, Converter.Settings); + public string ToJson() + => JObject.Parse(JsonConvert.SerializeObject(this, Converter.Settings)).ToString(Formatting.Indented); + public async Task ToAccountAsync() { - var api = new Api(this); - - if ((DateTime.Now - AccessTokenExpires).TotalMinutes >= 59) - { - var authorize = new Authorize(Locale); - var newToken = await authorize.RefreshAccessTokenAsync(new RefreshToken(RefreshToken)); - AccessToken = newToken.TokenValue; - AccessTokenExpires = newToken.Expires; - } - - var email = await api.GetEmailAsync(); - var account = new Account(email); - var privateKey = await GetPrivateKeyAsync(); var adpToken = await GetAdpTokenAsync(); var accessToken = await GetAccessTokenAsync(); + var refreshToken = new RefreshToken(RefreshToken); var cookies = WebsiteCookies.Select(c => new KeyValuePair(c.Key, c.Value)); - account.IdentityTokens = new Identity(Locale); + var authorize = new Authorize(Locale); + var newToken = await authorize.RefreshAccessTokenAsync(refreshToken); + AccessToken = newToken.TokenValue; + AccessTokenExpires = newToken.Expires; + + var api = new Api(this); + var email = await api.GetEmailAsync(); + var account = new Account(email) + { + DecryptKey = ActivationBytes, + AccountName = $"{email} - {Locale.Name}", + IdentityTokens = new Identity(Locale) + }; + account.IdentityTokens.Update( privateKey, - adpToken, accessToken, - new RefreshToken(RefreshToken), + adpToken, + accessToken, + refreshToken, cookies, DeviceSerialNumber, DeviceType, @@ -156,9 +154,6 @@ namespace AudibleUtilities DeviceInfo.DeviceName, StoreAuthenticationCookie); - account.DecryptKey = ActivationBytes; - account.AccountName = $"{email} - {Locale.Name}"; - return account; } @@ -185,7 +180,7 @@ namespace AudibleUtilities DevicePrivateKey = account.IdentityTokens.PrivateKey, AccessTokenExpires = account.IdentityTokens.ExistingAccessToken.Expires, LocaleCode = account.Locale.CountryCode, - RefreshToken = account.IdentityTokens.RefreshToken.Value, + RefreshToken = account.IdentityTokens.RefreshToken.Value, StoreAuthenticationCookie = account.IdentityTokens.StoreAuthenticationCookie, WebsiteCookies = new(account.IdentityTokens.Cookies.ToKeyValuePair()), };