Port g0v0-server features to v2 branch#6
Merged
Conversation
- Replace S3/FileScoreStorage settings with g0v0 settings (EnableAllBeatmapLeaderboard, EnableAP, EnableRX) - Add JWT authentication settings (HS256 support alongside legacy RSA) - Add custom rulesets settings (RulesetsPath, CheckRulesetVersion) - Change DB env vars to MYSQL_HOST/MYSQL_USER/MYSQL_PORT/MYSQL_PASSWORD/MYSQL_DATABASE - Change default server port to 8086, database user to osu_api - Change SentryDsn env var to SP_SENTRY_DSN - Change BanchoBotUserId default to 2 - Simplify auth to single JWT scheme (remove lazer/referee dual-scheme) - Create AuthSettings.cs for JWT configuration - Update ConfigureJwtBearerOptions to support both HS256 and legacy RSA Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
Add BlobHelper, GameModeHelper, TimeHelper in Helpers/ Add RulesetExtensions in Extensions/ Add RulesetVersionEntry in Entities/ Add RulesetManager, RulesetInitializer in Services/ Add fail_time, beatmap_sync, playlist_best_score in Database/Models/ Add ServerScoreStorage in Storage/ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
…d code - database_beatmap: rename difficultyrating to difficulty_rating, add total_length - multiplayer_room: rename user_id to host_id - multiplayer_playlist_item: rename difficultyrating to difficulty_rating - room_category: add realtime enum value - database_match_type: remove ranked_play enum and switch cases - SoloScore: replace SoloScoreData/data with individual columns - matchmaking_pool_beatmap: remove playmode, ToPlaylistItem, rename difficultyrating - matchmaking_pool: remove type property and ToPoolType usage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
- Remove GetDelegatedResourceOwnerIdFromTokenAsync - Add roomId parameter to AnyScoreTokenExistsFor, GetAllScoresForPlaylistItem, GetPassingScoresForPlaylistItem, GetUserBestScoreAsync, GetUserRankInRoomAsync - Change GetUserBestScoreAsync return type to playlist_best_score? - Change GetUserRankInRoomAsync to accept playlistItemId and scoreId - Add new methods: GetBeatmapOrFetchAsync, GetBeatmapFailTimeAsync, UpdateFailTimeAsync, GetUserPlaytimeAsync, UpdateUserPlaytimeAsync, GetChangedBeatmapSetsAsync, UpdateUserOnlineStatusAsync Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
- Replace token auth with JWT sub claim parsing - Remove GetDelegatedResourceOwnerIdFromTokenAsync - Update user queries to use lazer_users table - Replace restriction check with user_account_history - Rename multiplayer_rooms to rooms throughout - Update beatmap queries for g0v0 schema (beatmaps table with mode strings) - Add GetBeatmapOrFetchAsync, fail_time, playtime, beatmap_sync methods - Change playlist tables to room_playlists with new ID generation - Update score queries to use playlist_best_scores and scores tables - Change relationship queries to use relationship/lazer_users tables - Return dummy values for build-related methods (no osu_builds table) - Return empty list for chat filters - Update connection string to use AppSettings.DatabasePassword/DatabaseName - Add UpdateUserOnlineStatusAsync method - Make AddLoginForUserAsync and ToggleUserPresenceAsync no-ops Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
… SharedInterop, MetadataHub, and MetadataBroadcaster Agent-Logs-Url: https://github.com/GooGuTeam/osu-server-spectator/sessions/fed5a5cd-8fc3-49ea-ac42-ef2d727bb19b Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
…tionExtensions Agent-Logs-Url: https://github.com/GooGuTeam/osu-server-spectator/sessions/fed5a5cd-8fc3-49ea-ac42-ef2d727bb19b Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Sync g0v0 specific features to v2 branch
Port g0v0-server features to v2 branch
Mar 26, 2026
…ger integration, failtime/playtime processing, RulesetHash headers, IMemoryCache migration, PlaymodeTypeHandler Agent-Logs-Url: https://github.com/GooGuTeam/osu-server-spectator/sessions/3007fd6f-d9b2-4454-9560-06c94ace4a05 Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
…nges - Rename multiplayer_room.user_id to host_id in all test files - Update GetAllScoresForPlaylistItem mock setups to use (long, long) signature - Update AnyScoreTokenExistsFor mock setup to use (long, long) signature - Add RulesetManager parameter to MultiplayerRoomController, MatchmakingQueueBackgroundService, ServerMultiplayerRoom.InitialiseAsync, and InitialiseMatchmakingRoomAsync calls - Add IConnectionMultiplexer parameter to MetadataHub and SpectatorHub constructors - Add RulesetManager + IConnectionMultiplexer to SpectatorHub constructor - Remove assertion on removed matchmaking_pool_beatmap.playmode field - Replace database_match_type.ranked_play with matchmaking in RankedPlayStageImplementationTest Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
…ks, RankedPlay type restored, RulesetManager throws InvalidStateException, ResultsStage callback params Agent-Logs-Url: https://github.com/GooGuTeam/osu-server-spectator/sessions/3007fd6f-d9b2-4454-9560-06c94ace4a05 Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
Agent-Logs-Url: https://github.com/GooGuTeam/osu-server-spectator/sessions/3007fd6f-d9b2-4454-9560-06c94ace4a05 Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
Copilot stopped work on behalf of
MingxuanGame due to an error
March 26, 2026 17:35
Copilot stopped work on behalf of
MingxuanGame due to an error
March 26, 2026 18:48
Copilot stopped work on behalf of
MingxuanGame due to an error
March 26, 2026 18:52
) * Allow referees to join matches via the lazer client to spectate * Allow referees to perform room management actions via multiplayer hub too * Do not allow referees to perform actions related to direct gameplay * Document spectating-while-refereeing & its limitations * Fix spectating referee being removed from users on leaving room inside client * Allow referee to start match from client even when not readied up * Fix referee's player state getting into half broken state if the room gets closed via referee commands * Re-do referee kick/leave pathways I realised that my previous fixes weren't going far enough and really to avoid breakage *any* departure of the referee from their refereed room should prompt a kick from spectate in lazer as well.
* Make `RefereeHub` inherit `LoggingHub` Mostly because I'm starting to look at sentry issues from the referee hub and noticing that they're missing the user ID which is useful information, and in other hubs it is supplied by `LoggingHub` and its related hub filter. It'll also add some datadog monitoring which may come in useful going forward as well. Not sure why I never did this. I think I convinced myself that the generics didn't work in my usage because of it being tied to `StatefulUserHub`, but on closer inspection, no, that's not the case. * Allow argument of `Roll` referee hub operation to be nullable Spotted via ppy#459. I reproduced this by calling `Roll(roomId, null)` from a JS client. You could argue that the user was at fault here for passing `null` rather than `{}` or something, but you could also argue that there's no reason not to make this work with a nullable for user convenience. While I'm not clairvoyant I can't see a future where rolling has a required parameter in it either.
… referee hub (ppy#463) * Add failing test * Use case insensitive comparisons when treating mod acronyms * Defensively convert mod acronyms to uppercase when validating
…, roll nullable, post-discard timing, mod casing fix) Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
7bab117eAllow referees to join matches via the lazer client to spectate (Allow referees to join matches via the lazer client to spectate ppy/osu-server-spectator#453)2850d902Allow argument of roll referee hub operation to be nullable (Allow argument of roll referee hub operation to be nullable ppy/osu-server-spectator#461)d5fc8841Reduce time spent at post-discard stage (Reduce time spent at post-discard stage ppy/osu-server-spectator#462)c8f31308Fix issues related to nonstandard casing of mod acronyms supplied via referee hub (Fix issues related to nonstandard casing of mod acronyms supplied via referee hub ppy/osu-server-spectator#463)[Authorize]attribute since REFEREE_CLIENT_SCHEME isn't in our auth config, adopted upstream'sLoggingHub<IRefereeHubClient>base class, kept ourRulesetManageraddition)Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.