mirror of
https://git.ethanthesleepy.one/ethanaobrien/ew.git
synced 2025-05-13 11:37:33 -05:00
Compare commits
6 commits
Author | SHA1 | Date | |
---|---|---|---|
038a651202 | |||
4aa00fd3d8 | |||
222021382f | |||
1a736155e3 | |||
e27a020cfb | |||
b082def65c |
10 changed files with 632 additions and 396 deletions
930
Cargo.lock
generated
930
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
22
Cargo.toml
22
Cargo.toml
|
@ -1,30 +1,30 @@
|
|||
[package]
|
||||
name = "ew"
|
||||
version = "1.0.0"
|
||||
edition = "2021"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
actix-web = { version = "4.9.0" }
|
||||
rusqlite = { version = "0.32.1", features = ["bundled"] }
|
||||
actix-web = { version = "4.10.2" }
|
||||
rusqlite = { version = "0.35.0", features = ["bundled"] }
|
||||
openssl = { version = "0.10", features = ["vendored"] }
|
||||
reqwest = { version = "0.12", features = ["blocking"] }
|
||||
clap = { version = "4.5.21", features = ["derive"]}
|
||||
clap = { version = "4.5.37", features = ["derive"]}
|
||||
base64 = "0.22.1"
|
||||
json = "0.12.4"
|
||||
rand = "0.8.5"
|
||||
rand = "0.9.1"
|
||||
lazy_static = "1.5.0"
|
||||
chrono = "0.4.38"
|
||||
chrono = "0.4.41"
|
||||
hex = "0.4.3"
|
||||
hmac = "0.12.1"
|
||||
md5 = "0.7.0"
|
||||
urlencoding = "2.1.3"
|
||||
sha1 = "0.10.6"
|
||||
substring = "1.4.5"
|
||||
uuid = { version = "1.11.0", features = ["v7"] }
|
||||
rsa = "0.9.6"
|
||||
uuid = { version = "1.16.0", features = ["v7"] }
|
||||
rsa = "0.9.8"
|
||||
mime = "0.3.17"
|
||||
sha2 = "0.10.8"
|
||||
sha2 = "0.10.9"
|
||||
include-flate-codegen = "0.3.0"
|
||||
libflate = "2.1.0"
|
||||
serde_json = "1.0.133"
|
||||
serde = { version = "1.0.215", features = ["derive"] }
|
||||
serde_json = "1.0.140"
|
||||
serde = { version = "1.0.219", features = ["derive"] }
|
||||
|
|
|
@ -47,7 +47,7 @@ pub fn encrypt_packet(input: &str) -> Result<String, ErrorStack> {
|
|||
}
|
||||
|
||||
fn generate_random_iv() -> Vec<u8> {
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut rng = rand::rng();
|
||||
let mut bytes = vec![0u8; IV_LENGTH];
|
||||
rng.fill(&mut bytes[..]);
|
||||
bytes
|
||||
|
|
|
@ -51,8 +51,8 @@ fn save_event_data(key: &str, event_id: u32, data: JsonValue) {
|
|||
}
|
||||
|
||||
fn get_random_song() -> JsonValue {
|
||||
let mut rng = rand::thread_rng();
|
||||
let random_number = rng.gen_range(0..=databases::LIVES.len());
|
||||
let mut rng = rand::rng();
|
||||
let random_number = rng.random_range(0..=databases::LIVES.len());
|
||||
object!{
|
||||
song: databases::LIVES[random_number]["masterMusicId"].clone(),
|
||||
score: (databases::LIVES[random_number]["scoreC"].as_f64().unwrap() * 1.75).round() as i64
|
||||
|
|
|
@ -9,6 +9,7 @@ pub const FRIEND_LIMIT: usize = 40;
|
|||
pub fn friend(req: HttpRequest, body: String) -> Option<JsonValue> {
|
||||
let key = global::get_login(req.headers(), &body);
|
||||
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
|
||||
let user_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
|
||||
let friends = userdata::get_acc_friends(&key);
|
||||
|
||||
let mut rv = array![];
|
||||
|
@ -24,7 +25,9 @@ pub fn friend(req: HttpRequest, body: String) -> Option<JsonValue> {
|
|||
};
|
||||
|
||||
for uid in rv_data.members() {
|
||||
rv.push(global::get_user(uid.as_i64().unwrap(), &friends, false)).unwrap();
|
||||
let mut user = global::get_user(uid.as_i64().unwrap(), &friends, false);
|
||||
user["user"]["last_login_time"] = global::set_time(user["user"]["last_login_time"].as_u64().unwrap_or(0), user_id, false).into();
|
||||
rv.push(user).unwrap();
|
||||
}
|
||||
|
||||
Some(object!{
|
||||
|
@ -52,10 +55,11 @@ pub fn recommend(req: HttpRequest, body: String) -> Option<JsonValue> {
|
|||
|
||||
let mut rv = array![];
|
||||
for uid in random.members() {
|
||||
let user = global::get_user(uid.as_i64().unwrap(), &friends, false);
|
||||
let mut user = global::get_user(uid.as_i64().unwrap(), &friends, false);
|
||||
if user["user"]["friend_request_disabled"] == 1 || user.is_empty() {
|
||||
continue;
|
||||
}
|
||||
user["user"]["last_login_time"] = global::set_time(user["user"]["last_login_time"].as_u64().unwrap_or(0), user_id, false).into();
|
||||
rv.push(user).unwrap();
|
||||
}
|
||||
|
||||
|
|
|
@ -106,11 +106,11 @@ pub fn timestamp_since_midnight() -> u64 {
|
|||
unix_timestamp.as_secs() - midnight
|
||||
}
|
||||
|
||||
fn init_time(data: &JsonValue, server_data: &mut JsonValue, token: &str, max_time: u64) {
|
||||
fn init_time(current_time: u64, server_data: &mut JsonValue, token: &str, max_time: u64, max: bool) {
|
||||
let mut edited = false;
|
||||
let default_time = 1709272800;
|
||||
|
||||
if max_time > 10 && max_time < data["server_time"].as_u64().unwrap_or(0) && server_data["server_time"].as_u64().unwrap_or(0) < max_time {
|
||||
if max_time > 10 && max_time < current_time && server_data["server_time"].as_u64().unwrap_or(0) < max_time && max {
|
||||
server_data["server_time_set"] = timestamp().into();
|
||||
edited = true;
|
||||
}
|
||||
|
@ -123,36 +123,37 @@ fn init_time(data: &JsonValue, server_data: &mut JsonValue, token: &str, max_tim
|
|||
server_data["server_time"] = default_time.into();
|
||||
edited = true;
|
||||
}
|
||||
if edited {
|
||||
if edited && max {
|
||||
userdata::save_server_data(token, server_data.clone());
|
||||
}
|
||||
}
|
||||
|
||||
fn set_time(data: &mut JsonValue, uid: i64) {
|
||||
pub fn set_time(current_time: u64, uid: i64, max: bool) -> u64 {
|
||||
let max_time = crate::get_args().max_time;
|
||||
if uid == 0 {
|
||||
if max_time > 10 && max_time < data["server_time"].as_u64().unwrap_or(0) {
|
||||
data["server_time"] = max_time.into();
|
||||
if max_time > 10 && max_time < current_time {
|
||||
return max_time;
|
||||
} else {
|
||||
return timestamp();
|
||||
}
|
||||
return;
|
||||
}
|
||||
let token = userdata::get_login_token(uid);
|
||||
let mut server_data = userdata::get_server_data(&token);
|
||||
init_time(data, &mut server_data, &token, max_time);
|
||||
init_time(current_time, &mut server_data, &token, max_time, max);
|
||||
|
||||
let time_set = server_data["server_time_set"].as_u64().unwrap_or(timestamp());
|
||||
let server_time = server_data["server_time"].as_u64().unwrap_or(0);//1711741114
|
||||
if server_time == 0 {
|
||||
return;
|
||||
return current_time;
|
||||
}
|
||||
|
||||
let time_since_set = timestamp() - time_set;
|
||||
data["server_time"] = (server_time + time_since_set).into();
|
||||
let time_since_set = current_time - time_set;
|
||||
return server_time + time_since_set;
|
||||
}
|
||||
|
||||
pub fn send(mut data: JsonValue, uid: i64, headers: &HeaderMap) -> HttpResponse {
|
||||
//println!("{}", json::stringify(data.clone()));
|
||||
set_time(&mut data, uid);
|
||||
data["server_time"] = set_time(data["server_time"].as_u64().unwrap_or(0), uid, true).into();
|
||||
|
||||
if !data["data"]["item_list"].is_empty() || !data["data"]["updated_value_list"]["item_list"].is_empty() {
|
||||
items::check_for_region(&mut data, headers);
|
||||
|
|
|
@ -24,6 +24,18 @@ pub fn remove_gems(user: &mut JsonValue, amount: i64) {
|
|||
user["gem"]["total"] = (free + paid).into();
|
||||
}
|
||||
|
||||
pub fn remove_paid_gems(user: &mut JsonValue, amount: i64) {
|
||||
let free = user["gem"]["free"].as_i64().unwrap();
|
||||
let mut paid = user["gem"]["charge"].as_i64().unwrap();
|
||||
|
||||
paid -= amount;
|
||||
if paid < 0 {
|
||||
paid = 0;
|
||||
}
|
||||
user["gem"]["charge"] = paid.into();
|
||||
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("");
|
||||
|
@ -110,6 +122,8 @@ pub fn use_item(item: &JsonValue, multiplier: i64, user: &mut JsonValue) {
|
|||
// Is anything really ever free...?
|
||||
} else if item["consumeType"] == 1 {
|
||||
remove_gems(user, item["amount"].as_i64().unwrap());
|
||||
} else if item["consumeType"] == 2 {
|
||||
remove_paid_gems(user, item["amount"].as_i64().unwrap());
|
||||
} else if item["consumeType"] == 4 {
|
||||
use_itemm(item["value"].as_i64().unwrap(), item["amount"].as_i64().unwrap() * multiplier, user);
|
||||
} else {
|
||||
|
@ -230,7 +244,7 @@ fn random_number(lowest: usize, highest: usize) -> usize {
|
|||
}
|
||||
assert!(lowest < highest);
|
||||
|
||||
rand::thread_rng().gen_range(lowest..highest + 1)
|
||||
rand::rng().random_range(lowest..highest + 1)
|
||||
}
|
||||
|
||||
pub fn gift_item_basic(id: i32, value: i64, ty_pe: i32, reason: &str, user: &mut JsonValue) -> JsonValue {
|
||||
|
|
|
@ -34,7 +34,7 @@ fn random_number(lowest: usize, highest: usize) -> usize {
|
|||
}
|
||||
assert!(lowest < highest);
|
||||
|
||||
rand::thread_rng().gen_range(lowest..highest + 1)
|
||||
rand::rng().random_range(lowest..highest + 1)
|
||||
}
|
||||
|
||||
pub fn guest(req: HttpRequest, body: String) -> Option<JsonValue> {
|
||||
|
|
|
@ -46,7 +46,7 @@ fn get_random_card(item: &JsonValue, rv: &mut JsonValue, rng: &mut rand::rngs::T
|
|||
|
||||
let mut random_id = 0;
|
||||
while random_id == 0 {
|
||||
let card = rng.gen_range(1..databases::POOL[lottery_id.to_string()][databases::POOL[lottery_id.to_string()].len() - 1].as_i64().unwrap() + 1);
|
||||
let card = rng.random_range(1..databases::POOL[lottery_id.to_string()][databases::POOL[lottery_id.to_string()].len() - 1].as_i64().unwrap() + 1);
|
||||
if get_card_master_id(lottery_id.to_string(), card.to_string()).is_some() {
|
||||
random_id = card;
|
||||
break;
|
||||
|
@ -63,7 +63,7 @@ fn get_random_card(item: &JsonValue, rv: &mut JsonValue, rng: &mut rand::rngs::T
|
|||
|
||||
fn get_random_cards(id: i64, mut count: usize) -> JsonValue {
|
||||
let total_ratio: i64 = databases::RARITY[id.to_string()].members().map(|item| if item["ensured"].as_i32().unwrap() == 1 { 0 } else { item["ratio"].as_i64().unwrap() }).sum();
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut rng = rand::rng();
|
||||
let mut rv = array![];
|
||||
let mut promised = false;
|
||||
|
||||
|
@ -80,7 +80,7 @@ fn get_random_cards(id: i64, mut count: usize) -> JsonValue {
|
|||
count -= 1;
|
||||
}
|
||||
for _i in 0..count {
|
||||
let random_number: i64 = rng.gen_range(1..total_ratio + 1);
|
||||
let random_number: i64 = rng.random_range(1..total_ratio + 1);
|
||||
let mut cumulative_ratio = 0;
|
||||
for item in databases::RARITY[id.to_string()].members() {
|
||||
cumulative_ratio += item["ratio"].as_i64().unwrap();
|
||||
|
@ -118,12 +118,7 @@ pub fn lottery_post(req: HttpRequest, body: String) -> Option<JsonValue> {
|
|||
consumeType: price["consumeType"].clone()
|
||||
}, 1, &mut user);
|
||||
|
||||
let mut count = price["count"].as_usize().unwrap();
|
||||
|
||||
// This is a temporary easter egg, not meant to stay
|
||||
if lottery_id == 4110044 {
|
||||
count = 30;
|
||||
}
|
||||
let count = price["count"].as_usize().unwrap();
|
||||
|
||||
let cardstogive = get_random_cards(lottery_id, count);
|
||||
|
||||
|
|
|
@ -94,8 +94,8 @@ fn get_key(auth_key: &str) -> i64 {
|
|||
}
|
||||
|
||||
fn generate_uid() -> i64 {
|
||||
let mut rng = rand::thread_rng();
|
||||
let random_number = rng.gen_range(100_000_000_000_000..=999_999_999_999_999);
|
||||
let mut rng = rand::rng();
|
||||
let random_number = rng.random_range(100_000_000_000_000..=999_999_999_999_999);
|
||||
//the chances of this...?
|
||||
if acc_exists(random_number) {
|
||||
return generate_uid();
|
||||
|
@ -301,7 +301,7 @@ pub fn save_acc_sif(auth_key: &str, data: JsonValue) {
|
|||
}
|
||||
|
||||
fn generate_salt() -> Vec<u8> {
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut rng = rand::rng();
|
||||
let mut bytes = vec![0u8; 16];
|
||||
rng.fill(&mut bytes[..]);
|
||||
bytes
|
||||
|
|
Loading…
Add table
Reference in a new issue