Skip to content

Commit 1782b2b

Browse files
committed
Use internal class instead of interface
1 parent 35943fc commit 1782b2b

File tree

6 files changed

+34
-43
lines changed

6 files changed

+34
-43
lines changed

src/Microsoft.Azure.SignalR/HubHost/ServiceLifetimeManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ public ServiceLifetimeManager(
5353

5454
public override Task OnConnectedAsync(HubConnectionContext connection)
5555
{
56-
var userIdFeature = connection.Features.Get<IServiceUserIdFeature>();
56+
var userIdFeature = connection.Features.Get<ServiceUserIdFeature>();
5757
if (userIdFeature != null)
5858
{
5959
connection.UserIdentifier = userIdFeature.UserId;
60-
connection.Features.Set<IServiceUserIdFeature>(null);
60+
connection.Features.Set<ServiceUserIdFeature>(null);
6161
}
6262
return base.OnConnectedAsync(connection);
6363
}

src/Microsoft.Azure.SignalR/Internals/IServiceUserNameFeature.cs

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/Microsoft.Azure.SignalR/Internals/ServiceUserIdFeature.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
// Copyright (c) Microsoft. All rights reserved.
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33

4+
using Microsoft.AspNetCore.SignalR;
5+
46
namespace Microsoft.Azure.SignalR
57
{
6-
internal class ServiceUserIdFeature : IServiceUserIdFeature
8+
/// <summary>
9+
/// When clients negotiate with Management SDK and connect to SignalR server, the <see cref="IUserIdProvider"/> might not work as the user Id is set directly in the Management SDK.
10+
/// To make <see cref="HubConnectionContext.UserIdentifier"/> have the valid value in this case, we should set it before the server can access it. <see cref="HubLifetimeManager{THub}.OnConnectedAsync(HubConnectionContext)"/> is the only chance we can set the value. However, we cannot access the <see cref="Constants.ClaimType.UserId"/> as ASRS system claims're trimmed there. <see cref="HubConnectionContext.Features"/> is the place where we can store the user Id.
11+
/// https://github.com/dotnet/aspnetcore/blob/v6.0.9/src/SignalR/server/Core/src/HubConnectionHandler.cs#L132-L141
12+
/// </summary>
13+
internal class ServiceUserIdFeature
714
{
815
public string UserId { get; }
916

src/Microsoft.Azure.SignalR/ServerConnections/ClientConnectionContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ private FeatureCollection BuildFeatures(OpenConnectionMessage serviceMessage)
251251
var userIdClaim = serviceMessage.Claims.FirstOrDefault(c => c.Type == Constants.ClaimType.UserId);
252252
if (userIdClaim != default)
253253
{
254-
features.Set<IServiceUserIdFeature>(new ServiceUserIdFeature(userIdClaim.Value));
254+
features.Set(new ServiceUserIdFeature(userIdClaim.Value));
255255
}
256256
return features;
257257
}

test/Microsoft.Azure.SignalR.Tests/ClientConnectionContextFacts.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public void SetUserIdFeatureTest()
1414
{
1515
var claims = new Claim[] { new(Constants.ClaimType.UserId, "testUser") };
1616
var connection = new ClientConnectionContext(new("connectionId", claims));
17-
var feature = connection.Features.Get<IServiceUserIdFeature>();
17+
var feature = connection.Features.Get<ServiceUserIdFeature>();
1818
Assert.NotNull(feature);
1919
Assert.Equal("testUser", feature.UserId);
2020
}
@@ -23,7 +23,7 @@ public void SetUserIdFeatureTest()
2323
public void DoNotSetUserIdFeatureWithoutUserIdClaimTest()
2424
{
2525
var connection = new ClientConnectionContext(new("connectionId", Array.Empty<Claim>()));
26-
var feature = connection.Features.Get<IServiceUserIdFeature>();
26+
var feature = connection.Features.Get<ServiceUserIdFeature>();
2727
Assert.Null(feature);
2828
}
2929
}

test/Microsoft.Azure.SignalR.Tests/ServiceLifetimeManagerFacts.cs

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ namespace Microsoft.Azure.SignalR.Tests
2121
{
2222
public class ServiceLifetimeManagerFacts
2323
{
24-
private static readonly List<string> TestUsers = new List<string> {"user1", "user2"};
24+
private static readonly List<string> TestUsers = new List<string> { "user1", "user2" };
2525

26-
private static readonly List<string> TestGroups = new List<string> {"group1", "group2"};
26+
private static readonly List<string> TestGroups = new List<string> { "group1", "group2" };
2727

2828
private const string MockProtocol = "blazorpack";
2929

3030
private const string TestMethod = "TestMethod";
3131

32-
private static readonly object[] TestArgs = {"TestArgs"};
32+
private static readonly object[] TestArgs = { "TestArgs" };
3333

34-
private static readonly List<string> TestConnectionIds = new List<string> {"connection1", "connection2"};
34+
private static readonly List<string> TestConnectionIds = new List<string> { "connection1", "connection2" };
3535

3636
private static readonly IHubProtocolResolver HubProtocolResolver =
3737
new DefaultHubProtocolResolver(new IHubProtocol[]
@@ -229,7 +229,7 @@ public async void TestSendConnectionAsyncisOverwrittenWhenClientConnectionExiste
229229
public async void SetUserIdTest()
230230
{
231231
var connectionContext = new TestConnectionContext();
232-
connectionContext.Features.Set<IServiceUserIdFeature>(new ServiceUserIdFeature("testUser"));
232+
connectionContext.Features.Set(new ServiceUserIdFeature("testUser"));
233233

234234
var hubConnectionContext = new HubConnectionContext(connectionContext, new(), NullLoggerFactory.Instance);
235235
var serviceLifetimeManager = MockLifetimeManager(new TestServiceConnectionManager<TestHub>());
@@ -248,6 +248,7 @@ public async void DoNotSetUserIdWithoutFeatureTest()
248248
await serviceLifetimeManager.OnConnectedAsync(hubConnectionContext);
249249

250250
Assert.Null(hubConnectionContext.UserIdentifier);
251+
Assert.Null(hubConnectionContext.Features.Get<ServiceUserIdFeature>());
251252
}
252253

253254
private HubLifetimeManager<TestHub> MockLifetimeManager(IServiceConnectionManager<TestHub> serviceConnectionManager, IClientConnectionManager clientConnectionManager = null, IBlazorDetector blazorDetector = null)
@@ -324,41 +325,41 @@ private static void VerifyServiceMessage(string methodName, ServiceMessage servi
324325
switch (methodName)
325326
{
326327
case "SendAllAsync":
327-
Assert.Null(((BroadcastDataMessage) serviceMessage).ExcludedList);
328+
Assert.Null(((BroadcastDataMessage)serviceMessage).ExcludedList);
328329
break;
329330
case "SendAllExceptAsync":
330-
Assert.Equal(TestConnectionIds, ((BroadcastDataMessage) serviceMessage).ExcludedList);
331+
Assert.Equal(TestConnectionIds, ((BroadcastDataMessage)serviceMessage).ExcludedList);
331332
break;
332333
case "SendConnectionAsync":
333-
Assert.Equal(TestConnectionIds[0], ((MultiConnectionDataMessage) serviceMessage).ConnectionList[0]);
334+
Assert.Equal(TestConnectionIds[0], ((MultiConnectionDataMessage)serviceMessage).ConnectionList[0]);
334335
break;
335336
case "SendConnectionsAsync":
336-
Assert.Equal(TestConnectionIds, ((MultiConnectionDataMessage) serviceMessage).ConnectionList);
337+
Assert.Equal(TestConnectionIds, ((MultiConnectionDataMessage)serviceMessage).ConnectionList);
337338
break;
338339
case "SendGroupAsync":
339-
Assert.Equal(TestGroups[0], ((GroupBroadcastDataMessage) serviceMessage).GroupName);
340-
Assert.Null(((GroupBroadcastDataMessage) serviceMessage).ExcludedList);
340+
Assert.Equal(TestGroups[0], ((GroupBroadcastDataMessage)serviceMessage).GroupName);
341+
Assert.Null(((GroupBroadcastDataMessage)serviceMessage).ExcludedList);
341342
break;
342343
case "SendGroupsAsync":
343-
Assert.Equal(TestGroups, ((MultiGroupBroadcastDataMessage) serviceMessage).GroupList);
344+
Assert.Equal(TestGroups, ((MultiGroupBroadcastDataMessage)serviceMessage).GroupList);
344345
break;
345346
case "SendGroupExceptAsync":
346-
Assert.Equal(TestGroups[0], ((GroupBroadcastDataMessage) serviceMessage).GroupName);
347-
Assert.Equal(TestConnectionIds, ((GroupBroadcastDataMessage) serviceMessage).ExcludedList);
347+
Assert.Equal(TestGroups[0], ((GroupBroadcastDataMessage)serviceMessage).GroupName);
348+
Assert.Equal(TestConnectionIds, ((GroupBroadcastDataMessage)serviceMessage).ExcludedList);
348349
break;
349350
case "SendUserAsync":
350-
Assert.Equal(TestUsers[0], ((UserDataMessage) serviceMessage).UserId);
351+
Assert.Equal(TestUsers[0], ((UserDataMessage)serviceMessage).UserId);
351352
break;
352353
case "SendUsersAsync":
353-
Assert.Equal(TestUsers, ((MultiUserDataMessage) serviceMessage).UserList);
354+
Assert.Equal(TestUsers, ((MultiUserDataMessage)serviceMessage).UserList);
354355
break;
355356
case "AddToGroupAsync":
356-
Assert.Equal(TestConnectionIds[0], ((JoinGroupWithAckMessage) serviceMessage).ConnectionId);
357-
Assert.Equal(TestGroups[0], ((JoinGroupWithAckMessage) serviceMessage).GroupName);
357+
Assert.Equal(TestConnectionIds[0], ((JoinGroupWithAckMessage)serviceMessage).ConnectionId);
358+
Assert.Equal(TestGroups[0], ((JoinGroupWithAckMessage)serviceMessage).GroupName);
358359
break;
359360
case "RemoveFromGroupAsync":
360-
Assert.Equal(TestConnectionIds[0], ((LeaveGroupWithAckMessage) serviceMessage).ConnectionId);
361-
Assert.Equal(TestGroups[0], ((LeaveGroupWithAckMessage) serviceMessage).GroupName);
361+
Assert.Equal(TestConnectionIds[0], ((LeaveGroupWithAckMessage)serviceMessage).ConnectionId);
362+
Assert.Equal(TestGroups[0], ((LeaveGroupWithAckMessage)serviceMessage).GroupName);
362363
break;
363364
default:
364365
break;

0 commit comments

Comments
 (0)