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