Skip to content

Commit 3dbfa58

Browse files
committed
- Further safety
1 parent 07395c7 commit 3dbfa58

2 files changed

Lines changed: 65 additions & 31 deletions

File tree

GenOnlineService/Constants.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1739,7 +1739,10 @@ private static void GetTURNConfig(out int TTL, out string token, out string key,
17391739
throw;
17401740
}
17411741
}
1742-
}))
1742+
})
1743+
{
1744+
Timeout = TimeSpan.FromSeconds(30)
1745+
})
17431746
{
17441747
client.DefaultRequestHeaders.Add("Authorization", String.Format("Bearer {0}", TurnToken));
17451748
client.DefaultRequestHeaders.Add("Accept", "application/json");
@@ -1852,7 +1855,10 @@ public static async void DeleteCredentialsForUser(Int64 userID)
18521855
throw;
18531856
}
18541857
}
1855-
}))
1858+
})
1859+
{
1860+
Timeout = TimeSpan.FromSeconds(30)
1861+
})
18561862
{
18571863
client.DefaultRequestHeaders.Add("Authorization", String.Format("Bearer {0}", TurnToken));
18581864
client.DefaultRequestHeaders.Add("Accept", "application/json");

GenOnlineService/Controllers/Friends/SocialController.cs

Lines changed: 57 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,12 @@ private async Task HelperFunction_AcceptFriendRequest(Int64 source_user_id, Int6
8282
UserSession? sourceData = WebSocketManager.GetDataFromUser(source_user_id);
8383
UserSession? targetData = WebSocketManager.GetDataFromUser(target_user_id);
8484

85+
if (sourceData == null)
86+
{
87+
return;
88+
}
8589
// remove the request from requestor (online version)
86-
#pragma warning disable CS8602 // Dereference of a possibly null reference.
8790
sourceData.GetSocialContainer().PendingRequests.Remove(target_user_id);
88-
#pragma warning restore CS8602 // Dereference of a possibly null reference.
8991

9092
// remove the request from requestor (db)
9193
await Database.Functions.Auth.RemovePendingFriendRequest(GlobalDatabaseInstance.g_Database, source_user_id, target_user_id);
@@ -111,7 +113,7 @@ private async Task HelperFunction_AcceptFriendRequest(Int64 source_user_id, Int6
111113
}
112114

113115
// notify the source player that the target player is online, if they are
114-
if (sourceData != null)
116+
if (targetData != null)
115117
{
116118
WebSocketMessage_Social_FriendStatusChanged friendStatusChangedEvent = new();
117119
friendStatusChangedEvent.msg_id = (int)EWebSocketMessageID.SOCIAL_FRIEND_ONLINE_STATUS_CHANGED;
@@ -147,7 +149,7 @@ public async Task AcceptPendingRequest(Int64 target_user_id)
147149
return;
148150
}
149151

150-
HelperFunction_AcceptFriendRequest(source_user_id, target_user_id);
152+
await HelperFunction_AcceptFriendRequest(source_user_id, target_user_id);
151153

152154
UserSession? sourceSession = WebSocketManager.GetDataFromUser(source_user_id);
153155
if (sourceSession != null)
@@ -176,10 +178,14 @@ public async Task RejectPendingRequest(Int64 target_user_id)
176178
}
177179

178180
// remove the request from requestor (online version)
179-
#pragma warning disable CS8602 // Dereference of a possibly null reference.
180181
UserSession? userData = WebSocketManager.GetDataFromUser(source_user_id);
182+
if (userData == null)
183+
{
184+
Response.StatusCode = (int)HttpStatusCode.Forbidden;
185+
return;
186+
}
187+
181188
userData.GetSocialContainer().PendingRequests.Remove(target_user_id);
182-
#pragma warning restore CS8602 // Dereference of a possibly null reference.
183189

184190
// remove the request from requestor (db)
185191
// NOTE: Target and source are inverted here because the target is actually the person who sent the request, source is the person taking action on the friend request
@@ -212,14 +218,18 @@ public async Task RemoveFriend(Int64 target_user_id)
212218
}
213219

214220
// must be friends
215-
#pragma warning disable CS8602 // Dereference of a possibly null reference.
216221
UserSession? userData = WebSocketManager.GetDataFromUser(source_user_id);
222+
if (userData == null)
223+
{
224+
Response.StatusCode = (int)HttpStatusCode.Forbidden;
225+
return;
226+
}
227+
217228
if (!userData.GetSocialContainer().Friends.Contains(target_user_id))
218229
{
219230
Response.StatusCode = (int)HttpStatusCode.NotFound;
220231
return;
221232
}
222-
#pragma warning restore CS8602 // Dereference of a possibly null reference.
223233

