Harden minecraft-server-play analytics (#5484)

* Harden minecraft-server-play analytics

* Verify based on mc token

* Fail for non-server projects

* Nitpicks and factor out HTTP client

* Allow passing old minecraft_uuid field for clients

* Remove server play analytics test since it relies on auth against Minecraft API which I don't want to mock :(

* Switch to using hasJoined for uuid validation

* Fix formatting

* Fix sessionserver status code

* Ensure profile name and queried username matches

* replace some wrap_request_errs with internal errs

* add HTTP client into web::Data

* short timeout on client-side session join query

* further fixes

* sqlx prepare

* fix clippy

---------

Co-authored-by: Creeperkatze <178587183+Creeperkatze@users.noreply.github.com>
Co-authored-by: aecsocket <aecsocket@tutanota.com>
This commit is contained in:
Arthur
2026-03-09 17:26:15 +01:00
committed by GitHub
parent 4a0c610fc5
commit 73abe272d1
18 changed files with 310 additions and 89 deletions

View File

@@ -1,11 +1,8 @@
use actix_http::StatusCode;
use actix_web::test;
use ariadne::ids::base62_impl::parse_base62;
use chrono::{DateTime, Duration, Utc};
use common::permissions::PermissionsTest;
use common::permissions::PermissionsTestContext;
use common::{
api_common::Api,
api_v3::ApiV3,
database::*,
environment::{TestEnvironment, with_test_environment},
@@ -248,26 +245,3 @@ pub async fn permissions_analytics_revenue() {
)
.await;
}
#[actix_rt::test]
pub async fn analytics_minecraft_server_play_ingest() {
with_test_environment(
None,
|test_env: TestEnvironment<ApiV3>| async move {
let api = &test_env.api;
let project_id = test_env.dummy.project_alpha.project_id.clone();
let req = test::TestRequest::post()
.uri("/analytics/minecraft-server-play")
.append_header(("Authorization", USER_USER_PAT.unwrap()))
.set_json(serde_json::json!({
"project_id": project_id,
"minecraft_uuid": "12345678-1234-5678-1234-567812345678"
}))
.to_request();
let resp = api.call(req).await;
assert_status!(&resp, StatusCode::NO_CONTENT);
},
)
.await;
}