From 6745d9a07bab834bdc811a90003a9c9e3d2dd3f6 Mon Sep 17 00:00:00 2001 From: Erwin van Hunen Date: Wed, 4 Dec 2024 11:15:39 +0100 Subject: [PATCH] moved from cachesettings.json to settings.json --- src/Commands/Base/PnPConnection.cs | 66 ++++++++++------------------ src/Commands/Model/Settings.cs | 69 ++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 44 deletions(-) create mode 100644 src/Commands/Model/Settings.cs diff --git a/src/Commands/Base/PnPConnection.cs b/src/Commands/Base/PnPConnection.cs index 9735631f7..61663d77f 100644 --- a/src/Commands/Base/PnPConnection.cs +++ b/src/Commands/Base/PnPConnection.cs @@ -1046,32 +1046,28 @@ private static async Task MSALCacheHelper(ITokenCache tokenCache, string url, st internal static bool CacheEnabled(string url, string clientid) { - var configFile = Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell", "cachesettings.json"); - if (System.IO.File.Exists(configFile)) + var settings = Settings.Current; + + var cacheEntries = settings.Cache; + var urls = GetCheckUrls(url); + var entry = settings.Cache?.FirstOrDefault(c => urls.Contains(c.Url) && c.ClientId == clientid); + if (entry != null && entry.Enabled) { - var configs = JsonSerializer.Deserialize>(System.IO.File.ReadAllText(configFile)); - var urls = GetCheckUrls(url); - var entry = configs.FirstOrDefault(c => urls.Contains(c.Url) && c.ClientId == clientid); - if (entry != null && entry.Enabled) - { - return true; - } + return true; } return false; } internal static string GetCacheClientId(string url) { - var configFile = Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell", "cachesettings.json"); - if (System.IO.File.Exists(configFile)) + var settings = Settings.Current; + + var cacheEntries = settings.Cache; + var urls = GetCheckUrls(url); + var entry = settings.Cache?.FirstOrDefault(c => urls.Contains(c.Url)); + if (entry != null && entry.Enabled) { - var configs = JsonSerializer.Deserialize>(System.IO.File.ReadAllText(configFile)); - var urls = GetCheckUrls(url); - var entry = configs.FirstOrDefault(c => urls.Contains(c.Url)); - if (entry != null && entry.Enabled) - { - return entry.ClientId; - } + return entry.ClientId; } return null; } @@ -1091,21 +1087,8 @@ private static List GetCheckUrls(string url) private static void EnableCaching(string url, string clientid) { - bool folderExists = System.IO.Directory.Exists(Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell")); - if (!folderExists) - { - System.IO.Directory.CreateDirectory(Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell")); - } - - var configFile = Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell", "cachesettings.json"); - var configs = new List(); - if (System.IO.File.Exists(configFile)) - { - configs = JsonSerializer.Deserialize>(System.IO.File.ReadAllText(configFile)); - } - var urls = GetCheckUrls(url); - var entry = configs.FirstOrDefault(c => urls.Contains(c.Url) && c.ClientId == clientid); + var entry = Settings.Current.Cache?.FirstOrDefault(c => urls.Contains(c.Url) && c.ClientId == clientid); if (entry != null) { entry.Enabled = true; @@ -1114,9 +1097,9 @@ private static void EnableCaching(string url, string clientid) { var baseAuthority = new Uri(url).Authority.Replace("-admin.sharepoint.com", ".sharepoint.com").Replace("-my.sharepoint.com", ".sharepoint.com"); var baseUrl = $"https://{baseAuthority}"; - configs.Add(new TokenCacheConfiguration() { ClientId = clientid, Url = baseUrl, Enabled = true }); + Settings.Current.Cache.Add(new TokenCacheConfiguration() { ClientId = clientid, Url = baseUrl, Enabled = true }); } - System.IO.File.WriteAllText(configFile, JsonSerializer.Serialize(configs)); + Settings.Current.Save(); } private static void WriteCacheEnabledMessage(PSHost host) @@ -1126,17 +1109,12 @@ private static void WriteCacheEnabledMessage(PSHost host) internal static void ClearCache(PnPConnection connection) { - var configFile = Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell", "cachesettings.json"); - if (System.IO.File.Exists(configFile)) + var urls = GetCheckUrls(connection.Url); + var entry = Settings.Current.Cache?.FirstOrDefault(c => urls.Contains(c.Url) && c.ClientId == connection.ClientId); + if (entry != null) { - var configs = JsonSerializer.Deserialize>(System.IO.File.ReadAllText(configFile)); - var urls = GetCheckUrls(connection.Url); - var entry = configs.FirstOrDefault(c => urls.Contains(c.Url) && c.ClientId == connection.ClientId); - if (entry != null) - { - configs.Remove(entry); - System.IO.File.WriteAllText(configFile, JsonSerializer.Serialize(configs)); - } + Settings.Current.Cache.Remove(entry); + Settings.Current.Save(); } if (connection.AuthenticationManager != null) { diff --git a/src/Commands/Model/Settings.cs b/src/Commands/Model/Settings.cs new file mode 100644 index 000000000..46fe5bbd9 --- /dev/null +++ b/src/Commands/Model/Settings.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using System.IO; +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Graph; +using Microsoft.Identity.Client.Extensions.Msal; + +namespace PnP.PowerShell.Commands.Model +{ + public class Settings + { + private static Settings _settings; + + [JsonPropertyName("Cache")] + private List _cache { get; set; } + public List Cache + { + get + { + if (_cache == null) + { + _cache = new List(); + } + return _cache; + } + set + { + _cache = value; + } + } + + //public string LastUsedTenant { get; set; } + + public static Settings Current + { + get + { + if (_settings == null) + { + // try to load settings + var settingsFile = Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell", "settings.json"); + if (System.IO.File.Exists(settingsFile)) + { + _settings = JsonSerializer.Deserialize(System.IO.File.ReadAllText(settingsFile)); ; + } + else + { + _settings = new Settings(); + } + } + return _settings; + } + } + + public void Save() + { + if (_settings != null) + { + var settingsFile = Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell", "settings.json"); + if (!System.IO.Directory.Exists(Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell"))) + { + System.IO.Directory.CreateDirectory(Path.Combine(MsalCacheHelper.UserRootDirectory, ".m365pnppowershell")); + } + var json = JsonSerializer.Serialize(_settings); + System.IO.File.WriteAllText(settingsFile, json); + } + } + } +} \ No newline at end of file