using System; using System.IO; using LibationFileManager; using Newtonsoft.Json; namespace AudibleUtilities { public static class AudibleApiStorage { public static string AccountsSettingsFile => Path.Combine(Configuration.Instance.LibationFiles, "AccountsSettings.json"); public static void EnsureAccountsSettingsFileExists() { // saves. BEWARE: this will overwrite an existing file if (!File.Exists(AccountsSettingsFile)) _ = new AccountsSettingsPersister(new AccountsSettings(), AccountsSettingsFile); } /// If you use this, be a good citizen and DISPOSE of it public static AccountsSettingsPersister GetAccountsSettingsPersister() => new AccountsSettingsPersister(AccountsSettingsFile); public static string GetIdentityTokensJsonPath(this Account account) => GetIdentityTokensJsonPath(account.AccountId, account.Locale?.Name); public static string GetIdentityTokensJsonPath(string username, string localeName) { var usernameSanitized = trimSurroundingQuotes(JsonConvert.ToString(username)); var localeNameSanitized = trimSurroundingQuotes(JsonConvert.ToString(localeName)); return $"$.Accounts[?(@.AccountId == '{usernameSanitized}' && @.IdentityTokens.LocaleName == '{localeNameSanitized}')].IdentityTokens"; } private static string trimSurroundingQuotes(string str) { // SubString algo is better than .Trim("\"") // orig string " // json string "\"" // Eg: // => str.Trim("\"") // output \ // vs // => str.Substring(1, str.Length - 2) // output \" // also works with surrounding single quotes return str.Substring(1, str.Length - 2); } } }