diff --git a/Cargo.lock b/Cargo.lock index 977e03c..02c1d1f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" dependencies = [ - "bitflags 2.9.1", + "bitflags", "bytes", "futures-core", "futures-sink", @@ -29,7 +29,7 @@ dependencies = [ "actix-service", "actix-utils", "actix-web", - "bitflags 2.9.1", + "bitflags", "bytes", "derive_more 0.99.20", "futures-core", @@ -53,7 +53,7 @@ dependencies = [ "actix-service", "actix-utils", "base64 0.22.1", - "bitflags 2.9.1", + "bitflags", "brotli", "bytes", "bytestring", @@ -125,7 +125,7 @@ dependencies = [ "actix-utils", "futures-core", "futures-util", - "mio 1.0.3", + "mio", "socket2", "tokio", "tracing", @@ -517,12 +517,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.9.1" @@ -892,15 +886,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-queue" version = "0.3.12" @@ -1064,7 +1049,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b035a542cf7abf01f2e3c4d5a7acbaebfefe120ae4efc7bde3df98186e4b8af7" dependencies = [ - "bitflags 2.9.1", + "bitflags", "proc-macro2", "proc-macro2-diagnostics", "quote", @@ -1199,18 +1184,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "filetime" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] - [[package]] name = "flate2" version = "1.1.1" @@ -1254,15 +1227,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -1952,26 +1916,6 @@ version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - [[package]] name = "inout" version = "0.1.4" @@ -2053,26 +1997,6 @@ dependencies = [ "simple_asn1", ] -[[package]] -name = "kqueue" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - [[package]] name = "language-tags" version = "0.3.2" @@ -2153,17 +2077,6 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.9.1", - "libc", - "redox_syscall", -] - [[package]] name = "libsqlite3-sys" version = "0.30.1" @@ -2320,18 +2233,6 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - [[package]] name = "mio" version = "1.0.3" @@ -2363,34 +2264,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "normpath" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "notify" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" -dependencies = [ - "bitflags 2.9.1", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "log", - "mio 0.8.11", - "walkdir", - "windows-sys 0.48.0", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2585,24 +2458,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "oj_auth" -version = "0.4.0" -dependencies = [ - "clap", - "env_logger", - "git-version", - "hex", - "jsonwebtoken", - "libfj", - "log", - "rocket", - "rocket_dyn_templates", - "serde", - "steamworks", - "uuid", -] - [[package]] name = "oj_cdn" version = "0.4.0" @@ -3401,7 +3256,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.9.1", + "bitflags", ] [[package]] @@ -3575,7 +3430,7 @@ dependencies = [ name = "rlnl" version = "0.1.0" dependencies = [ - "bitflags 2.9.1", + "bitflags", "byteserde", "byteserde_derive", "sealed", @@ -3637,19 +3492,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "rocket_dyn_templates" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bbab919c9e67df3f7ac6624a32ef897df4cd61c0969f4d66f3ced0534660d7a" -dependencies = [ - "handlebars", - "normpath", - "notify", - "rocket", - "walkdir", -] - [[package]] name = "rocket_http" version = "0.5.1" @@ -3740,7 +3582,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -4298,7 +4140,7 @@ dependencies = [ "atoi", "base64 0.22.1", "bigdecimal", - "bitflags 2.9.1", + "bitflags", "byteorder", "bytes", "chrono", @@ -4345,7 +4187,7 @@ dependencies = [ "atoi", "base64 0.22.1", "bigdecimal", - "bitflags 2.9.1", + "bitflags", "byteorder", "chrono", "crc", @@ -4436,24 +4278,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "steamworks" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a79d6f059322f73a4586cc2d0ca595ce1583104b2b1574ae1bb87f2c05bf4c67" -dependencies = [ - "bitflags 1.3.2", - "lazy_static", - "steamworks-sys", - "thiserror 1.0.69", -] - -[[package]] -name = "steamworks-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef6b00f8fe8eaaaff22cb9b70822a48c1a5d772bc682c202a57c0b438175845" - [[package]] name = "stringprep" version = "0.1.5" @@ -4682,7 +4506,7 @@ dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.3", + "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", @@ -5005,8 +4829,6 @@ version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" dependencies = [ - "getrandom 0.2.15", - "rand 0.8.5", "serde", ] @@ -5435,7 +5257,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ - "bitflags 2.9.1", + "bitflags", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 4a88bf7..ac18efd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ readme = "README.md" [workspace] members = [ - "auth", "cdn", + "cdn", "rc_auth", "polariton_auth", "rc_services", "rc_services_room", diff --git a/README.md b/README.md index 06c5bde..cb607a7 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,14 @@ # OpenJam Servers [![Revolt chat](https://img.shields.io/revolt/invite/jtVE0pD5?label=chat&style=flat-square)](https://rvlt.gg/jtVE0pD5) -[![release version](https://img.shields.io/gitea/v/release/OpenJam/servers?gitea_url=https%3A%2F%2Fgit.ngram.ca%2F&style=flat-square&label=release)](https://git.ngram.ca/OpenJam/servers/releases) -[![indev version](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fgit.ngram.ca%2FOpenJam%2Fservers%2Fraw%2Fbranch%2Fmain%2FCargo.toml&query=workspace.package.version&label=indev&style=flat-square)](#) +[![release version](https://img.shields.io/gitea/v/release/OpenJam/servers?gitea_url=https%3A%2F%2Fgit.ngram.ca%2F&style=flat-square&label=release)](https://git.ngram.ca/OpenJam/rc-servers/releases) +[![indev version](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fgit.ngram.ca%2FOpenJam%2Frc-servers%2Fraw%2Fbranch%2Fmain%2FCargo.toml&query=workspace.package.version&label=indev&style=flat-square)](#) A collection of open source servers for FreeJam games ## Usage -### CardLife - -To get CardLife to use these servers, replace the `ServerConfig.json` file in the game files with [this ServerConfig.json](assets/cardlife/ServerConfig.json). - -### Robocraft - NOTE: Please refer to the latest [release](./releases) for more detailed instructions for accessing the public OpenJam servers. To get Robocraft to use these servers, place [this servenvmulti.config](assets/robocraft/servenvmulti.config) file in the game files. @@ -25,9 +19,9 @@ Before you can login the first time, you will need to create an account through ## Privacy The minimum amount of data is (and should be) collected to provide the expected functionality. -In most cases, this means no data is collected or logged except some debug log messages in development versions. +This means no data is collected or logged except some debug log messages in development versions. Some personal identifiers, such as IP addresses and session tokens, are sent but only exist ephemerally. -The exception is Robocraft servers, which store the minimum account info possible. +The Robocraft servers store the minimum account info possible. This includes username, vehicle data, user configuration data, and other non-identifying gameplay data. If email and/or Steam account identifier are provided during registration, those are also stored. This information is all associated with a unique user identifier. @@ -35,7 +29,7 @@ The current PC's MAC address is also sent to the server (this is a Robocraft cli ## Development -Please refer to the [wiki](/OpenJam/servers/wiki/Dev). +Please refer to the [wiki](/OpenJam/rc-servers/wiki/Dev). ## Contributing diff --git a/assets/cardlife/ServerConfig.json b/assets/cardlife/ServerConfig.json deleted file mode 100644 index 1b54aa6..0000000 --- a/assets/cardlife/ServerConfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "AuthUrl": "https://live-auth.cl.ngram.ca/api/", - "LobbyUrl": "https://live-lobby.cl.ngram.ca/api/", - "InventoryUrl": "https://live-save.cl.ngram.ca/api/", - "FallbackAuthUrl": "https://proxy.cl.ngram.ca:8010/api/", - "FallbackLobbyUrl": "https://proxy.cl.ngram.ca:8030/api/", - "FallbackInventoryUrl": "https://proxy.cl.ngram.ca:8020/api/", - "GameServerPath": "/", - "GameServerExe": "/CardlifeGameServer.exe", - "PhotonUrl": "http://photon.cardlifegame.com" -} diff --git a/assets/cardlife/ServerConfig.json.local b/assets/cardlife/ServerConfig.json.local deleted file mode 100644 index f1fec58..0000000 --- a/assets/cardlife/ServerConfig.json.local +++ /dev/null @@ -1,11 +0,0 @@ -{ - "AuthUrl": "http://127.0.0.1:8001/api/", - "LobbyUrl": "http://127.0.0.1:8002/api/", - "InventoryUrl": "http://127.0.0.1:8003/api/", - "FallbackAuthUrl": "https://proxy.cl.ngni.us:8010/api/", - "FallbackLobbyUrl": "https://proxy.cl.ngni.us:8030/api/", - "FallbackInventoryUrl": "https://proxy.cl.ngni.us:8020/api/", - "GameServerPath": "/", - "GameServerExe": "/CardlifeGameServer.exe", - "PhotonUrl": "http://photon.cardlifegame.com" -} diff --git a/auth/Cargo.toml b/auth/Cargo.toml deleted file mode 100644 index 750e6d8..0000000 --- a/auth/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "oj_auth" -version.workspace = true -edition.workspace = true -readme.workspace = true -license.workspace = true -repository.workspace = true -authors.workspace = true - -[features] -steam = ["steamworks"] -cardlife = [] -default = ["cardlife"] - -[dependencies] -rocket.workspace = true -rocket_dyn_templates = { version = "0.2", features = [ "handlebars" ] } -libfj.workspace = true -log.workspace = true -env_logger.workspace = true -uuid = { version = "1.12", features = [ "v4", "fast-rng" ] } -steamworks = { version = "0.11", optional = true } -hex = "0.4" -jsonwebtoken = "9" -clap.workspace = true -serde.workspace = true -git-version.workspace = true diff --git a/auth/Rocket.toml b/auth/Rocket.toml deleted file mode 100644 index c17d5ef..0000000 --- a/auth/Rocket.toml +++ /dev/null @@ -1,13 +0,0 @@ -## defaults for _all_ profiles -[default] -address = "127.0.0.1" -port = 8001 -template_dir = "../assets/templates/" - -## set only when compiled in debug mode, i.e, `cargo build` -[debug] -port = 8001 - -## set only when compiled in release mode, i.e, `cargo build --release` -[release] -address = "0.0.0.0" diff --git a/auth/run_debug.sh b/auth/run_debug.sh deleted file mode 100755 index a6e46e5..0000000 --- a/auth/run_debug.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -RUST_LOG=debug cargo run diff --git a/auth/src/cardlife/email.rs b/auth/src/cardlife/email.rs deleted file mode 100644 index e16608e..0000000 --- a/auth/src/cardlife/email.rs +++ /dev/null @@ -1,12 +0,0 @@ -use rocket::{post, routes, serde::json::Json}; - -#[post("/api/auth/authenticate", data = "")] -pub fn email_password_auth(body: Json) -> Json { - todo!() -} - -pub fn stage() -> rocket::fairing::AdHoc { - rocket::fairing::AdHoc::on_ignite("CardLife Email/Password", |rocket| async { - rocket.mount("/", routes![email_password_auth]) - }) -} diff --git a/auth/src/cardlife/mod.rs b/auth/src/cardlife/mod.rs deleted file mode 100644 index f3616af..0000000 --- a/auth/src/cardlife/mod.rs +++ /dev/null @@ -1,15 +0,0 @@ -#[allow(unused_variables)] -mod email; -mod steam; -mod temporary_get_user_id; -#[allow(unused_variables)] -mod token; - -pub fn stage() -> rocket::fairing::AdHoc { - rocket::fairing::AdHoc::on_ignite("cardlife", |rocket| async { - rocket.attach(email::stage()) - .attach(steam::stage()) - .attach(temporary_get_user_id::stage()) - .attach(token::stage()) - }) -} diff --git a/auth/src/cardlife/steam.rs b/auth/src/cardlife/steam.rs deleted file mode 100644 index da928a8..0000000 --- a/auth/src/cardlife/steam.rs +++ /dev/null @@ -1,35 +0,0 @@ -use rocket::{post, routes, serde::json::Json, http::Status}; - -#[post("/api/auth/steamauthenticate", data = "")] -pub fn steam_auth(body: Json) -> Result, Status> { - log::debug!("steam ticket: {}", body.steam_ticket); - let steam_id = crate::common::steam_utils::authenticate_steam_ticket(&body.steam_ticket) - .map_err(|_| Status { code: 400 })?; - log::debug!("Found steamId {}", steam_id); - Ok(Json(libfj::cardlife::AuthenticationInfo { - public_id: uuid::Uuid::from_u64_pair(steam_id, steam_id).to_string(), - email_address: "nobody@openjamgames.com".to_string(), - display_name: steam_id.to_string(), - purchases: vec![1, 2, 3], - flags: vec![], - /*flags: //vec![ - "Dev".to_string(), - "GiveInv".to_string(), - "NoDrop".to_string(), - "DelStruct".to_string(), - "BucketA".to_string(), - "BucketB".to_string(), - "userlogged".to_string(), - ],*/ - confirmed: true, - token: uuid::Uuid::from_u64_pair(steam_id, steam_id).to_string(), - steam_id: Some(steam_id.to_string()), - id: (steam_id & (i32::MAX as u64)) as i32, - })) -} - -pub fn stage() -> rocket::fairing::AdHoc { - rocket::fairing::AdHoc::on_ignite("CardLife Steam", |rocket| async { - rocket.mount("/", routes![steam_auth]) - }) -} diff --git a/auth/src/cardlife/temporary_get_user_id.rs b/auth/src/cardlife/temporary_get_user_id.rs deleted file mode 100644 index d50dae4..0000000 --- a/auth/src/cardlife/temporary_get_user_id.rs +++ /dev/null @@ -1,18 +0,0 @@ -//! Not a temporary file, this is the name of the endpoint -use rocket::{post, routes, serde::json::Json}; - -#[post("/api/auth/temporarygetuserid", data = "")] -pub fn temp_migration(body: Json) -> Json { - let steam_id = uuid::Uuid::parse_str(&body.public_id).map(|guid| guid.as_u64_pair().0).unwrap_or(123456); - Json(libfj::cardlife::TempGetUserIdResponse { - public_id: body.public_id.to_owned(), - token: body.token.to_owned(), - user_id: (steam_id & (i32::MAX as u64)) as i32, - }) -} - -pub fn stage() -> rocket::fairing::AdHoc { - rocket::fairing::AdHoc::on_ignite("CardLife Temp UserId", |rocket| async { - rocket.mount("/", routes![temp_migration]) - }) -} diff --git a/auth/src/cardlife/token.rs b/auth/src/cardlife/token.rs deleted file mode 100644 index 00a12cd..0000000 --- a/auth/src/cardlife/token.rs +++ /dev/null @@ -1,12 +0,0 @@ -use rocket::{post, routes, serde::json::Json}; - -#[post("/api/auth/token", data = "")] -pub fn token_auth(body: Json) -> Json { - todo!() -} - -pub fn stage() -> rocket::fairing::AdHoc { - rocket::fairing::AdHoc::on_ignite("CardLife Token", |rocket| async { - rocket.mount("/", routes![token_auth]) - }) -} diff --git a/auth/src/common/cli.rs b/auth/src/common/cli.rs deleted file mode 100644 index 2d6f3d4..0000000 --- a/auth/src/common/cli.rs +++ /dev/null @@ -1,23 +0,0 @@ -use clap::Parser; - -#[derive(Parser, Debug)] -#[command(version, about, long_about = None)] -pub struct CliArgs { - /// Robocraft asset data root - #[arg(long, default_value_t = {"../assets/robocraft".to_string()})] - pub assets_robocraft: String, -} - -impl CliArgs { - pub fn get() -> Self { - Self::parse() - } - - pub async fn preloaded(self) -> Config { - Config { - } - } -} - -pub struct Config { -} diff --git a/auth/src/common/mod.rs b/auth/src/common/mod.rs deleted file mode 100644 index cf26091..0000000 --- a/auth/src/common/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub(crate) mod steam_utils; -pub(crate) mod cli; diff --git a/auth/src/common/steam_utils.rs b/auth/src/common/steam_utils.rs deleted file mode 100644 index 1f8ea31..0000000 --- a/auth/src/common/steam_utils.rs +++ /dev/null @@ -1,87 +0,0 @@ -fn get_u64_with_offset(arr: &[u8], start: usize) -> u64 { - let arr_actual: [u8; 8] = [ - arr[start], - arr[start+1], - arr[start+2], - arr[start+3], - arr[start+4], - arr[start+5], - arr[start+6], - arr[start+7], - ]; - u64::from_le_bytes(arr_actual) -} - -#[allow(dead_code)] -fn get_steam_id_from_ticket_hex(hex_ticket: &str) -> Result { - let decoded_ticket = hex::decode(hex_ticket)?; - if decoded_ticket.len() < 72 { - Err(hex::FromHexError::InvalidStringLength) - } else { - Ok(get_steam_id_from_ticket(&decoded_ticket)) - } -} - -#[allow(dead_code)] -fn get_steam_id_from_ticket(ticket: &[u8]) -> u64 { - get_u64_with_offset(ticket, 12 /* also at 64 ??? */) // should be 76600000000000000 > number > 76500000000000000 -} - -#[cfg(all(feature = "steam", feature = "cardlife"))] -const STEAM_ID: &str = "920690"; // Cardlife steam app id - -#[cfg(feature = "steam")] -static STEAM_SERVER: std::sync::OnceLock = std::sync::OnceLock::new(); - -#[cfg(feature = "steam")] -fn init_steam() -> steamworks::Server { - if let Err(e) = std::fs::write::<&str, &[u8]>("./steam_appid.txt", STEAM_ID.as_ref()) { - log::error!("Failed to write appId to steam_appid.txt: {}", e); - } - let (server, single_client) = steamworks::Server::init(core::net::Ipv4Addr::new(127, 0, 0, 1), 9000, 9001, steamworks::ServerMode::NoAuthentication, "") - .expect("Steam is unavailable"); - std::thread::spawn(move || { - loop { - single_client.run_callbacks(); - std::thread::sleep(std::time::Duration::from_millis(10)); - } - }); - server.set_product(STEAM_ID); - server.log_on_anonymous(); - server -} - -#[cfg(feature = "steam")] -fn get_steam() -> &'static steamworks::Server { - STEAM_SERVER.get_or_init(init_steam) -} - -#[cfg(not(feature = "steam"))] -pub fn authenticate_steam_ticket(hex_ticket: &str) -> Result { - get_steam_id_from_ticket_hex(hex_ticket) - .map_err(|e| { - log::error!("Failed to parse steamId: {}", e); - - }) -} - -#[cfg(feature = "steam")] -pub fn authenticate_steam_ticket(hex_ticket: &str) -> Result { - let decoded_ticket = hex::decode(hex_ticket) - .map_err(|e| { - log::error!("Failed to decode hexadecimal steam ticket: {}", e); - () - })?; - if decoded_ticket.len() < 72 { - log::error!("Failed to parse steamId: ticket too short"); - return Err(()) - } - let steam_id = get_steam_id_from_ticket(&decoded_ticket); - let steam = get_steam(); - steam.begin_authentication_session(steamworks::SteamId::from_raw(steam_id), &decoded_ticket) - .map_err(|e| { - log::error!("steam server auth session error: {}", e); - () - })?; - Ok(steam_id) -} diff --git a/auth/src/main.rs b/auth/src/main.rs deleted file mode 100644 index 661c915..0000000 --- a/auth/src/main.rs +++ /dev/null @@ -1,31 +0,0 @@ -#![forbid(unsafe_code)] -mod common; - -#[cfg(feature = "cardlife")] -mod cardlife; - -#[rocket::get("/")] -fn index() -> String { - let name = env!("CARGO_PKG_NAME"); - let version = env!("CARGO_PKG_VERSION"); - let git_version = git_version::git_version!(args = ["--always", "--dirty=+"]); - let authors = env!("CARGO_PKG_AUTHORS"); - let license = env!("CARGO_PKG_LICENSE"); - let repo = env!("CARGO_PKG_REPOSITORY"); - format!("{} {}:{} by [{}]\n{}\n{}", name, version, git_version, authors, license, repo) -} - -#[rocket::launch] -async fn rocket() -> _ { - env_logger::init(); - let args = common::cli::CliArgs::get(); - #[allow(unused_mut)] - let mut builder = rocket::build().mount("/", rocket::routes![index]) - .manage(args.preloaded().await); - - #[cfg(feature = "cardlife")] - {builder = builder.attach(cardlife::stage());} - - builder -} -