From 6ac229c23c7ad8082fe66cbd33c24ed0edd04051 Mon Sep 17 00:00:00 2001 From: Lapis <47952866+LapisGit@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:50:59 -0400 Subject: [PATCH] etc stuff --- CannedNet/Images/DefaultProfileImage.jpg | Bin 0 -> 17717 bytes .../Services/Controllers/APIController.cs | 86 ++++++++---------- .../Controllers/AccountsController.cs | 9 +- .../Services/Controllers/AuthController.cs | 6 ++ .../Services/Controllers/ImageController.cs | 67 ++------------ .../Controllers/MatchmakingController.cs | 79 +++++++++++----- 6 files changed, 115 insertions(+), 132 deletions(-) create mode 100644 CannedNet/Images/DefaultProfileImage.jpg diff --git a/CannedNet/Images/DefaultProfileImage.jpg b/CannedNet/Images/DefaultProfileImage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d6c83a0b20f3b43c2f7279eedd63bd57ddd21a5 GIT binary patch literal 17717 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 literal 0 HcmV?d00001 diff --git a/CannedNet/Services/Controllers/APIController.cs b/CannedNet/Services/Controllers/APIController.cs index 8e7bb2d..d70c886 100644 --- a/CannedNet/Services/Controllers/APIController.cs +++ b/CannedNet/Services/Controllers/APIController.cs @@ -21,8 +21,6 @@ public class APIController var storefrontService = app.Services.GetRequiredService(); var notificationService = app.Services.GetRequiredService(); - MapImageEndpoints(app); - app.MapGet("/api/config/v1/amplitude", () => Results.Ok(new { AmplitudeKey = "a", @@ -616,7 +614,7 @@ public class APIController }); app.MapGet("/api/storefronts/v1/p2p/betaEnabled", async (HttpRequest request, AppDbContext db) => { - return "true"; + return "false"; }); app.MapGet("/api/announcement/v1/get", async (HttpRequest request, AppDbContext db) => { @@ -1765,6 +1763,45 @@ public class APIController // TODO: implement return Results.Content("{\"Cheered\":false,\"Favorited\":false}", "application/json"); }); + app.MapPost("/api/images/v4/uploadsaved", async (HttpContext context) => + { + try + { + var form = await context.Request.ReadFormAsync(); + var file = form.Files.FirstOrDefault(); + + if (file == null) + { + return Results.BadRequest(new { error = "No file found in request" }); + } + + var imageId = Guid.NewGuid().ToString("N"); + var extension = Path.GetExtension(file.FileName).ToLowerInvariant(); + + var validExtensions = new[] { ".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp" }; + if (string.IsNullOrEmpty(extension) || !validExtensions.Contains(extension)) + { + extension = ".png"; + } + + var savedFileName = imageId + extension; + var filePath = Path.Combine(ImagesDir, savedFileName); + + using (var fileStream = File.Create(filePath)) + { + await file.CopyToAsync(fileStream); + } + + return Results.Ok(new + { + ImageName = savedFileName + }); + } + catch (Exception ex) + { + return Results.Problem($"Error uploading image: {ex.Message}"); + } + }); } private static object[]? TryDeserializeTags(string json) @@ -1836,47 +1873,4 @@ public class APIController } ImagesDir = dir; } - - private void MapImageEndpoints(WebApplication app) - { - app.MapPost("/api/images/v4/uploadsaved", async (HttpContext context) => - { - try - { - var form = await context.Request.ReadFormAsync(); - var file = form.Files.FirstOrDefault(); - - if (file == null) - { - return Results.BadRequest(new { error = "No file found in request" }); - } - - var imageId = Guid.NewGuid().ToString("N"); - var extension = Path.GetExtension(file.FileName).ToLowerInvariant(); - - var validExtensions = new[] { ".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp" }; - if (string.IsNullOrEmpty(extension) || !validExtensions.Contains(extension)) - { - extension = ".png"; - } - - var savedFileName = imageId + extension; - var filePath = Path.Combine(ImagesDir, savedFileName); - - using (var fileStream = File.Create(filePath)) - { - await file.CopyToAsync(fileStream); - } - - return Results.Ok(new - { - ImageName = savedFileName - }); - } - catch (Exception ex) - { - return Results.Problem($"Error uploading image: {ex.Message}"); - } - }); - } } diff --git a/CannedNet/Services/Controllers/AccountsController.cs b/CannedNet/Services/Controllers/AccountsController.cs index 70c9d9b..2ef9129 100644 --- a/CannedNet/Services/Controllers/AccountsController.cs +++ b/CannedNet/Services/Controllers/AccountsController.cs @@ -78,7 +78,7 @@ public class AccountsController var result = accounts.Select(a => new Account { AccountId = a.AccountId, - ProfileImage = a.ProfileImage ?? "hdqeamlcmatc6qzoi2ybgf0ddijjcf.jpg", + ProfileImage = a.ProfileImage ?? "DefaultProfileImage.jpg", IsJunior = a.IsJunior, Platforms = a.Platforms ?? 0, PersonalPronouns = a.PersonalPronouns ?? 0, @@ -103,7 +103,7 @@ public class AccountsController var result = new Account { AccountId = account.AccountId, - ProfileImage = account.ProfileImage ?? "hdqeamlcmatc6qzoi2ybgf0ddijjcf.jpg", + ProfileImage = account.ProfileImage ?? "DefaultProfileImage.jpg", IsJunior = account.IsJunior, Platforms = account.Platforms ?? 0, PersonalPronouns = account.PersonalPronouns ?? 0, @@ -157,7 +157,7 @@ public class AccountsController var account = new Account { AccountId = accountId, - ProfileImage = "hdqeamlcmatc6qzoi2ybgf0ddijjcf.jpg", + ProfileImage = "DefaultProfileImage.jpg", IsJunior = false, Platforms = 0, PersonalPronouns = 0, @@ -187,6 +187,7 @@ public class AccountsController var maxRoomId = await db.Rooms.MaxAsync(r => (int?)r.RoomId) ?? 0; var maxId = await db.Rooms.MaxAsync(r => (int?)r.Id) ?? 0; var dormRoomId = maxRoomId + 1; + var dormId = maxId + 1; var dormRoom = new Room { Id = maxId + 1, @@ -259,8 +260,6 @@ public class AccountsController app.MapPut("/account/me/displayname", async (HttpRequest request, AppDbContext db) => { - // TODO: get what the server should actually respond with, OK fails. - var authHeader = request.Headers.Authorization.ToString(); if (string.IsNullOrEmpty(authHeader) || !authHeader.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) diff --git a/CannedNet/Services/Controllers/AuthController.cs b/CannedNet/Services/Controllers/AuthController.cs index b831e86..24ead4a 100644 --- a/CannedNet/Services/Controllers/AuthController.cs +++ b/CannedNet/Services/Controllers/AuthController.cs @@ -88,5 +88,11 @@ public class AuthController key = "8oQ+e+WQaOBPbEcakhqs3dwZZdOmmyDUmJSD9u4AHMY=" }); }); + + app.MapGet("/role/developer/{id}", async (HttpRequest request, AppDbContext db, string id) => + { + // TODO: implement + return Results.Ok(RecNetResult.Ok()); + }); } } diff --git a/CannedNet/Services/Controllers/ImageController.cs b/CannedNet/Services/Controllers/ImageController.cs index b0f037f..d247b0c 100644 --- a/CannedNet/Services/Controllers/ImageController.cs +++ b/CannedNet/Services/Controllers/ImageController.cs @@ -14,12 +14,11 @@ public class ImageController Directory.CreateDirectory(imagesDir); } - app.MapGet("/{imageId}", (string imageId, HttpContext context) => + app.MapGet("/{imageId}", (string imageId) => { if (!Directory.Exists(imagesDir)) { - context.Response.StatusCode = 404; - return Task.CompletedTask; + return Results.NotFound(); } var files = Directory.GetFiles(imagesDir, $"{imageId}.*"); @@ -27,8 +26,7 @@ public class ImageController if (filePath == null) { - context.Response.StatusCode = 404; - return Task.CompletedTask; + return Results.NotFound(); } var extension = Path.GetExtension(filePath).ToLowerInvariant(); @@ -42,8 +40,8 @@ public class ImageController _ => "application/octet-stream" }; - context.Response.ContentType = contentType; - return File.OpenRead(filePath).CopyToAsync(context.Response.Body); + var fileStream = File.OpenRead(filePath); + return Results.File(fileStream, contentType); }); app.MapGet("/", (HttpContext context) => @@ -53,14 +51,12 @@ public class ImageController if (string.IsNullOrEmpty(imageId)) { - context.Response.StatusCode = 400; - return Task.CompletedTask; + return Results.BadRequest(); } if (!Directory.Exists(imagesDir)) { - context.Response.StatusCode = 404; - return Task.CompletedTask; + return Results.NotFound(); } var files = Directory.GetFiles(imagesDir, $"{imageId}.*"); @@ -68,8 +64,7 @@ public class ImageController if (filePath == null) { - context.Response.StatusCode = 404; - return Task.CompletedTask; + return Results.NotFound(); } var extension = Path.GetExtension(filePath).ToLowerInvariant(); @@ -83,50 +78,8 @@ public class ImageController _ => "application/octet-stream" }; - context.Response.ContentType = contentType; - return File.OpenRead(filePath).CopyToAsync(context.Response.Body); - }); - - app.MapPost("/api/images/v4/uploadsaved", async (HttpContext context) => - { - try - { - var form = await context.Request.ReadFormAsync(); - var file = form.Files.FirstOrDefault(); - - if (file == null) - { - return Results.BadRequest(new { error = "No file found in request" }); - } - - var imageId = Guid.NewGuid().ToString("N"); - var extension = Path.GetExtension(file.FileName).ToLowerInvariant(); - - var validExtensions = new[] { ".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp" }; - if (string.IsNullOrEmpty(extension) || !validExtensions.Contains(extension)) - { - extension = ".png"; - } - - var savedFileName = imageId + extension; - var filePath = Path.Combine(imagesDir, savedFileName); - - using (var fileStream = File.Create(filePath)) - { - await file.CopyToAsync(fileStream); - } - - return Results.Ok(new - { - imageId = imageId, - imageUrl = $"/{imageId}{extension}", - success = true - }); - } - catch (Exception ex) - { - return Results.Problem($"Error uploading image: {ex.Message}"); - } + var fileStream = File.OpenRead(filePath); + return Results.File(fileStream, contentType); }); } } \ No newline at end of file diff --git a/CannedNet/Services/Controllers/MatchmakingController.cs b/CannedNet/Services/Controllers/MatchmakingController.cs index 7b7bfba..7c50544 100644 --- a/CannedNet/Services/Controllers/MatchmakingController.cs +++ b/CannedNet/Services/Controllers/MatchmakingController.cs @@ -33,19 +33,43 @@ public class MatchmakingController return Results.Content(json, "application/json"); } - var result = new List + // Get the player's active room instance + var roomInstance = await db.RoomInstances + .Where(r => r.OwnerAccountId == accountId) + .OrderByDescending(r => r.Id) + .FirstOrDefaultAsync(); + + var result = new List { - new Account + new { - AccountId = account.AccountId, - ProfileImage = account.ProfileImage ?? "hdqeamlcmatc6qzoi2ybgf0ddijjcf.jpg", - IsJunior = account.IsJunior, - Platforms = account.Platforms ?? 0, - PersonalPronouns = account.PersonalPronouns ?? 0, - IdentityFlags = account.IdentityFlags ?? 0, - Username = account.Username ?? $"Player{account.AccountId}", - DisplayName = account.DisplayName ?? $"Player{account.AccountId}", - CreatedAt = account.CreatedAt + playerId = account.AccountId, + statusVisibility = 0, + deviceClass = 0, + vrMovementMode = 1, + roomInstance = roomInstance != null ? new + { + roomInstanceId = roomInstance.Id > 0 ? roomInstance.Id : roomInstance.roomInstanceId, + roomId = roomInstance.roomId, + subRoomId = roomInstance.subRoomId, + roomInstanceType = roomInstance.roomInstanceType, + location = roomInstance.location, + dataBlob = roomInstance.dataBlob, + eventId = roomInstance.eventId, + clubId = roomInstance.clubId, + roomCode = roomInstance.roomCode, + photonRegionId = roomInstance.photonRegionId, + photonRoomId = roomInstance.photonRoomId, + name = roomInstance.name, + maxCapacity = roomInstance.maxCapacity, + isFull = roomInstance.isFull, + isPrivate = roomInstance.isPrivate, + isInProgress = roomInstance.isInProgress, + EncryptVoiceChat = roomInstance.EncryptVoiceChat + } : (object?)null, + isOnline = roomInstance != null, + appVersion = "", + platform = account.Platforms ?? 0 } }; @@ -68,10 +92,24 @@ public class MatchmakingController if (!int.TryParse(accountId.AsSpan(), out var id)) return Results.Unauthorized(); + request.EnableBuffering(); + request.Body.Position = 0; + var form = await request.ReadFormAsync(); + int joinMode = 0; + if (int.TryParse(form["JoinMode"].ToString(), out var mode)) + { + joinMode = mode; + } + request.Body.Position = 0; + Room? roomData = null; var roomLower = room.ToLower(); - if (int.TryParse(room, out var roomId)) + if (roomLower == "dormroom") + { + roomData = await db.Rooms.FirstOrDefaultAsync(r => r.IsDorm && r.CreatorAccountId == id); + } + else if (int.TryParse(room, out var roomId)) { roomData = await db.Rooms.FirstOrDefaultAsync(r => r.RoomId == roomId); } @@ -95,6 +133,8 @@ public class MatchmakingController RoomInstance? instanceToUse; string photonRoomId; + + bool isPrivateInstance = joinMode == 2 || roomData.IsDorm; var existingInstance = await db.RoomInstances.FirstOrDefaultAsync(r => r.OwnerAccountId == id && r.roomId == roomData.RoomId); @@ -111,7 +151,7 @@ public class MatchmakingController existingInstance.name = roomData.Name; existingInstance.maxCapacity = maxCapacity; existingInstance.isFull = false; - existingInstance.isPrivate = false; + existingInstance.isPrivate = isPrivateInstance; instanceToUse = existingInstance; } else @@ -131,15 +171,6 @@ public class MatchmakingController photonRoomId = publicInstance.photonRoomId ?? Guid.NewGuid().ToString(); } - if (room == "DormRoom") - { - var playerDorm = await db.Rooms.FirstOrDefaultAsync(r => r.IsDorm && r.CreatorAccountId == id); - if (playerDorm != null) - { - roomData.RoomId = playerDorm.RoomId; - } - } - instanceToUse = new RoomInstance { OwnerAccountId = id, @@ -154,7 +185,7 @@ public class MatchmakingController name = roomData.Name, maxCapacity = maxCapacity, isFull = false, - isPrivate = roomData.IsDorm || roomData.RoomId == 1, + isPrivate = isPrivateInstance, isInProgress = false, EncryptVoiceChat = roomData.EncryptVoiceChat }; @@ -187,7 +218,7 @@ public class MatchmakingController name = instanceToUse?.name ?? roomData.Name, maxCapacity = instanceToUse?.maxCapacity ?? maxCapacity, isFull = instanceToUse?.isFull ?? false, - isPrivate = (roomData.IsDorm || roomData.RoomId == 1) ? true : (instanceToUse?.isPrivate ?? false), + isPrivate = isPrivateInstance, isInProgress = instanceToUse?.isInProgress ?? false, EncryptVoiceChat = instanceToUse?.EncryptVoiceChat ?? roomData.EncryptVoiceChat }