1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-01 05:42:57 +08:00
Commit Graph

1153 Commits

Author SHA1 Message Date
Dan Balasescu
8400726887
Move bindables to OsuConfigManager & SessionStatics 2025-01-16 19:33:42 +09:00
Dan Balasescu
c1f0c47586
Allow setting of DummyAPIAccess status 2025-01-16 17:06:54 +09:00
Dan Balasescu
b54d959263
Expose as IBindable from IAPIProvider, writes via config 2025-01-16 17:05:18 +09:00
Dan Balasescu
b7a9b77efe
Make config the definitive status value 2025-01-15 00:01:19 +09:00
Dan Balasescu
20108e3b74
Remove Status and Activity bindables from APIUser
As for the tests, I'm (ab)using the `IsOnline` state for the time being
to restore functionality.
2025-01-14 23:45:30 +09:00
Dean Herbert
91fa2e70d8
Revert name change 2025-01-14 20:41:18 +09:00
Dean Herbert
3523a2fe61
Merge branch 'master' into api-startup-state 2025-01-14 20:39:05 +09:00
Dan Balasescu
f2b7984e5a
Merge pull request #31507 from peppy/api-startup-user
Ensure API starts up with `LocalUser` in correct state
2025-01-14 20:36:55 +09:00
Dean Herbert
b4d054fdc0
Merge pull request #31444 from smoogipoo/friend-presence-2
Add notifications for when friends go online or offline
2025-01-14 18:58:19 +09:00
Dean Herbert
55ae0403d8
Ensure API state is Connecting immediately on startup when credentials are present
Currently, there's a period where the API is `Offline` even though it is
about to connect (as soon as the `run` thread starts up).

This can cause any `Queue`d requests to fail if they arrive too early.

To avoid this, let's ensure the `Connecting` state is set as early as
possible.
2025-01-14 18:18:53 +09:00
Dan Balasescu
156207d347
Remove unused using 2025-01-14 17:54:40 +09:00
Dan Balasescu
51c7c218bf
Simplify operations on local list 2025-01-14 17:52:26 +09:00
Dean Herbert
f6073d4ac0
Ensure API starts up with LocalUser in correct state
I noticed in passing that in a very edge case scenario where the API's
`run` thread doesn't run before it is loaded into the game, something
could access it and get a guest `LocalUser` when the local user actually
has a valid login.

Put another way, the `protected HasLogin` could be `true` while
`LocalUser` is `Guest`.

I think we want to avoid this, so I've moved the initial set of the
local user earlier in the initialisation process.

