This commit is contained in:
2026-02-23 05:49:08 +01:00
parent c2fefd9904
commit d42d753a87
3 changed files with 864 additions and 205 deletions
Generated
+836 -191
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -4,13 +4,13 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
reqwest = { version = "0.13.2", features = ["json"] }
serde = { version = "1.0.228", features = ["serde_derive"] } serde = { version = "1.0.228", features = ["serde_derive"] }
serde_json = "1.0.149" serde_json = "1.0.149"
session-rs = "0.1.0" session-rs = "0.1.1"
sqlx = { version = "0.8.6", features = [ sqlx = { version = "0.8.6", features = [
"sqlite", "sqlite",
"runtime-tokio-native-tls", "runtime-tokio-native-tls",
"macros", "macros",
] } ] }
tokio = "1.49.0" tokio = "1.49.0"
ureq = { version = "3.2.0", features = ["json"] }
+26 -12
View File
@@ -8,7 +8,6 @@ use serde::{Deserialize, Serialize};
use session_rs::server::SessionServer; use session_rs::server::SessionServer;
use sqlx::SqlitePool; use sqlx::SqlitePool;
use tokio::sync::Mutex; use tokio::sync::Mutex;
use ureq::http::StatusCode;
use crate::user::User; use crate::user::User;
@@ -27,8 +26,15 @@ async fn main() -> session_rs::Result<()> {
println!("Connected"); println!("Connected");
let uuid: Arc<Mutex<String>> = Arc::new(Mutex::new(String::new())); let uuid: Arc<Mutex<String>> = Arc::new(Mutex::new(String::new()));
session.on_close(async || Ok(println!("Closed"))).await;
session.start_ping(
tokio::time::Duration::from_secs(30),
tokio::time::Duration::from_secs(5),
);
session session
.on::<methods::Auth, _>({ .on_request::<methods::Auth, _>({
let pool = Arc::clone(&pool); let pool = Arc::clone(&pool);
let uuid = Arc::clone(&uuid); let uuid = Arc::clone(&uuid);
@@ -37,7 +43,7 @@ async fn main() -> session_rs::Result<()> {
.await; .await;
session session
.on::<methods::BuyCloak, _>({ .on_request::<methods::BuyCloak, _>({
let uuid = Arc::clone(&uuid); let uuid = Arc::clone(&uuid);
let pool = Arc::clone(&pool); let pool = Arc::clone(&pool);
@@ -56,7 +62,7 @@ async fn main() -> session_rs::Result<()> {
.await; .await;
session session
.on::<methods::BuyHat, _>({ .on_request::<methods::BuyHat, _>({
let uuid = Arc::clone(&uuid); let uuid = Arc::clone(&uuid);
let pool = Arc::clone(&pool); let pool = Arc::clone(&pool);
@@ -75,7 +81,7 @@ async fn main() -> session_rs::Result<()> {
.await; .await;
session session
.on::<methods::SetCloak, _>({ .on_request::<methods::SetCloak, _>({
let uuid = Arc::clone(&uuid); let uuid = Arc::clone(&uuid);
let pool = Arc::clone(&pool); let pool = Arc::clone(&pool);
@@ -94,7 +100,7 @@ async fn main() -> session_rs::Result<()> {
.await; .await;
session session
.on::<methods::SetHat, _>({ .on_request::<methods::SetHat, _>({
let uuid = Arc::clone(&uuid); let uuid = Arc::clone(&uuid);
let pool = Arc::clone(&pool); let pool = Arc::clone(&pool);
@@ -130,12 +136,20 @@ async fn authenticate(
session_token: String, session_token: String,
pool: Arc<SqlitePool>, pool: Arc<SqlitePool>,
) -> Result<User, String> { ) -> Result<User, String> {
let mut response = ureq::get("https://api.minecraftservices.com/minecraft/profile") if !uuid.lock().await.is_empty() {
.header("Authorization", &format!("Bearer {session_token}")) return Err(format!("Already authenticated"));
.call() }
let client = reqwest::Client::new();
let response = client
.get("https://api.minecraftservices.com/minecraft/profile")
.bearer_auth(&session_token)
.send()
.await
.map_err(|_| "Failed to validate session".to_string())?; .map_err(|_| "Failed to validate session".to_string())?;
if response.status() != StatusCode::OK { if !response.status().is_success() {
return Err(format!( return Err(format!(
"Authentication failed with code {}", "Authentication failed with code {}",
response.status() response.status()
@@ -143,8 +157,8 @@ async fn authenticate(
} }
let auth: MinecraftAuthResponse = response let auth: MinecraftAuthResponse = response
.body_mut() .json()
.read_json() .await
.map_err(|_| "Unable to parse auth response".to_string())?; .map_err(|_| "Unable to parse auth response".to_string())?;
*uuid.lock().await = auth.id.clone(); *uuid.lock().await = auth.id.clone();