Add Arc CRF username spoofing

This commit is contained in:
NG (Graham) committed 2025-10-06 23:02:08 -04:00
1 parent 5fc8b9a571
commit ade535e556
10 files changed
+18 -10

No files matched your search

Generated
+1
View File
@@ -2581,6 +2581,7 @@ dependencies = [
"async-trait",
"base64 0.22.1",
"chrono",
"hex",
"libfj",
"log",
"sea-orm",
+2
View File
@@ -46,3 +46,5 @@ chrono = "0.4"
git-version = "0.3"
rand = { version = "0.9", features = [ "thread_rng" ] }
num-quaternion = "1.0"
hex = "0.4"
base64 = "0.22"
+1 -1
View File
@@ -19,6 +19,6 @@ libfj.workspace = true
git-version.workspace = true
serde.workspace = true
serde_json.workspace = true
hex = "0.4"
hex.workspace = true
handlebars = { version = "5", features = ["dir_source"] }
+2 -2
View File
@@ -10,8 +10,8 @@ authors.workspace = true
[dependencies]
log.workspace = true
polariton.workspace = true
base64 = "0.22"
hex = "0.4"
base64.workspace = true
hex.workspace = true
serde.workspace = true
serde_json.workspace = true
chrono.workspace = true
+1 -1
View File
@@ -34,7 +34,7 @@ impl oj_rc_factory::VehicleFactoryAdapter for Factory {
impl Factory {
pub async fn from_config(conf: &crate::persist::FactoryConfig) -> Result<Self, Box<dyn std::error::Error + 'static>> {
Ok(match &conf.adapter {
crate::persist::AdapterSettings::Arc(x) => Self::Arc(oj_rc_factory::arc::ArcAdapter::init(&x.uri, x.show_expired, x.override_cdn.clone()).await?),
crate::persist::AdapterSettings::Arc(x) => Self::Arc(oj_rc_factory::arc::ArcAdapter::init(&x.uri, x.show_expired, x.override_cdn.clone(), x.spoof_username).await?),
crate::persist::AdapterSettings::None => Self::None,
})
}
+1 -1
View File
@@ -509,7 +509,7 @@ fn default_rotation() -> GameEventSequence {
fn default_multiplayer() -> super::MultiplayerConfig {
super::MultiplayerConfig {
players_per_game: 2,
players_per_game: 1,
enabled: true,
network: super::multiplayer::default_net_conf(),
fakes: super::multiplayer::default_fake_users(),
+2
View File
@@ -26,6 +26,8 @@ pub struct ArcFactorySettings {
/// should probably end with /roboshop/arc/Live/
#[serde(default)]
pub override_cdn: Option<String>,
#[serde(default = "default_true")]
pub spoof_username: bool,
}
fn default_true() -> bool {
+2 -1
View File
@@ -13,4 +13,5 @@ async-trait.workspace = true
libfj.workspace = true
chrono.workspace = true
log.workspace = true
base64 = "0.22"
base64.workspace = true
hex.workspace = true
+5 -3
View File
@@ -4,10 +4,11 @@ pub struct ArcAdapter {
orm: sea_orm::DatabaseConnection,
ignore_expiry: bool,
cdn: Option<String>,
spoof_users: bool,
}
impl ArcAdapter {
pub async fn init(uri: &str, show_expired: bool, override_cdn: Option<String>) -> Result<Self, sea_orm::DbErr>{
pub async fn init(uri: &str, show_expired: bool, override_cdn: Option<String>, username_spoofing: bool) -> Result<Self, sea_orm::DbErr>{
log::debug!("Connecting to Archive of RoboCraft (ARC) vehicle factory database URI: {}", uri);
let db = sea_orm::Database::connect(uri).await?;
let good_cdn = override_cdn.map(|s| if s.ends_with("/") { s } else { format!("{}/", s) });
@@ -15,6 +16,7 @@ impl ArcAdapter {
orm: db,
ignore_expiry: show_expired,
cdn: good_cdn,
spoof_users: username_spoofing,
};
// do query to ensure database is ok
adapter.default_query().one(&adapter.orm).await?;
@@ -57,7 +59,7 @@ impl crate::VehicleFactoryAdapter for ArcAdapter {
name: meta.name,
description: meta.description,
thumbnail: self.thumbnail_url(meta.thumbnail, meta.id),
added_by: meta.added_by,
added_by: if self.spoof_users { hex::encode(meta.added_by.as_bytes()) } else { meta.added_by },
added_by_display_name: meta.added_by_display_name,
added_date: crate::traits::parse_rc_date(&meta.added_date).unwrap_or_default(),
expiry_date: if self.ignore_expiry { chrono::Utc::now() + chrono::Duration::weeks(2) } else { crate::traits::parse_rc_date(&meta.expiry_date).unwrap_or_default() },
@@ -162,7 +164,7 @@ impl crate::VehicleFactoryAdapter for ArcAdapter {
name: meta.name,
description: meta.description,
thumbnail: meta.thumbnail,
added_by: meta.added_by,
added_by: if self.spoof_users { hex::encode(meta.added_by.as_bytes()) } else { meta.added_by },
added_by_display_name: meta.added_by_display_name,
added_date: crate::traits::parse_rc_date(&meta.added_date).unwrap_or_default(),
expiry_date: if self.ignore_expiry { chrono::Utc::now() + chrono::Duration::weeks(2) } else { crate::traits::parse_rc_date(&meta.expiry_date).unwrap_or_default() },
+1 -1
View File
@@ -15,7 +15,7 @@ clap.workspace = true
polariton.workspace = true
oj_polariton_auth = { version = "*", path = "../polariton_auth" }
polariton_server.workspace = true
hex = "0.4"
hex.workspace = true
serde.workspace = true
serde_json.workspace = true
chrono.workspace = true