224234
// remove the request from requestor (online version)
225235
userData.GetSocialContainer().Friends.Remove(target_user_id);
@@ -262,25 +272,28 @@ public async Task AddFriend(Int64 target_user_id)
262272
// too many friends?
263273
const int friendsLimit = 200;
264274
UserSession? userData = WebSocketManager.GetDataFromUser(requester_user_id);
265-
if (userData.GetSocialContainer().Friends.Count >= friendsLimit)
266-
{
267-
if (userData != null)
268-
{
269-
WebSocketMessage_Social_FriendsListFull friendsListFullEvent = new();
270-
friendsListFullEvent.msg_id = (int)EWebSocketMessageID.SOCIAL_CANT_ADD_FRIEND_LIST_FULL;
271-
byte[] bytesJSON = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(friendsListFullEvent));
272-
userData.QueueWebsocketSend(bytesJSON);
273-
}
275+
if (userData == null)
276+
{
277+
Response.StatusCode = (int)HttpStatusCode.Forbidden;
278+
return;
279+
}
280+
281+
if (userData.GetSocialContainer().Friends.Count >= friendsLimit)
282+
{
283+
WebSocketMessage_Social_FriendsListFull friendsListFullEvent = new();
284+
friendsListFullEvent.msg_id = (int)EWebSocketMessageID.SOCIAL_CANT_ADD_FRIEND_LIST_FULL;
285+
byte[] bytesJSON = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(friendsListFullEvent));
286+
userData.QueueWebsocketSend(bytesJSON);
287+
Response.StatusCode = (int)HttpStatusCode.Conflict;
288+
return;
274289
}
275290

276291
// Check not already friends
277-
#pragma warning disable CS8602 // Dereference of a possibly null reference.
278292
if (userData.GetSocialContainer().Friends.Contains(target_user_id))
279293
{
280294
Response.StatusCode = (int)HttpStatusCode.Conflict;
281295
return;
282296
}
283-
#pragma warning restore CS8602 // Dereference of a possibly null reference.
284297

285298
// the other user must be online, theres no way to add offline people in the client
286299

@@ -319,7 +332,7 @@ public async Task AddFriend(Int64 target_user_id)
319332
if (userData.GetSocialContainer().PendingRequests.Contains(target_user_id))
320333
{
321334
// accept their request
322-
HelperFunction_AcceptFriendRequest(requester_user_id, target_user_id);
335+
await HelperFunction_AcceptFriendRequest(requester_user_id, target_user_id);
323336
}
324337
else
325338
{
@@ -368,10 +381,14 @@ public async Task<APIResult> Get_FriendsAndRequests()
368381

369382
// get websockets & data
370383
UserSession? sourceData = WebSocketManager.GetDataFromUser(requester_user_id);
384+
if (sourceData == null)
385+
{
386+
Response.StatusCode = (int)HttpStatusCode.Forbidden;
387+
return result;
388+
}
389+
371390

372-
#pragma warning disable CS8602 // Dereference of a possibly null reference.
373391
HashSet<Int64> setFriends = sourceData.GetSocialContainer().Friends;
374-
#pragma warning restore CS8602 // Dereference of a possibly null reference.
375392
HashSet<Int64> setPendingRequests = sourceData.GetSocialContainer().PendingRequests;
376393

377394
List<Int64> lstCombined = new List<Int64>();
@@ -465,10 +482,14 @@ public async Task<APIResult> Get_Blocked()
465482
}
466483

467484
UserSession? sourceData = WebSocketManager.GetDataFromUser(requester_user_id);
485+
if (sourceData == null)
486+
{
487+
Response.StatusCode = (int)HttpStatusCode.Forbidden;
488+
return result;
489+
}
490+
468491

469-
#pragma warning disable CS8602 // Dereference of a possibly null reference.
470492
HashSet<Int64> setBlocked = sourceData.GetSocialContainer().Blocked;
471-
#pragma warning restore CS8602 // Dereference of a possibly null reference.
472493

473494
Dictionary<Int64, string> dictDisplayNames = await Database.Functions.Auth.GetDisplayNameBulk(GlobalDatabaseInstance.g_Database, setBlocked.ToList());
474495

@@ -529,7 +550,12 @@ public async Task Add_Block(Int64 target_user_id)
529550
// Check not already blocked
530551
UserSession? sourceData = WebSocketManager.GetDataFromUser(requester_user_id);
531552

532-
#pragma warning disable CS8602 // Dereference of a possibly null reference.
553+
if (sourceData == null)
554+
{
555+
Response.StatusCode = (int)HttpStatusCode.Forbidden;
556+
return;
557+
}
558+
533559
if (sourceData.GetSocialContainer().Blocked.Contains(target_user_id))
534560
{
535561
Response.StatusCode = (int)HttpStatusCode.Conflict;
@@ -547,8 +573,6 @@ public async Task Add_Block(Int64 target_user_id)
547573
}
548574
}
549575

550-
#pragma warning restore CS8602 // Dereference of a possibly null reference.
551-
552576
// We must:
553577
//// - Remove from source friends, DB (if present)
554578
//// - Remove from source friends, Cache (if present)
@@ -606,14 +630,18 @@ public async Task Remove_Block(Int64 target_user_id)
606630

607631
UserSession? sourceData = WebSocketManager.GetDataFromUser(requester_user_id);
608632

633+
if (sourceData == null)
634+
{
635+
Response.StatusCode = (int)HttpStatusCode.Forbidden;
636+
return;
637+
}
638+
609639
// Check blocked
610-
#pragma warning disable CS8602 // Dereference of a possibly null reference.
611640
if (!sourceData.GetSocialContainer().Blocked.Contains(target_user_id))
612641
{
613642
Response.StatusCode = (int)HttpStatusCode.Conflict;
614643
return;
615644
}
616-
#pragma warning restore CS8602 // Dereference of a possibly null reference.
617645

618646
// - Remove from block list (cache)
619647
sourceData.GetSocialContainer().Blocked.Remove(target_user_id);

0 commit comments

Comments
 (0)