Check for region specific items when sending userdata

This commit is contained in:
Ethan O'Brien 2024-05-31 21:34:11 -05:00
parent 53c9f7ea9c
commit 23c09cd4d3
7 changed files with 42 additions and 9 deletions

View file

@ -26,6 +26,7 @@ fn unhandled(req: HttpRequest, body: String) -> Option<JsonValue> {
}
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)
}
}

View file

@ -26,7 +26,7 @@ pub fn exchange_post(req: HttpRequest, body: String) -> Option<JsonValue> {
userdata::save_acc(&key, user.clone());
userdata::save_acc_missions(&key, missions);
Some(object!{
"exchange": body,
"updated_value_list": {

View file

@ -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();

View file

@ -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;

View file

@ -178,7 +178,7 @@ pub fn lottery_post(req: HttpRequest, body: String) -> Option<JsonValue> {
userdata::save_acc(&key, user.clone());
userdata::save_acc_missions(&key, missions);
Some(object!{
"lottery_item_list": lottery_list,
"updated_value_list": {

View file

@ -68,7 +68,7 @@ pub fn receive(req: HttpRequest, body: String) -> Option<JsonValue> {
userdata::save_acc(&key, user.clone());
userdata::save_acc_missions(&key, missions.clone());
Some(object!{
"reward_list": rewards,
"updated_value_list": {

View file

@ -89,7 +89,7 @@ pub fn gift(req: HttpRequest, body: String) -> Option<JsonValue> {
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": {