diff --git a/src/main.rs b/src/main.rs index 31c7edc..38cecfc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,6 +26,7 @@ fn unhandled(req: HttpRequest, body: String) -> Option { } fn api_req(req: HttpRequest, body: String) -> HttpResponse { + let headers = req.headers().clone(); if !req.path().starts_with("/api") && !req.path().starts_with("/v1.0") { return router::webui::main(req); } @@ -120,14 +121,14 @@ fn api_req(req: HttpRequest, body: String) -> HttpResponse { "server_time": global::timestamp(), "data": resp.unwrap() }; - global::send(rv, uid) + global::send(rv, uid, &headers) } else { let rv = object!{ "code": 2,//Idontnermemrmemremremermrme "server_time": global::timestamp(), "data": "" }; - global::send(rv, uid) + global::send(rv, uid, &headers) } } diff --git a/src/router/exchange.rs b/src/router/exchange.rs index dca2fce..7c6e9c7 100644 --- a/src/router/exchange.rs +++ b/src/router/exchange.rs @@ -26,7 +26,7 @@ pub fn exchange_post(req: HttpRequest, body: String) -> Option { userdata::save_acc(&key, user.clone()); userdata::save_acc_missions(&key, missions); - + Some(object!{ "exchange": body, "updated_value_list": { diff --git a/src/router/global.rs b/src/router/global.rs index 92209e7..73706f1 100644 --- a/src/router/global.rs +++ b/src/router/global.rs @@ -8,7 +8,7 @@ use base64::{Engine as _, engine::general_purpose}; use uuid::Uuid; use crate::encryption; -use crate::router::{userdata, gree}; +use crate::router::{userdata, gree, items}; pub const ASSET_VERSION: &str = "5260ff15dff8ba0c00ad91400f515f55"; pub const ASSET_HASH_ANDROID: &str = "d210b28037885f3ef56b8f8aa45ac95b"; @@ -112,9 +112,13 @@ fn set_time(data: &mut JsonValue, uid: i64) { data["server_time"] = (server_time + time_since_set).into(); } -pub fn send(mut data: JsonValue, uid: i64) -> HttpResponse { +pub fn send(mut data: JsonValue, uid: i64, headers: &HeaderMap) -> HttpResponse { //println!("{}", json::stringify(data.clone())); set_time(&mut data, uid); + + if !data["data"]["item_list"].is_empty() || !data["data"]["updated_value_list"]["item_list"].is_empty() { + items::check_for_region(&mut data, headers); + } let encrypted = encryption::encrypt_packet(&json::stringify(data)).unwrap(); let resp = encrypted.into_bytes(); diff --git a/src/router/items.rs b/src/router/items.rs index cf9e661..93f74a0 100644 --- a/src/router/items.rs +++ b/src/router/items.rs @@ -1,6 +1,6 @@ use json::{array, object, JsonValue}; use rand::Rng; -use actix_web::{HttpRequest}; +use actix_web::{HttpRequest, http::header::{HeaderMap, HeaderValue}}; use crate::encryption; use crate::router::{userdata, global, databases}; @@ -24,6 +24,34 @@ pub fn remove_gems(user: &mut JsonValue, amount: i64) { user["gem"]["total"] = (free + paid).into(); } +pub fn get_region(headers: &HeaderMap) -> bool { + let blank_header = HeaderValue::from_static(""); + let asset_version = headers.get("aoharu-asset-version").unwrap_or(&blank_header).to_str().unwrap_or(""); + asset_version == global::ASSET_VERSION_JP +} + +pub fn check_for_region(user: &mut JsonValue, headers: &HeaderMap) { + let items = if user["data"]["updated_value_list"]["item_list"].is_empty() {user["data"]["item_list"].clone()} else {user["data"]["updated_value_list"]["item_list"].clone()}; + let is_jp = get_region(headers); + if !is_jp || items.is_empty() { + return; + } + let mut id = 0; + for (i, data) in items.members().enumerate() { + if data["master_item_id"] == 15570008 { + id = i + 1; + break; + } + } + if id > 0 { + if user["data"]["updated_value_list"]["item_list"].is_empty() { + user["data"]["item_list"].array_remove(id - 1); + } else { + user["data"]["updated_value_list"]["item_list"].array_remove(id - 1); + } + } +} + // true - limit reached // false - all good const GIFT_LIMIT: usize = 100000; diff --git a/src/router/lottery.rs b/src/router/lottery.rs index 2fa9c7d..f58246a 100644 --- a/src/router/lottery.rs +++ b/src/router/lottery.rs @@ -178,7 +178,7 @@ pub fn lottery_post(req: HttpRequest, body: String) -> Option { userdata::save_acc(&key, user.clone()); userdata::save_acc_missions(&key, missions); - + Some(object!{ "lottery_item_list": lottery_list, "updated_value_list": { diff --git a/src/router/mission.rs b/src/router/mission.rs index 18c1e77..fd46429 100644 --- a/src/router/mission.rs +++ b/src/router/mission.rs @@ -68,7 +68,7 @@ pub fn receive(req: HttpRequest, body: String) -> Option { userdata::save_acc(&key, user.clone()); userdata::save_acc_missions(&key, missions.clone()); - + Some(object!{ "reward_list": rewards, "updated_value_list": { diff --git a/src/router/user.rs b/src/router/user.rs index bb4568a..354e019 100644 --- a/src/router/user.rs +++ b/src/router/user.rs @@ -89,7 +89,7 @@ pub fn gift(req: HttpRequest, body: String) -> Option { userdata::save_acc_home(&key, user); userdata::save_acc(&key, userr.clone()); let userr = userdata::get_acc(&key); - + Some(object!{ "failed_gift_ids": failed, "updated_value_list": {