From 9d76b5a622812d4f85559f6f9bb3345b27a3b91e Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 19:41:11 +0000
Subject: [PATCH 1/2] Initial plan
From ee1df4370ff65874ce1da2928f56557d9c463a57 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 5 Feb 2026 19:47:31 +0000
Subject: [PATCH 2/2] Add BleuCloud and DelosCloud environments, remove old
Germany cloud
Co-authored-by: gavinbarron <7122716+gavinbarron@users.noreply.github.com>
---
.../Common/GraphSettingsTests.cs | 8 ++--
.../Handlers/NationalCloudHandlerTests.cs | 8 ++--
.../GraphEnvironmentConstants.cs | 43 +++++++++++++------
3 files changed, 37 insertions(+), 22 deletions(-)
diff --git a/src/Authentication/Authentication.Test/Common/GraphSettingsTests.cs b/src/Authentication/Authentication.Test/Common/GraphSettingsTests.cs
index 31e3c2aad94..314938263d4 100644
--- a/src/Authentication/Authentication.Test/Common/GraphSettingsTests.cs
+++ b/src/Authentication/Authentication.Test/Common/GraphSettingsTests.cs
@@ -115,8 +115,8 @@ public void ShouldLoadSettingsFromConfiguredDataStore()
// Assert
Assert.NotNull(loadedEnvironment);
- // 5 built-in + 2 user-defined
- Assert.Equal(7, settings.Environments.Count());
+ // 6 built-in + 2 user-defined
+ Assert.Equal(8, settings.Environments.Count());
Assert.Equal("https://login.MyNewCloud.com", loadedEnvironment.AzureADEndpoint);
Assert.Equal("https://graph.MyNewCloud.com", loadedEnvironment.GraphEndpoint);
Assert.Equal(GraphEnvironmentConstants.EnvironmentType.UserDefined, loadedEnvironment.Type);
@@ -155,8 +155,8 @@ public void ShouldRemoveSettingsFromConfiguredDataStore()
// Assert
Assert.NotEmpty(settingsContent);
- // 5 built-in + 1 user-defined
- Assert.Equal(6, settings.Environments.Count());
+ // 6 built-in + 1 user-defined
+ Assert.Equal(7, settings.Environments.Count());
GraphSession.Reset();
}
diff --git a/src/Authentication/Authentication.Test/Handlers/NationalCloudHandlerTests.cs b/src/Authentication/Authentication.Test/Handlers/NationalCloudHandlerTests.cs
index 75eee5dea01..ee0fdee0a69 100644
--- a/src/Authentication/Authentication.Test/Handlers/NationalCloudHandlerTests.cs
+++ b/src/Authentication/Authentication.Test/Handlers/NationalCloudHandlerTests.cs
@@ -64,13 +64,13 @@ public async Task ShouldUseGlobalCloudWhenEnvironmentIsNotSet()
}
[Fact]
- public async Task ShouldUseGermanyCloudWhenEnvironmentIsSetToGermany()
+ public async Task ShouldUseDelosCloudWhenEnvironmentIsSetToDelos()
{
GraphSession.Initialize(() => new GraphSession());
// Arrange
- GraphEnvironment germanyEnvironment = GraphEnvironment.BuiltInEnvironments[GraphEnvironmentConstants.EnvironmentName.Germany];
- GraphSession.Instance.Environment = germanyEnvironment;
+ GraphEnvironment delosEnvironment = GraphEnvironment.BuiltInEnvironments[GraphEnvironmentConstants.EnvironmentName.DelosCloud];
+ GraphSession.Instance.Environment = delosEnvironment;
Uri requestUrl = new Uri($"https://graph.microsoft.com/beta/users?{topParam}&{selectParam}");
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, requestUrl);
@@ -80,7 +80,7 @@ public async Task ShouldUseGermanyCloudWhenEnvironmentIsSetToGermany()
// Assert
Assert.Equal(requestUrl.Scheme, response.RequestMessage.RequestUri.Scheme);
- Assert.Equal("graph.microsoft.de", response.RequestMessage.RequestUri.Host);
+ Assert.Equal("graph.svc.sovcloud.de", response.RequestMessage.RequestUri.Host);
Assert.Contains(topParam, sentRequestQuery);
Assert.Contains(selectParam, sentRequestQuery);
Assert.Equal(2, sentRequestQuery.Split('&').Length);
diff --git a/src/Authentication/Authentication/GraphEnvironmentConstants.cs b/src/Authentication/Authentication/GraphEnvironmentConstants.cs
index b13710d234f..adeeef76408 100644
--- a/src/Authentication/Authentication/GraphEnvironmentConstants.cs
+++ b/src/Authentication/Authentication/GraphEnvironmentConstants.cs
@@ -30,14 +30,19 @@ public static class EnvironmentName
public const string USGovDoD = "USGovDoD";
///
- /// The graph national cloud for Germany.
+ /// The graph national cloud for China.
///
- public const string Germany = "Germany";
+ public const string China = "China";
///
- /// The graph national cloud for China.
+ /// The French sovereign cloud operated by Bleu.
///
- public const string China = "China";
+ public const string BleuCloud = "BleuCloud";
+
+ ///
+ /// The German sovereign cloud operated by Delos.
+ ///
+ public const string DelosCloud = "DelosCloud";
}
///
@@ -84,16 +89,6 @@ public static class EnvironmentType
GraphEndpoint = "https://dod-graph.microsoft.us"
}
},
- // Germany national cloud endpoints.
- {
- EnvironmentName.Germany, new GraphEnvironment
- {
- Name = EnvironmentName.Germany,
- Type = EnvironmentType.BuiltIn,
- AzureADEndpoint = "https://login.microsoftonline.de",
- GraphEndpoint = "https://graph.microsoft.de"
- }
- },
// China national cloud endpoints.
{
EnvironmentName.China, new GraphEnvironment
@@ -103,6 +98,26 @@ public static class EnvironmentType
AzureADEndpoint = "https://login.chinacloudapi.cn",
GraphEndpoint = "https://microsoftgraph.chinacloudapi.cn"
}
+ },
+ // French sovereign cloud endpoints.
+ {
+ EnvironmentName.BleuCloud, new GraphEnvironment
+ {
+ Name = EnvironmentName.BleuCloud,
+ Type = EnvironmentType.BuiltIn,
+ AzureADEndpoint = "https://login.sovcloud-identity.fr",
+ GraphEndpoint = "https://graph.svc.sovcloud.fr"
+ }
+ },
+ // German sovereign cloud endpoints.
+ {
+ EnvironmentName.DelosCloud, new GraphEnvironment
+ {
+ Name = EnvironmentName.DelosCloud,
+ Type = EnvironmentType.BuiltIn,
+ AzureADEndpoint = "https://login.sovcloud-identity.de",
+ GraphEndpoint = "https://graph.svc.sovcloud.de"
+ }
}
};
}