From 72f05a5d52c8aebf6eeaab5bfc294926de9de616 Mon Sep 17 00:00:00 2001 From: Ethan O'Brien <77750390+ethanaobrien@users.noreply.github.com> Date: Sat, 4 May 2024 14:25:23 -0500 Subject: [PATCH] Implement data transfer from global to jp --- Cargo.toml | 2 +- src/router/global.rs | 5 +++++ src/router/gree.rs | 37 +++++++++++-------------------------- src/router/userdata/mod.rs | 13 ++++--------- 4 files changed, 21 insertions(+), 36 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 895a070..140b71a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ md5 = "0.7.0" urlencoding = "2.1.3" sha1 = "0.10.6" substring = "1.4.5" -uuid = { version = "1.8.0", features = ["v4"] } +uuid = { version = "1.8.0", features = ["v7"] } rsa = "0.9.6" mime = "0.3.17" sha2 = "0.10.8" diff --git a/src/router/global.rs b/src/router/global.rs index 86126b8..9244929 100644 --- a/src/router/global.rs +++ b/src/router/global.rs @@ -10,6 +10,7 @@ use base64::{Engine as _, engine::general_purpose}; use crate::router::userdata; use lazy_static::lazy_static; use rand::Rng; +use uuid::Uuid; pub const ASSET_VERSION: &str = "cb87bc1468c8631a262ff65b2960470b"; pub const ASSET_HASH_ANDROID: &str = "4715e873031ae4abc3c625e2bd8c935b"; @@ -34,6 +35,10 @@ pub fn get_item_info(id: i64) -> JsonValue { ITEM_INFO[id.to_string()].clone() } +pub fn create_token() -> String { + format!("{}", Uuid::now_v7()) +} + pub fn remove_gems(user: &mut JsonValue, amount: i64) { let mut amount = amount; let mut free = user["gem"]["free"].as_i64().unwrap(); diff --git a/src/router/gree.rs b/src/router/gree.rs index 52d515f..aea5c88 100644 --- a/src/router/gree.rs +++ b/src/router/gree.rs @@ -13,7 +13,6 @@ use crate::sql::SQLite; use rusqlite::params; use lazy_static::lazy_static; -use uuid::Uuid; use openssl::pkey::PKey; use openssl::rsa::Rsa; @@ -24,31 +23,17 @@ lazy_static! { static ref DATABASE: SQLite = SQLite::new("gree.db"); } -fn uuid_exists(uuid: &str) -> bool { - let data = DATABASE.lock_and_select("SELECT uuid FROM uuids WHERE uuid=?1", params!(uuid)); - data.is_ok() -} -fn get_new_uuid() -> String { - DATABASE.create_store_v2("CREATE TABLE IF NOT EXISTS uuids ( - uuid TEXT NOT NULL PRIMARY KEY - )"); - let id = format!("{}", Uuid::new_v4()); - if uuid_exists(&id) { - return get_new_uuid(); - } - DATABASE.lock_and_exec("INSERT INTO uuids (uuid) VALUES (?1)", params!(&id)); - - id -} -pub fn import_user(uid: i64) -> String { - let token = get_new_uuid(); - DATABASE.lock_and_exec( - "INSERT INTO users (cert, uuid, user_id) VALUES (?1, ?2, ?3)", - params!("none", token, uid) - ); - token -} fn update_cert(uid: i64, cert: &str) { + if !DATABASE.lock_and_select("SELECT cert FROM users WHERE user_id=?1;", params!(uid)).is_ok() { + let token = userdata::get_login_token(uid); + if token != String::new() { + DATABASE.lock_and_exec( + "INSERT INTO users (cert, uuid, user_id) VALUES (?1, ?2, ?3)", + params!(cert, token, uid) + ); + return; + } + } DATABASE.lock_and_exec("UPDATE users SET cert=?1 WHERE user_id=?2", params!(cert, uid)); } fn create_acc(cert: &str) -> String { @@ -57,7 +42,7 @@ fn create_acc(cert: &str) -> String { uuid TEXT NOT NULL, user_id BIGINT NOT NULL PRIMARY KEY )"); - let uuid = get_new_uuid(); + let uuid = global::create_token(); let user = userdata::get_acc(&uuid); let user_id = user["user"]["id"].as_i64().unwrap(); DATABASE.lock_and_exec( diff --git a/src/router/userdata/mod.rs b/src/router/userdata/mod.rs index b043773..c121a7e 100644 --- a/src/router/userdata/mod.rs +++ b/src/router/userdata/mod.rs @@ -2,7 +2,6 @@ use rusqlite::params; use lazy_static::lazy_static; use json::{JsonValue, array, object}; use crate::router::global; -use uuid::Uuid; use rand::Rng; use sha2::{Digest, Sha256}; use base64::{Engine as _, engine::general_purpose}; @@ -107,7 +106,8 @@ fn get_uid(token: &str) -> i64 { data.parse::().unwrap_or(0) } -fn get_login_token(uid: i64) -> String { +// Needed by gree +pub fn get_login_token(uid: i64) -> String { create_token_store(); let data = DATABASE.lock_and_select("SELECT token FROM tokens WHERE user_id=?1", params!(uid)); if !data.is_ok() { @@ -387,7 +387,7 @@ fn create_webui_store() { } fn create_webui_token() -> String { - let token = format!("{}", Uuid::new_v4()); + let token = global::create_token(); if DATABASE.lock_and_select("SELECT user_id FROM webui WHERE token=?1", params!(token)).is_ok() { return create_webui_token(); } @@ -439,12 +439,7 @@ pub fn webui_import_user(user: JsonValue) -> Result { user["userdata"]["user"]["friend_request_disabled"].as_i32().unwrap() )); - let token; - if !user["jp"].is_empty() { - token = crate::router::gree::import_user(uid); - } else { - token = format!("{}", Uuid::new_v4()); - } + let token = global::create_token(); DATABASE.lock_and_exec("INSERT INTO tokens (user_id, token) VALUES (?1, ?2)", params!(uid, token)); let mig = crate::router::user::uid_to_code(uid.to_string());