From 310f325800b56196f21140bec6910b7536649569 Mon Sep 17 00:00:00 2001 From: turecross321 <51852312+turecross321@users.noreply.github.com> Date: Tue, 23 Apr 2024 21:51:03 +0200 Subject: [PATCH 1/2] Hide sub levels from people who didn't publish them --- Refresh.GameServer/Database/GameDatabaseContext.Levels.cs | 8 ++++---- .../Database/GameDatabaseContext.Relations.cs | 8 ++++---- Refresh.GameServer/Database/GameDatabaseProvider.cs | 2 +- .../ApiV3/DataTypes/Response/ApiLevelCategoryResponse.cs | 2 +- Refresh.GameServer/Endpoints/ApiV3/LevelApiEndpoints.cs | 2 +- .../Endpoints/Game/Levels/LevelEndpoints.cs | 4 ++-- .../Extensions/LevelEnumerableExtensions.cs | 6 ++++++ .../Types/Levels/Categories/ByUserLevelCategory.cs | 6 +++--- .../Types/Levels/Categories/ContestCategory.cs | 4 ++-- .../Types/Levels/Categories/CoolLevelsCategory.cs | 4 ++-- .../Types/Levels/Categories/CurrentlyPlayingCategory.cs | 6 +++--- .../Types/Levels/Categories/DeveloperLevelsCategory.cs | 4 ++-- .../Levels/Categories/FavouriteSlotsByUserCategory.cs | 6 +++--- .../Types/Levels/Categories/HighestRatedLevelsCategory.cs | 6 +++--- .../Types/Levels/Categories/LevelCategory.cs | 4 ++-- .../Types/Levels/Categories/MostHeartedLevelsCategory.cs | 6 +++--- .../Types/Levels/Categories/MostReplayedLevelsCategory.cs | 6 +++--- .../Levels/Categories/MostUniquelyPlayedLevelsCategory.cs | 6 +++--- .../Types/Levels/Categories/NewestLevelsCategory.cs | 6 +++--- .../Types/Levels/Categories/QueuedLevelsByUserCategory.cs | 6 +++--- .../Types/Levels/Categories/RandomLevelsCategory.cs | 6 +++--- .../Types/Levels/Categories/SearchLevelCategory.cs | 6 +++--- .../Types/Levels/Categories/SerializedCategory.cs | 2 +- .../Types/Levels/Categories/TeamPickedLevelsCategory.cs | 6 +++--- .../Tests/Levels/PublishEndpointsTests.cs | 4 ++-- 25 files changed, 66 insertions(+), 60 deletions(-) diff --git a/Refresh.GameServer/Database/GameDatabaseContext.Levels.cs b/Refresh.GameServer/Database/GameDatabaseContext.Levels.cs index 6c150dad..987e6043 100644 --- a/Refresh.GameServer/Database/GameDatabaseContext.Levels.cs +++ b/Refresh.GameServer/Database/GameDatabaseContext.Levels.cs @@ -171,20 +171,20 @@ private IQueryable GetLevelsByGameVersion(TokenGame gameVersion) => this._realm.All().Where(l => l._Source == (int)GameLevelSource.User).FilterByGameVersion(gameVersion); [Pure] - public DatabaseList GetLevelsByUser(GameUser user, int count, int skip, LevelFilterSettings levelFilterSettings) + public DatabaseList GetLevelsByUser(GameUser user, int count, int skip, LevelFilterSettings levelFilterSettings, GameUser? accessor) { if (user.Username == DeletedUser.Username) { - return new DatabaseList(this.GetLevelsByGameVersion(levelFilterSettings.GameVersion).FilterByLevelFilterSettings(null, levelFilterSettings).Where(l => l.Publisher == null), skip, count); + return new DatabaseList(this.GetLevelsByGameVersion(levelFilterSettings.GameVersion).FilterByLevelFilterSettings(accessor, levelFilterSettings).Where(l => l.Publisher == null), skip, count); } if (user.Username.StartsWith("!")) { string withoutPrefix = user.Username[1..]; - return new DatabaseList(this.GetLevelsByGameVersion(levelFilterSettings.GameVersion).FilterByLevelFilterSettings(null, levelFilterSettings).Where(l => l.OriginalPublisher == withoutPrefix), skip, count); + return new DatabaseList(this.GetLevelsByGameVersion(levelFilterSettings.GameVersion).FilterByLevelFilterSettings(accessor, levelFilterSettings).Where(l => l.OriginalPublisher == withoutPrefix), skip, count); } - return new DatabaseList(this.GetLevelsByGameVersion(levelFilterSettings.GameVersion).FilterByLevelFilterSettings(null, levelFilterSettings).Where(l => l.Publisher == user), skip, count); + return new DatabaseList(this.GetLevelsByGameVersion(levelFilterSettings.GameVersion).FilterByLevelFilterSettings(accessor, levelFilterSettings).Where(l => l.Publisher == user), skip, count); } [Pure] diff --git a/Refresh.GameServer/Database/GameDatabaseContext.Relations.cs b/Refresh.GameServer/Database/GameDatabaseContext.Relations.cs index c98eef3a..fea2029f 100644 --- a/Refresh.GameServer/Database/GameDatabaseContext.Relations.cs +++ b/Refresh.GameServer/Database/GameDatabaseContext.Relations.cs @@ -17,12 +17,12 @@ private bool IsLevelFavouritedByUser(GameLevel level, GameUser user) => this._re .FirstOrDefault(r => r.Level == level && r.User == user) != null; [Pure] - public DatabaseList GetLevelsFavouritedByUser(GameUser user, int count, int skip, LevelFilterSettings levelFilterSettings) + public DatabaseList GetLevelsFavouritedByUser(GameUser user, int count, int skip, LevelFilterSettings levelFilterSettings, GameUser? accessor) => new(this._realm.All() .Where(r => r.User == user) .AsEnumerable() .Select(r => r.Level) - .FilterByLevelFilterSettings(null, levelFilterSettings) + .FilterByLevelFilterSettings(accessor, levelFilterSettings) .FilterByGameVersion(levelFilterSettings.GameVersion), skip, count); public bool FavouriteLevel(GameLevel level, GameUser user) @@ -131,12 +131,12 @@ private bool IsLevelQueuedByUser(GameLevel level, GameUser user) => this._realm. .FirstOrDefault(r => r.Level == level && r.User == user) != null; [Pure] - public DatabaseList GetLevelsQueuedByUser(GameUser user, int count, int skip, LevelFilterSettings levelFilterSettings) + public DatabaseList GetLevelsQueuedByUser(GameUser user, int count, int skip, LevelFilterSettings levelFilterSettings, GameUser? accessor) => new(this._realm.All() .Where(r => r.User == user) .AsEnumerable() .Select(r => r.Level) - .FilterByLevelFilterSettings(null, levelFilterSettings) + .FilterByLevelFilterSettings(accessor, levelFilterSettings) .FilterByGameVersion(levelFilterSettings.GameVersion), skip, count); public bool QueueLevel(GameLevel level, GameUser user) diff --git a/Refresh.GameServer/Database/GameDatabaseProvider.cs b/Refresh.GameServer/Database/GameDatabaseProvider.cs index 8d28a0f2..da119a66 100644 --- a/Refresh.GameServer/Database/GameDatabaseProvider.cs +++ b/Refresh.GameServer/Database/GameDatabaseProvider.cs @@ -34,7 +34,7 @@ protected GameDatabaseProvider(IDateTimeProvider time) this._time = time; } - protected override ulong SchemaVersion => 120; + protected override ulong SchemaVersion => 122; protected override string Filename => "refreshGameServer.realm"; diff --git a/Refresh.GameServer/Endpoints/ApiV3/DataTypes/Response/ApiLevelCategoryResponse.cs b/Refresh.GameServer/Endpoints/ApiV3/DataTypes/Response/ApiLevelCategoryResponse.cs index c6ab7d7b..e821f551 100644 --- a/Refresh.GameServer/Endpoints/ApiV3/DataTypes/Response/ApiLevelCategoryResponse.cs +++ b/Refresh.GameServer/Endpoints/ApiV3/DataTypes/Response/ApiLevelCategoryResponse.cs @@ -68,7 +68,7 @@ public static IEnumerable FromOldList(IEnumerable { - DatabaseList? list = category.Fetch(context, 0, 1, matchService, database, user, new LevelFilterSettings(context, TokenGame.Website)); + DatabaseList? list = category.Fetch(context, 0, 1, matchService, database, user, new LevelFilterSettings(context, TokenGame.Website), user); GameLevel? level = list?.Items.FirstOrDefault(); return FromOld(category, level); diff --git a/Refresh.GameServer/Endpoints/ApiV3/LevelApiEndpoints.cs b/Refresh.GameServer/Endpoints/ApiV3/LevelApiEndpoints.cs index cf8a1259..e76f37a3 100644 --- a/Refresh.GameServer/Endpoints/ApiV3/LevelApiEndpoints.cs +++ b/Refresh.GameServer/Endpoints/ApiV3/LevelApiEndpoints.cs @@ -53,7 +53,7 @@ public ApiListResponse GetLevels(RequestContext context, G DatabaseList? list = categories.Categories .FirstOrDefault(c => c.ApiRoute.StartsWith(route))? - .Fetch(context, skip, count, matchService, database, user, new LevelFilterSettings(context, TokenGame.Website)); + .Fetch(context, skip, count, matchService, database, user, new LevelFilterSettings(context, TokenGame.Website), user); if (list == null) return ApiNotFoundError.Instance; diff --git a/Refresh.GameServer/Endpoints/Game/Levels/LevelEndpoints.cs b/Refresh.GameServer/Endpoints/Game/Levels/LevelEndpoints.cs index d1b685fb..92f299e3 100644 --- a/Refresh.GameServer/Endpoints/Game/Levels/LevelEndpoints.cs +++ b/Refresh.GameServer/Endpoints/Game/Levels/LevelEndpoints.cs @@ -44,7 +44,7 @@ public class LevelEndpoints : EndpointGroup DatabaseList? levels = categoryService.Categories .FirstOrDefault(c => c.GameRoutes.Any(r => r.StartsWith(route)))? - .Fetch(context, skip, count, matchService, database, user, new LevelFilterSettings(context, token.TokenGame)); + .Fetch(context, skip, count, matchService, database, user, new LevelFilterSettings(context, token.TokenGame), user); if (levels == null) return null; @@ -137,7 +137,7 @@ public SerializedMinimalLevelResultsList GetLevelsFromCategory(RequestContext co DatabaseList? levels = categories.Categories .FirstOrDefault(c => c.ApiRoute.StartsWith(apiRoute))? - .Fetch(context, skip, count, matchService, database, user, new LevelFilterSettings(context, token.TokenGame)); + .Fetch(context, skip, count, matchService, database, user, new LevelFilterSettings(context, token.TokenGame), user); return new SerializedMinimalLevelResultsList(levels?.Items .Select(l => GameMinimalLevelResponse.FromOldWithExtraData(l, matchService, database, dataStore, token.TokenGame))!, levels?.TotalItems ?? 0, skip + count); diff --git a/Refresh.GameServer/Extensions/LevelEnumerableExtensions.cs b/Refresh.GameServer/Extensions/LevelEnumerableExtensions.cs index 5932940d..a3e9b030 100644 --- a/Refresh.GameServer/Extensions/LevelEnumerableExtensions.cs +++ b/Refresh.GameServer/Extensions/LevelEnumerableExtensions.cs @@ -66,6 +66,9 @@ public static IQueryable FilterByLevelFilterSettings(this IQueryable< // MoveFilterType.False => levels.Where(l => !l.MoveCompatible), // _ => throw new ArgumentOutOfRangeException() // }; + + // Filter out sub levels that weren't published by self + levels = levels.Where(l => !l.IsSubLevel || l.Publisher == user); return levels; } @@ -103,6 +106,9 @@ public static IEnumerable FilterByLevelFilterSettings(this IEnumerabl // MoveFilterType.False => levels.Where(l => !l.MoveCompatible), // _ => throw new ArgumentOutOfRangeException() // }; + + // Filter out sub levels that weren't published by self + levels = levels.Where(l => !l.IsSubLevel || l.Publisher?.UserId == user?.UserId); return levels; } diff --git a/Refresh.GameServer/Types/Levels/Categories/ByUserLevelCategory.cs b/Refresh.GameServer/Types/Levels/Categories/ByUserLevelCategory.cs index 555e51ff..22d1984e 100644 --- a/Refresh.GameServer/Types/Levels/Categories/ByUserLevelCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/ByUserLevelCategory.cs @@ -19,8 +19,8 @@ internal ByUserLevelCategory() : base("byUser", "by", true) } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? user) { // Prefer username from query, but fallback to user passed into this category if it's missing string? username = context.QueryString["u"]; @@ -28,6 +28,6 @@ internal ByUserLevelCategory() : base("byUser", "by", true) if (user == null) return null; - return database.GetLevelsByUser(user, count, skip, levelFilterSettings); + return database.GetLevelsByUser(user, count, skip, levelFilterSettings, accessor); } } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/ContestCategory.cs b/Refresh.GameServer/Types/Levels/Categories/ContestCategory.cs index be3005d1..06a9160c 100644 --- a/Refresh.GameServer/Types/Levels/Categories/ContestCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/ContestCategory.cs @@ -18,7 +18,7 @@ public ContestCategory() : base("contest", Array.Empty(), false) } public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, - GameDatabaseContext database, GameUser? user, LevelFilterSettings levelFilterSettings) + GameDatabaseContext database, GameUser? accessor, LevelFilterSettings levelFilterSettings, GameUser? _) { // try to find a contest by the query parameter string? contestId = context.QueryString["contest"]; @@ -31,6 +31,6 @@ public ContestCategory() : base("contest", Array.Empty(), false) if (contest == null) return null; - return database.GetLevelsFromContest(contest, count, skip, user, levelFilterSettings); + return database.GetLevelsFromContest(contest, count, skip, accessor, levelFilterSettings); } } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/CoolLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/CoolLevelsCategory.cs index 92cc4c0a..56021ed5 100644 --- a/Refresh.GameServer/Types/Levels/Categories/CoolLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/CoolLevelsCategory.cs @@ -17,8 +17,8 @@ public class CoolLevelsCategory : LevelCategory } public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, - GameDatabaseContext database, GameUser? user, LevelFilterSettings levelFilterSettings) + GameDatabaseContext database, GameUser? accessor, LevelFilterSettings levelFilterSettings, GameUser? _) { - return database.GetCoolLevels(count, skip, user, levelFilterSettings); + return database.GetCoolLevels(count, skip, accessor, levelFilterSettings); } } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/CurrentlyPlayingCategory.cs b/Refresh.GameServer/Types/Levels/Categories/CurrentlyPlayingCategory.cs index 330a0774..2fbd7b90 100644 --- a/Refresh.GameServer/Types/Levels/Categories/CurrentlyPlayingCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/CurrentlyPlayingCategory.cs @@ -18,7 +18,7 @@ internal CurrentlyPlayingCategory() : base("currentlyPlaying", "busiest", false) } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) - => database.GetBusiestLevels(count, skip, matchService, user, levelFilterSettings); + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) + => database.GetBusiestLevels(count, skip, matchService, accessor, levelFilterSettings); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/DeveloperLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/DeveloperLevelsCategory.cs index 16082f27..235b556d 100644 --- a/Refresh.GameServer/Types/Levels/Categories/DeveloperLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/DeveloperLevelsCategory.cs @@ -19,7 +19,7 @@ internal DeveloperLevelsCategory() : base("developer", Array.Empty(), fa } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) => database.GetDeveloperLevels(count, skip, levelFilterSettings); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/FavouriteSlotsByUserCategory.cs b/Refresh.GameServer/Types/Levels/Categories/FavouriteSlotsByUserCategory.cs index 3b090266..beea0532 100644 --- a/Refresh.GameServer/Types/Levels/Categories/FavouriteSlotsByUserCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/FavouriteSlotsByUserCategory.cs @@ -17,11 +17,11 @@ internal FavouriteSlotsByUserCategory() : base("hearted", "favouriteSlots", true this.IconHash = "g820611"; } - public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) + public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? user) { if (user == null) return null; - return database.GetLevelsFavouritedByUser(user, count, skip, levelFilterSettings); + return database.GetLevelsFavouritedByUser(user, count, skip, levelFilterSettings, accessor); } } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/HighestRatedLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/HighestRatedLevelsCategory.cs index 6d2d5738..bd4a5260 100644 --- a/Refresh.GameServer/Types/Levels/Categories/HighestRatedLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/HighestRatedLevelsCategory.cs @@ -18,7 +18,7 @@ internal HighestRatedLevelsCategory() : base("mostLiked", new[] { "thumbs", "hig } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) - => database.GetHighestRatedLevels(count, skip, user, levelFilterSettings); + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) + => database.GetHighestRatedLevels(count, skip, accessor, levelFilterSettings); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/LevelCategory.cs b/Refresh.GameServer/Types/Levels/Categories/LevelCategory.cs index 152b4876..49170816 100644 --- a/Refresh.GameServer/Types/Levels/Categories/LevelCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/LevelCategory.cs @@ -34,6 +34,6 @@ internal LevelCategory(string apiRoute, string[] gameRoutes, bool requiresUser) [JsonProperty] public readonly bool RequiresUser; [Pure] - public abstract DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings); + public abstract DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? user); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/MostHeartedLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/MostHeartedLevelsCategory.cs index 67facfd6..cd1db21a 100644 --- a/Refresh.GameServer/Types/Levels/Categories/MostHeartedLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/MostHeartedLevelsCategory.cs @@ -18,7 +18,7 @@ internal MostHeartedLevelsCategory() : base("mostHearted", "mostHearted", false) } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) - => database.GetMostHeartedLevels(count, skip, user, levelFilterSettings); + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) + => database.GetMostHeartedLevels(count, skip, accessor, levelFilterSettings); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/MostReplayedLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/MostReplayedLevelsCategory.cs index 429744d6..0bd3ed76 100644 --- a/Refresh.GameServer/Types/Levels/Categories/MostReplayedLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/MostReplayedLevelsCategory.cs @@ -18,7 +18,7 @@ internal MostReplayedLevelsCategory() : base("mostReplayed", "mostPlays", false) } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) - => database.GetMostReplayedLevels(count, skip, user, levelFilterSettings); + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) + => database.GetMostReplayedLevels(count, skip, accessor, levelFilterSettings); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/MostUniquelyPlayedLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/MostUniquelyPlayedLevelsCategory.cs index 42acd6fc..8479a1f7 100644 --- a/Refresh.GameServer/Types/Levels/Categories/MostUniquelyPlayedLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/MostUniquelyPlayedLevelsCategory.cs @@ -18,7 +18,7 @@ internal MostUniquelyPlayedLevelsCategory() : base("mostPlayed", "mostUniquePlay } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) - => database.GetMostUniquelyPlayedLevels(count, skip, user, levelFilterSettings); + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) + => database.GetMostUniquelyPlayedLevels(count, skip, accessor, levelFilterSettings); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/NewestLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/NewestLevelsCategory.cs index ebaeda2a..121eba63 100644 --- a/Refresh.GameServer/Types/Levels/Categories/NewestLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/NewestLevelsCategory.cs @@ -17,7 +17,7 @@ internal NewestLevelsCategory() : base("newest", "newest", false) this.FontAwesomeIcon = "calendar"; } - public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) - => database.GetNewestLevels(count, skip, user, levelFilterSettings); + public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) + => database.GetNewestLevels(count, skip, accessor, levelFilterSettings); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/QueuedLevelsByUserCategory.cs b/Refresh.GameServer/Types/Levels/Categories/QueuedLevelsByUserCategory.cs index ecdcebc8..81fab560 100644 --- a/Refresh.GameServer/Types/Levels/Categories/QueuedLevelsByUserCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/QueuedLevelsByUserCategory.cs @@ -17,11 +17,11 @@ internal QueuedLevelsByUserCategory() : base("queued", "lolcatftw", true) this.IconHash = "g820614"; } - public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) + public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? user) { if (user == null) return null; - return database.GetLevelsQueuedByUser(user, count, skip, levelFilterSettings); + return database.GetLevelsQueuedByUser(user, count, skip, levelFilterSettings, accessor); } } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/RandomLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/RandomLevelsCategory.cs index cb7390b7..8d76c8b2 100644 --- a/Refresh.GameServer/Types/Levels/Categories/RandomLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/RandomLevelsCategory.cs @@ -17,7 +17,7 @@ internal RandomLevelsCategory() : base("random", "lbp2luckydip", false) this.IconHash = "g820605"; } - public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) - => database.GetRandomLevels(count, skip, user, levelFilterSettings); + public override DatabaseList? Fetch(RequestContext context, int skip, int count, MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) + => database.GetRandomLevels(count, skip, accessor, levelFilterSettings); } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/SearchLevelCategory.cs b/Refresh.GameServer/Types/Levels/Categories/SearchLevelCategory.cs index 491a7112..06b9f9ac 100644 --- a/Refresh.GameServer/Types/Levels/Categories/SearchLevelCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/SearchLevelCategory.cs @@ -21,13 +21,13 @@ internal SearchLevelCategory() : base(SearchRoute, "search", false) } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) { string? query = context.QueryString["query"] ?? context.QueryString["textFilter"]; // LBP3 sends this instead of query if (query == null) return null; - return database.SearchForLevels(count, skip, user, levelFilterSettings, query); + return database.SearchForLevels(count, skip, accessor, levelFilterSettings, query); } } \ No newline at end of file diff --git a/Refresh.GameServer/Types/Levels/Categories/SerializedCategory.cs b/Refresh.GameServer/Types/Levels/Categories/SerializedCategory.cs index af2e6cde..52f1d98d 100644 --- a/Refresh.GameServer/Types/Levels/Categories/SerializedCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/SerializedCategory.cs @@ -55,7 +55,7 @@ public static SerializedCategory FromLevelCategory(LevelCategory levelCategory, { SerializedCategory category = FromLevelCategory(levelCategory); - DatabaseList categoryLevels = levelCategory.Fetch(context, skip, count, matchService, database, user, new LevelFilterSettings(context, token.TokenGame)); + DatabaseList categoryLevels = levelCategory.Fetch(context, skip, count, matchService, database, user, new LevelFilterSettings(context, token.TokenGame), user); IEnumerable levels = categoryLevels?.Items .Select(l => GameMinimalLevelResponse.FromOldWithExtraData(l, matchService, database, dataStore, token.TokenGame)) ?? Array.Empty(); diff --git a/Refresh.GameServer/Types/Levels/Categories/TeamPickedLevelsCategory.cs b/Refresh.GameServer/Types/Levels/Categories/TeamPickedLevelsCategory.cs index 14b1bc99..7d2f1f81 100644 --- a/Refresh.GameServer/Types/Levels/Categories/TeamPickedLevelsCategory.cs +++ b/Refresh.GameServer/Types/Levels/Categories/TeamPickedLevelsCategory.cs @@ -18,7 +18,7 @@ internal TeamPickedLevelsCategory() : base("teamPicks", "mmpicks", false) } public override DatabaseList? Fetch(RequestContext context, int skip, int count, - MatchService matchService, GameDatabaseContext database, GameUser? user, - LevelFilterSettings levelFilterSettings) - => database.GetTeamPickedLevels(count, skip, user, levelFilterSettings); + MatchService matchService, GameDatabaseContext database, GameUser? accessor, + LevelFilterSettings levelFilterSettings, GameUser? _) + => database.GetTeamPickedLevels(count, skip, accessor, levelFilterSettings); } \ No newline at end of file diff --git a/RefreshTests.GameServer/Tests/Levels/PublishEndpointsTests.cs b/RefreshTests.GameServer/Tests/Levels/PublishEndpointsTests.cs index ea8ac9dd..8890178d 100644 --- a/RefreshTests.GameServer/Tests/Levels/PublishEndpointsTests.cs +++ b/RefreshTests.GameServer/Tests/Levels/PublishEndpointsTests.cs @@ -413,7 +413,7 @@ public void UnpublishLevel() HttpResponseMessage message = client.PostAsync($"/lbp/unpublish/{level.LevelId}", new ReadOnlyMemoryContent(Array.Empty())).Result; Assert.That(message.StatusCode, Is.EqualTo(OK)); - DatabaseList levelsByUser = context.Database.GetLevelsByUser(user, 1, 0, new LevelFilterSettings(TokenGame.LittleBigPlanet3)); + DatabaseList levelsByUser = context.Database.GetLevelsByUser(user, 1, 0, new LevelFilterSettings(TokenGame.LittleBigPlanet3), user); Assert.That(levelsByUser.TotalItems, Is.EqualTo(0)); } @@ -442,7 +442,7 @@ public void CantUnpublishSomeoneElsesLevel() HttpResponseMessage message = client.PostAsync($"/lbp/unpublish/{level.LevelId}", new ReadOnlyMemoryContent(Array.Empty())).Result; Assert.That(message.StatusCode, Is.EqualTo(Unauthorized)); - DatabaseList levelsByUser = context.Database.GetLevelsByUser(user1, 1, 0, new LevelFilterSettings(TokenGame.LittleBigPlanet3)); + DatabaseList levelsByUser = context.Database.GetLevelsByUser(user1, 1, 0, new LevelFilterSettings(TokenGame.LittleBigPlanet3), user1); Assert.That(levelsByUser.TotalItems, Is.EqualTo(1)); } } \ No newline at end of file From 91c28770c4fb0c0204821b0255b43eddfa47c903 Mon Sep 17 00:00:00 2001 From: turecross321 <51852312+turecross321@users.noreply.github.com> Date: Tue, 23 Apr 2024 22:00:47 +0200 Subject: [PATCH 2/2] Revert SchemaVersion --- Refresh.GameServer/Database/GameDatabaseProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Refresh.GameServer/Database/GameDatabaseProvider.cs b/Refresh.GameServer/Database/GameDatabaseProvider.cs index da119a66..8d28a0f2 100644 --- a/Refresh.GameServer/Database/GameDatabaseProvider.cs +++ b/Refresh.GameServer/Database/GameDatabaseProvider.cs @@ -34,7 +34,7 @@ protected GameDatabaseProvider(IDateTimeProvider time) this._time = time; } - protected override ulong SchemaVersion => 122; + protected override ulong SchemaVersion => 120; protected override string Filename => "refreshGameServer.realm";