diff --git a/src/sdk/PnP.Core.Auth/PnP.Core.Auth.csproj b/src/sdk/PnP.Core.Auth/PnP.Core.Auth.csproj
index e2d93ea40c..92549d9ea8 100644
--- a/src/sdk/PnP.Core.Auth/PnP.Core.Auth.csproj
+++ b/src/sdk/PnP.Core.Auth/PnP.Core.Auth.csproj
@@ -47,7 +47,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/src/sdk/PnP.Core.Test/Misc/CloudManagerTests.cs b/src/sdk/PnP.Core.Test/Misc/CloudManagerTests.cs
index ceac6a2864..2f1084ae24 100644
--- a/src/sdk/PnP.Core.Test/Misc/CloudManagerTests.cs
+++ b/src/sdk/PnP.Core.Test/Misc/CloudManagerTests.cs
@@ -21,7 +21,7 @@ public static void TestFixtureSetup(TestContext context)
[TestMethod()]
[DataRow("https://bertonline.sharepoint.com/sites/prov-2", Microsoft365Environment.Production)]
- [DataRow("https://bertonline.sharepoint.de/sites/prov-2", Microsoft365Environment.Germany)]
+ [DataRow("https://bertonline.sharepoint.de/sites/prov-2", Microsoft365Environment.DelosCloud)]
[DataRow("https://bertonline.sharepoint.cn/sites/prov-2", Microsoft365Environment.China)]
[DataRow("https://bertonline.sharepoint.us/sites/prov-2", Microsoft365Environment.USGovernment)]
[DataRow("https://bertonline.sharepoint.oops/sites/prov-2", Microsoft365Environment.Production)]
@@ -33,11 +33,13 @@ public void UriToMicrosoft365Environment(string url, Microsoft365Environment exp
[TestMethod()]
[DataRow("graph.microsoft.com", Microsoft365Environment.Production)]
[DataRow("graph.microsoft.com", Microsoft365Environment.PreProduction)]
- [DataRow("graph.microsoft.com", Microsoft365Environment.USGovernment)]
- [DataRow("graph.microsoft.de", Microsoft365Environment.Germany)]
+ [DataRow("graph.microsoft.com", Microsoft365Environment.USGovernment)]
[DataRow("microsoftgraph.chinacloudapi.cn", Microsoft365Environment.China)]
[DataRow("graph.microsoft.us", Microsoft365Environment.USGovernmentHigh)]
[DataRow("dod-graph.microsoft.us", Microsoft365Environment.USGovernmentDoD)]
+ [DataRow("graph.svc.sovcloud.fr", Microsoft365Environment.BleuCloud)]
+ [DataRow("graph.svc.sovcloud.de", Microsoft365Environment.DelosCloud)]
+ [DataRow("graph.svc.sovcloud.sg", Microsoft365Environment.GovSGCloud)]
public void Microsoft365EnvironmentToGraph(string graph, Microsoft365Environment env)
{
Assert.AreEqual(graph, CloudManager.GetMicrosoftGraphAuthority(env));
@@ -46,11 +48,13 @@ public void Microsoft365EnvironmentToGraph(string graph, Microsoft365Environment
[TestMethod()]
[DataRow("login.microsoftonline.com", Microsoft365Environment.Production)]
[DataRow("login.windows-ppe.net", Microsoft365Environment.PreProduction)]
- [DataRow("login.microsoftonline.com", Microsoft365Environment.USGovernment)]
- [DataRow("login.microsoftonline.de", Microsoft365Environment.Germany)]
+ [DataRow("login.microsoftonline.com", Microsoft365Environment.USGovernment)]
[DataRow("login.chinacloudapi.cn", Microsoft365Environment.China)]
[DataRow("login.microsoftonline.us", Microsoft365Environment.USGovernmentHigh)]
[DataRow("login.microsoftonline.us", Microsoft365Environment.USGovernmentDoD)]
+ [DataRow("login.sovcloud-identity.fr", Microsoft365Environment.BleuCloud)]
+ [DataRow("login.sovcloud-identity.de", Microsoft365Environment.DelosCloud)]
+ [DataRow("login.sovcloud-identity.sg", Microsoft365Environment.GovSGCloud)]
public void Microsoft365EnvironmentToAzureADLogin(string azureADLogin, Microsoft365Environment env)
{
Assert.AreEqual(azureADLogin, CloudManager.GetAzureADLoginAuthority(env));
@@ -73,10 +77,7 @@ public async Task Microsoft365EnvironmentToGraphUri()
Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://graph.microsoft.com"));
context.Environment = Microsoft365Environment.USGovernment;
- Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://graph.microsoft.com"));
-
- context.Environment = Microsoft365Environment.Germany;
- Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://graph.microsoft.de"));
+ Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://graph.microsoft.com"));
context.Environment = Microsoft365Environment.China;
Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://microsoftgraph.chinacloudapi.cn"));
@@ -87,6 +88,15 @@ public async Task Microsoft365EnvironmentToGraphUri()
context.Environment = Microsoft365Environment.USGovernmentDoD;
Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://dod-graph.microsoft.us"));
+ context.Environment = Microsoft365Environment.BleuCloud;
+ Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://graph.svc.sovcloud.fr"));
+
+ context.Environment = Microsoft365Environment.DelosCloud;
+ Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://graph.svc.sovcloud.de"));
+
+ context.Environment = Microsoft365Environment.GovSGCloud;
+ Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://graph.svc.sovcloud.sg"));
+
context.Environment = Microsoft365Environment.Custom;
context.MicrosoftGraphAuthority = "graph.microsoft.be";
Assert.AreEqual(CloudManager.GetGraphBaseUri(context), new Uri($"https://graph.microsoft.be"));
diff --git a/src/sdk/PnP.Core.Test/PnP.Core.Test.csproj b/src/sdk/PnP.Core.Test/PnP.Core.Test.csproj
index a874ec2a3d..0b86652b9c 100644
--- a/src/sdk/PnP.Core.Test/PnP.Core.Test.csproj
+++ b/src/sdk/PnP.Core.Test/PnP.Core.Test.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/src/sdk/PnP.Core/Services/Core/CloudManager.cs b/src/sdk/PnP.Core/Services/Core/CloudManager.cs
index 206c7bbbf0..149fb51e0c 100644
--- a/src/sdk/PnP.Core/Services/Core/CloudManager.cs
+++ b/src/sdk/PnP.Core/Services/Core/CloudManager.cs
@@ -12,8 +12,10 @@ internal static Microsoft365Environment GetEnvironmentFromUri(Uri url)
{
"com" => Microsoft365Environment.Production,
"us" => Microsoft365Environment.USGovernment,
- "de" => Microsoft365Environment.Germany,
+ "de" => Microsoft365Environment.DelosCloud,
"cn" => Microsoft365Environment.China,
+ "fr" => Microsoft365Environment.BleuCloud,
+ "sg" => Microsoft365Environment.GovSGCloud,
_ => Microsoft365Environment.Production,
};
}
@@ -32,9 +34,11 @@ internal static string GetMicrosoftGraphAuthority(Microsoft365Environment enviro
Microsoft365Environment.PreProduction => "graph.microsoft.com",
Microsoft365Environment.USGovernment => "graph.microsoft.com",
Microsoft365Environment.USGovernmentHigh => "graph.microsoft.us",
- Microsoft365Environment.USGovernmentDoD => "dod-graph.microsoft.us",
- Microsoft365Environment.Germany => "graph.microsoft.de",
+ Microsoft365Environment.USGovernmentDoD => "dod-graph.microsoft.us",
Microsoft365Environment.China => "microsoftgraph.chinacloudapi.cn",
+ Microsoft365Environment.BleuCloud => "graph.svc.sovcloud.fr",
+ Microsoft365Environment.DelosCloud => "graph.svc.sovcloud.de",
+ Microsoft365Environment.GovSGCloud => "graph.svc.sovcloud.sg",
_ => "graph.microsoft.com"
};
}
@@ -53,9 +57,11 @@ internal static string GetAzureADLoginAuthority(Microsoft365Environment environm
Microsoft365Environment.PreProduction => "login.windows-ppe.net",
Microsoft365Environment.USGovernment => "login.microsoftonline.com",
Microsoft365Environment.USGovernmentHigh => "login.microsoftonline.us",
- Microsoft365Environment.USGovernmentDoD => "login.microsoftonline.us",
- Microsoft365Environment.Germany => "login.microsoftonline.de",
+ Microsoft365Environment.USGovernmentDoD => "login.microsoftonline.us",
Microsoft365Environment.China => "login.chinacloudapi.cn",
+ Microsoft365Environment.BleuCloud => "login.sovcloud-identity.fr",
+ Microsoft365Environment.DelosCloud => "login.sovcloud-identity.de",
+ Microsoft365Environment.GovSGCloud => "login.sovcloud-identity.sg",
_ => "login.microsoftonline.com"
};
}
diff --git a/src/sdk/PnP.Core/Services/Core/Microsoft365Environment.cs b/src/sdk/PnP.Core/Services/Core/Microsoft365Environment.cs
index 0b74c4a644..af09c27382 100644
--- a/src/sdk/PnP.Core/Services/Core/Microsoft365Environment.cs
+++ b/src/sdk/PnP.Core/Services/Core/Microsoft365Environment.cs
@@ -40,6 +40,21 @@ public enum Microsoft365Environment
///
USGovernmentDoD = 6,
+ ///
+ /// French sovereign cloud environment. A joint venture between Orange and Capgemini, designed to meet SecNumCloud requirements. See https://learn.microsoft.com/en-us/industry/sovereign-cloud/national-partner-clouds/overview-national-partner-clouds
+ ///
+ BleuCloud = 7,
+
+ ///
+ /// Represents the Delos Cloud environment option. Operated by an SAP subsidiary and aligned with German Cloud Platform Requirements. See https://learn.microsoft.com/en-us/industry/sovereign-cloud/national-partner-clouds/overview-national-partner-clouds
+ ///
+ DelosCloud = 8,
+
+ ///
+ /// Represents the GovSG Cloud environment option. Operated by a Singaporean government-owned company and aligned with Singapore's Sovereign Cloud Framework. See https://learn.microsoft.com/en-us/industry/sovereign-cloud/national-partner-clouds/overview-national-partner-clouds
+ ///
+ GovSGCloud = 9,
+
///
/// Custom cloud configuration, specify the endpoints manually
///