(
&self,
server_id: &str,
observed_unix_ms: i64,
players: i32,
)
| 471 | Dialect::Sqlite => { |
| 472 | "SELECT token_hash, last_seen_unix_ms FROM servers WHERE server_id = ?" |
| 473 | } |
| 474 | }; |
| 475 | let target = sqlx::query(&self.bind_sql(target_query)) |
| 476 | .bind(new_server_id) |
| 477 | .fetch_optional(&mut *transaction) |
| 478 | .await?; |
| 479 | if let Some(target) = target { |
| 480 | let target_hash = target.try_get::<Option<String>, _>(0)?; |
| 481 | let target_last_seen = target.try_get::<i64, _>(1)?; |
| 482 | if target_hash.as_deref() != Some(token_hash) |
| 483 | && now_unix_ms - target_last_seen < recovery_ms |
| 484 | { |
| 485 | transaction.rollback().await?; |
| 486 | return Ok(TokenRelocation::Conflict); |
| 487 | } |
| 488 | sqlx::query(&self.bind_sql("DELETE FROM servers WHERE server_id = ?")) |
| 489 | .bind(new_server_id) |
| 490 | .execute(&mut *transaction) |
| 491 | .await?; |
| 492 | } |
| 493 |
no test coverage detected