If this is controversial in any way, the PR can be closed and we can
assume no one is ever going to run into this scenario (or that it
doesn't matter enough even if they did).
2025-01-14 17:43:43 +09:00
Dan Balasescu
7268b2e077
Add separate path for friend presence notifications
It proved to be too difficult to deal with the flow that clears user
states on stopping the watching of global presence updates. It's not
helped in the least that friends are updated via the API, so there's a
third flow to consider (and the timings therein - both server-spectator
and friends are updated concurrently).

Simplest is to separate the friends flow, though this does mean some
logic and state duplication.
2025-01-09 17:31:01 +09:00
Dean Herbert
d5f2bdf6cd
Appease message pack new inspections 2025-01-08 03:13:29 +09:00
Dan Balasescu
51b62a6d8e
Display notification on friend presence changes 2025-01-07 19:12:33 +09:00
Bartłomiej Dach
2e6f43a75d
Merge branch 'master' into close-playlists 2024-11-28 14:01:36 +01:00
Bartłomiej Dach
a679f0736e
Add ability to close playlists within grace period after creation 2024-11-20 12:36:12 +01:00
Salman Alshamrani
caf56afba6 Fix various test failures 2024-11-17 19:13:29 -05:00
Salman Alshamrani
4a628287e2 Decouple game-wide ruleset bindable and refactor LocalUserStatisticsProvider
This also throws away the logic of updating
`API.LocalUser.Value.Statistics`. Components should rely on
`LocalUserStatisticsProvider` instead for proper behaviour and ability
to update on statistics updates.
2024-11-17 18:13:37 -05:00
Dean Herbert
0760451f3f
Merge branch 'master' into user-statistics-provider 2024-11-13 15:21:55 +09:00
cdwcgt
c576fd8448
add AddFriendResponse 2024-11-05 15:55:42 +08:00
cdwcgt
fbe6077ec2
rename FriendDeleteRequest to DeleteFriendRequest 2024-11-01 19:17:25 +08:00
cdwcgt
21b1c799f3
rename FriendAddRequest to AddFriendRequest 2024-11-01 19:16:56 +08:00
cdwcgt
729c7f11a9
add StringEnumConverter for RelationType 2024-11-01 19:15:20 +08:00
cdwcgt
0b2f4facac
add test 2024-11-01 14:05:24 +08:00
cdwcgt
69b5bd3b50
Fix existing friend logic 2024-11-01 12:53:13 +08:00
cdwcgt
bf53833b7b
add API model and request 2024-11-01 12:52:37 +08:00
Bartłomiej Dach
7e3564cb4a
Bring back matching by filename when performing online metadata lookups 2024-10-30 10:25:20 +01:00
Bartłomiej Dach
776fabd77c
Only use MD5 when performing metadata lookups
Both online and offline using the cache.

The rationale behind this change is that in the current state of
affairs, `TestPartiallyMaliciousSet()` fails in a way that cannot be
reconciled without this sort of change.

The test exercises a scenario where the beatmap being imported has an
online ID in the `.osu` file, but its hash does not match the online
hash of the beatmap. This turns out to be a more frequent scenario than
envisioned because of users doing stupid things with manual file editing
rather than reporting issues properly.

The scenario is realistic only because the behaviour of the endpoint
responsible for looking up beatmaps is such that if multiple parameters
are given (e.g. all three of beatmap MD5, online ID, and filename), it
will try the three in succession:

	f6b341813b/app/Http/Controllers/BeatmapsController.php (L260-L266)

and the local metadata cache implementation reflected this
implementation.

Because online ID and filename are inherently unreliable in this
scenario due to being directly manipulable by clueless or malicious
users, neither should not be used as a fallback.
2024-10-30 08:12:30 +01:00
Salman Alshamrani
2fd495228c Fix post-merge errors 2024-10-25 02:38:01 -04:00
Salman Alshamrani
701fb565b1 Merge branch 'master' into user-statistics-provider 2024-10-25 01:35:24 -04:00
Bartłomiej Dach
1744566def
Clarify xmldoc 2024-10-08 14:46:53 +02:00
Bartłomiej Dach
3d06d67fec
Add GET /users/lookup request type 2024-10-08 14:05:09 +02:00
Bartłomiej Dach
e91c8fb4bd
Properly disable comment box on beatmaps that cannot be commented on
Closes https://github.com/ppy/osu/issues/30052.

Compare:

- 83816dbe24/resources/js/components/comment-editor.tsx (L54-L60)
- 83816dbe24/resources/js/components/comment-editor.tsx (L47-L52)
2024-09-30 11:02:00 +02:00
Dean Herbert
6fc60908c0
Trigger request failure on receiving a null response for a typed APIRequest 2024-09-05 01:00:23 +09:00
Bartłomiej Dach
8ffd4aa82c
Fix NRT inspections 2024-08-30 13:41:34 +02:00
Dean Herbert
2d745fb67e
Apply NRT to APIRequest 2024-08-30 18:35:31 +09:00
Dean Herbert
07611bd8f5
Use IAPIProvider interface and correctly support scheduling from DummyAPIAccess 2024-08-30 18:35:31 +09:00
Dean Herbert
5836f497ac
Provide API context earlier to api requests in order to fix missing schedules
Closes https://github.com/ppy/osu/issues/29546.
2024-08-30 18:10:36 +09:00
Dean Herbert
310def64f4
Merge branch 'master' into user-profile-daily-challenge-streak-display 2024-08-02 15:40:46 +09:00
Dean Herbert
11265538c4
Reset online status on logout 2024-07-29 20:06:30 +09:00
Dean Herbert
c142adf926
Fix online status not persisting correctly
Regressed at some point.

I don't see much reason not to link the bindable directly with config.
It seems to work as you'd expect. Tested with logout (resets to
"Online") and connection failure (persists).

Closes https://github.com/ppy/osu/issues/29173.
2024-07-29 20:06:27 +09:00
Salman Ahmed
0c89210bd7 Add API models for daily challenge statistics 2024-07-28 05:24:05 +03:00
Bartłomiej Dach
dd8be62d07
Merge pull request #28849 from frenzibyte/custom-profile-colour
Add custom hue support to user profile overlay
2024-07-22 09:41:32 +02:00
Salman Ahmed
102da0f98c Remove incorrect [CanBeNull] attribute 2024-07-17 23:58:38 +03:00
Bartłomiej Dach
3006bae0d8
Send client-generated session GUID for identification purposes
This is the first half of a change that *may* fix
https://github.com/ppy/osu/issues/26338 (it definitely fixes *one case*
where the issue happens, but I'm not sure if it will cover all of them).

As described in the issue thread, using the `jti` claim from the JWT
used for authorisation seemed like a decent idea. However, upon closer
inspection the scheme falls over badly in a specific scenario where:

1. A client instance connects to spectator server using JWT A.

2. At some point, JWT A expires, and is silently rotated by the game in
   exchange for JWT B.

   The spectator server knows nothing of this, and continues to only
   track JWT A, including the old `jti` claim in said JWT.

3. At some later point, the client's connection to one of the spectator
   server hubs drops out. A reconnection is automatically attempted,
   *but* it is attempted using JWT B.

   The spectator server was not aware of JWT B until now, and said JWT
   has a different `jti` claim than the old one, so to the spectator
   server, it looks like a completely different client connecting, which
   boots the user out of their account.

This PR adds a per-session GUID which is sent in a HTTP header on every
connection attempt to spectator server. This GUID will be used instead
of the `jti` claim in JWTs as a persistent identifier of a single user's
single lazer session, which bypasses the failure scenario described
above.

I don't think any stronger primitive than this is required. As far as I
can tell this is as strong a protection as the JWT was (which is to say,
not *very* strong), and doing this removes a lot of weird complexity
that would be otherwise incurred by attempting to have client ferry all
of its newly issued JWTs to the server so that it can be aware of them.
2024-07-17 15:56:41 +02:00
Salman Ahmed
3eaac11b44 Add profile hue attribute to API model 2024-07-13 11:26:45 +03:00
Dean Herbert
f3bc944ac8
Remove using statement 2024-05-30 17:45:32 +09:00
Dean Herbert
36d7775032
Fix typo in IAPIProvider xmldoc 2024-05-30 17:38:05 +09:00