Tutorial though live (live end not done)

This commit is contained in:
Ethan O'Brien 2024-02-26 01:10:34 -06:00
parent c5cfc9bf4d
commit b53369b2fc
11 changed files with 340 additions and 4 deletions

View file

@ -21,16 +21,46 @@ async fn dummy_login(req: HttpRequest, body: String) -> HttpResponse { router::l
#[get("/api/user")]
async fn user(req: HttpRequest) -> HttpResponse { router::user::user(req) }
#[post("/api/user/initialize")]
async fn user_initialize(req: HttpRequest, body: String) -> HttpResponse { router::user::initialize(req, body) }
#[get("/api/purchase")]
async fn purchase(req: HttpRequest) -> HttpResponse { router::purchase::purchase(req) }
#[post("/api/tutorial")]
async fn tutorial(req: HttpRequest, body: String) -> HttpResponse { router::tutorial::tutorial(req, body) }
#[post("/api/friend")]
async fn friend(req: HttpRequest, body: String) -> HttpResponse { router::friend::friend(req, body) }
#[post("/api/live/guest")]
async fn live_guest(req: HttpRequest, body: String) -> HttpResponse { router::live::guest(req, body) }
#[post("/api/event")]
async fn event(req: HttpRequest, body: String) -> HttpResponse { router::event::event(req, body) }
#[post("/api/live/start")]
async fn live_start(req: HttpRequest, body: String) -> HttpResponse { router::live::start(req, body) }
#[get("/api/live/clearRate")]
async fn live_clearrate(req: HttpRequest) -> HttpResponse { router::live::clearrate(req) }
#[get("/api/mission")]
async fn mission(req: HttpRequest) -> HttpResponse { router::mission::mission(req) }
async fn log_unknown_request(req: HttpRequest) -> HttpResponse {
#[get("/api/home")]
async fn home(req: HttpRequest) -> HttpResponse { router::home::home(req) }
#[post("/api/lottery/get_tutorial")]
async fn lottery_tutorial(req: HttpRequest, body: String) -> HttpResponse { router::lottery::tutorial(req, body) }
#[post("/api/lottery")]
async fn lottery(req: HttpRequest, body: String) -> HttpResponse { router::lottery::lottery(req, body) }
async fn log_unknown_request(req: HttpRequest, body: String) -> HttpResponse {
if body != String::new() {
println!("{}", encryption::decrypt_packet(&body).unwrap());
}
println!("Unhandled request: {}", req.path());
HttpResponse::Ok().body("ok")
}
@ -44,10 +74,19 @@ async fn main() -> std::io::Result<()> {
println!("Request: {}", req.path());
srv.call(req)
})
.service(live_guest)
.service(live_clearrate)
.service(live_start)
.service(event)
.service(purchase)
.service(user_initialize)
.service(start_start)
.service(tutorial)
.service(lottery_tutorial)
.service(lottery)
.service(friend)
.service(mission)
.service(home)
.service(start_assethash)
.service(user)
.service(dummy_login)

View file

@ -6,3 +6,8 @@ pub mod user;
pub mod purchase;
pub mod tutorial;
pub mod mission;
pub mod home;
pub mod lottery;
pub mod friend;
pub mod live;
pub mod event;

File diff suppressed because one or more lines are too long

15
src/router/event.rs Normal file
View file

@ -0,0 +1,15 @@
use json;
use json::object;
use crate::router::global;
use actix_web::{HttpResponse, HttpRequest};
//use crate::router::userdata;
pub fn event(_req: HttpRequest, _body: String) -> HttpResponse {
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data":{"point_ranking":{"point":0},"score_ranking":[],"member_ranking":[],"lottery_box":[],"mission_list":[],"policy_agreement":0,"incentive_lottery":0,"star_event":{"star_level":0,"last_event_star_level":0,"star_music_list":[],"is_star_event_update":1,"music_change_count":0,"star_event_bonus_daily_count":0,"star_event_bonus_count":0,"star_event_play_times_bonus_count":0,"star_assist_bonus":1}}
};
global::send(resp)
}

22
src/router/friend.rs Normal file
View file

@ -0,0 +1,22 @@
use json;
use json::object;
use crate::router::global;
use actix_web::{HttpResponse, HttpRequest};
//use crate::router::userdata;
pub fn friend(_req: HttpRequest, _body: String) -> HttpResponse {
/*let blank_header = HeaderValue::from_static("");
let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
let uid = req.headers().get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
let user = userdata::get_acc(key, uid);*/
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": {
"friend_list": [] //todo - pull from userdata
}
};
global::send(resp)
}

19
src/router/home.rs Normal file
View file

@ -0,0 +1,19 @@
use json;
use json::object;
use crate::router::global;
use actix_web::{HttpResponse, HttpRequest, http::header::HeaderValue};
use crate::router::userdata;
pub fn home(req: HttpRequest) -> HttpResponse {
let blank_header = HeaderValue::from_static("");
let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
let uid = req.headers().get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
let user = userdata::get_acc_home(key, uid);
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": user
};
global::send(resp)
}

44
src/router/live.rs Normal file
View file

@ -0,0 +1,44 @@
use json;
use json::object;
use crate::router::global;
//use crate::encryption;
use actix_web::{HttpResponse, HttpRequest};
//use crate::router::userdata;
pub fn guest(_req: HttpRequest, _body: String) -> HttpResponse {
//let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
//let blank_header = HeaderValue::from_static("");
//let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
//let user = userdata::get_acc(key, "");
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": {"guest_list":[{"user":{"name":"A Nice Guest","comment":"Enjoy the first live show!","exp":900,"main_deck_slot":1,"favorite_master_card_id":10010013,"favorite_card_evolve":0,"guest_smile_master_card_id":10010013,"guest_cool_master_card_id":10010013,"guest_pure_master_card_id":10010013,"friend_request_disabled":1,"master_title_ids":[3000001,0],"profile_settings":[1,2,3,4,5,6,7],"last_login_time":1708699449},"favorite_card":{"id":0,"master_card_id":10010013,"exp":1025,"skill_exp":0,"evolve":[]},"guest_smile_card":{"id":0,"master_card_id":10010013,"exp":1025,"skill_exp":0,"evolve":[]},"guest_cool_card":{"id":0,"master_card_id":10010013,"exp":1025,"skill_exp":0,"evolve":[]},"guest_pure_card":{"id":0,"master_card_id":10010013,"exp":1025,"skill_exp":0,"evolve":[]},"status":0}]}
};
global::send(resp)
}
pub fn start(_req: HttpRequest, _body: String) -> HttpResponse {
//let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
//let blank_header = HeaderValue::from_static("");
//let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
//let user = userdata::get_acc(key, "");
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": []
};
global::send(resp)
}
pub fn clearrate(_req: HttpRequest) -> HttpResponse {
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": json::parse(include_str!("clearrate.json")).unwrap()
};
global::send(resp)
}

101
src/router/lottery.rs Normal file
View file

@ -0,0 +1,101 @@
use json;
use json::{array, object};
use crate::router::global;
use crate::encryption;
use actix_web::{HttpResponse, HttpRequest, http::header::HeaderValue};
use crate::router::userdata;
pub fn tutorial(_req: HttpRequest, body: String) -> HttpResponse {
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
let mut lotteryid = 0; //todo, what should this be?
if body["master_character_id"].to_string().starts_with("3") {
lotteryid = 9110027;
} else {
println!("Unknown lottery id for character {}", body["master_character_id"]);
}
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": {
"lottery_list": [
{
"master_lottery_id": lotteryid,
"master_lottery_price_number": 1,
"count": 0,
"daily_count": 0,
"last_count_date": ""
}
],
"item_list": []
}
};
global::send(resp)
}
pub fn lottery(req: HttpRequest, body: String) -> HttpResponse {
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
println!("lottery: {}", body);
let blank_header = HeaderValue::from_static("");
let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
let uid = req.headers().get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
let mut user = userdata::get_acc(key, uid);
let user2 = userdata::get_acc(key, uid);
//todo - how to randomize?
let cardstogive = array![
{"id": 13930, "master_card_id": 10010011, "master_lottery_item_id":100001, "master_lottery_item_number":138},
{"id": 13928, "master_card_id": 10030008, "master_lottery_item_id":200001,"master_lottery_item_number":30},
{"id": 13926, "master_card_id": 20010010, "master_lottery_item_id":100001,"master_lottery_item_number":178},
{"id": 13929, "master_card_id": 20050004, "master_lottery_item_id":100001,"master_lottery_item_number":26},
{"id": 13925, "master_card_id": 20090001, "master_lottery_item_id":100001,"master_lottery_item_number":113},
{"id": 13933, "master_card_id": 30040001, "master_lottery_item_id":200001,"master_lottery_item_number":2},
{"id": 13934, "master_card_id": 30090007, "master_lottery_item_id":200001,"master_lottery_item_number":83},
{"id": 13931, "master_card_id": 30100005, "master_lottery_item_id":100001,"master_lottery_item_number":188},
{"id": 13927, "master_card_id": 30120001, "master_lottery_item_id":100001,"master_lottery_item_number":154},
{"id": 13932, "master_card_id": 40030002, "master_lottery_item_id":911002701,"master_lottery_item_number":1}
];
let mut new_cards = array![];
for (i, data) in cardstogive.members().enumerate() {
let to_push = object!{
"id": data["id"].clone(),
"master_card_id": data["master_card_id"].clone(),
"exp":0,
"skill_exp":0,
"evolve":[],
"created_date_time": global::timestamp()
};
user["card_list"].push(to_push.clone()).unwrap();
new_cards.push(to_push).unwrap();
user["deck_list"][0]["main_card_ids"][i] = data["id"].clone();
}
userdata::save_acc(key, uid, user);
let mut lottery_list = array![];
for (_i, data) in cardstogive.members().enumerate() {
let to_push = object!{
"master_lottery_item_id": data["master_lottery_item_id"].clone(),
"master_lottery_item_number": data["master_lottery_item_number"].clone(),
"is_new": 1
};
lottery_list.push(to_push).unwrap();
}
//todo
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": {
"lottery_item_list": lottery_list,
"updated_value_list": {
"card_list": new_cards
},
"gift_list": user2["home"]["gift_list"].clone(),
"clear_mission_ids": user2["clear_mission_ids"].clone(),
"draw_count_list": []
}
};
global::send(resp)
}

View file

@ -1,6 +1,7 @@
use json;
use json::object;
use crate::router::global;
use crate::encryption;
use actix_web::{HttpResponse, HttpRequest, http::header::HeaderValue};
use crate::router::userdata;
@ -18,3 +19,28 @@ pub fn user(req: HttpRequest) -> HttpResponse {
};
global::send(resp)
}
pub fn initialize(req: HttpRequest, body: String) -> HttpResponse {
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
let blank_header = HeaderValue::from_static("");
let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
let uid = req.headers().get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
let mut user = userdata::get_acc(key, uid);
let id = (body["master_character_id"].as_i32().unwrap() * 10000) + 7; //todo - is this alwasy the case?
user["user"]["favorite_master_card_id"] = id.into();
user["user"]["guest_smile_master_card_id"] = id.into();
user["user"]["guest_cool_master_card_id"] = id.into();
user["user"]["guest_pure_master_card_id"] = id.into();
user["user"]["master_title_ids"][0] = id.into();
userdata::save_acc(key, uid, user.clone());
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": user["user"].clone()
};
global::send(resp)
}

View file

@ -76,7 +76,8 @@ fn create_acc(conn: &Connection, uid: i64) {
(),
).unwrap();
let mut data = object!{
userdata: json::parse(include_str!("new_user.json")).unwrap()
userdata: json::parse(include_str!("new_user.json")).unwrap(),
home: json::parse(include_str!("new_user_home.json")).unwrap()
};
data["userdata"]["user"]["id"] = uid.into();
@ -84,7 +85,7 @@ fn create_acc(conn: &Connection, uid: i64) {
}
//a6573cbe is the name of the header - todo - more secure than just uid
pub fn get_acc(_a6573cbe: &str, uid: &str) -> JsonValue {
fn get_data(_a6573cbe: &str, uid: &str) -> JsonValue {
//let decoded = general_purpose::STANDARD.decode(a6573cbe).unwrap();
//let header = String::from_utf8_lossy(&decoded);
@ -119,7 +120,7 @@ pub fn get_acc(_a6573cbe: &str, uid: &str) -> JsonValue {
let rv = json::parse(&result.unwrap()).unwrap();
return rv["userdata"].clone();
return rv
}
Err(_) => {
std::thread::sleep(std::time::Duration::from_millis(15));
@ -128,6 +129,14 @@ pub fn get_acc(_a6573cbe: &str, uid: &str) -> JsonValue {
}
}
pub fn get_acc(_a6573cbe: &str, uid: &str) -> JsonValue {
return get_data(_a6573cbe, uid)["userdata"].clone();
}
pub fn get_acc_home(_a6573cbe: &str, uid: &str) -> JsonValue {
return get_data(_a6573cbe, uid)["home"].clone();
}
pub fn save_acc(_a6573cbe: &str, uid: &str, data: JsonValue) {
//let decoded = general_purpose::STANDARD.decode(a6573cbe).unwrap();
//let header = String::from_utf8_lossy(&decoded);

View file

@ -0,0 +1,55 @@
{
"home": {
"gift_list": [],
"pending_friend_count": 0,
"clear_mission_count": 0,
"clear_beginner_mission_count": 0,
"beginner_mission_complete": 0,
"not_cleared_daily_mission_count": 6,
"new_announcement_flag": 1,
"information_list": [],
"unread_story_count": 4,
"unread_chat_count": 0,
"preset_setting": [
{
"slot": 1,
"master_preset_background_id": 0,
"master_preset_foreground_id": 0,
"master_card_id": 0,
"illust_master_card_id": 0,
"poem": 0,
"evolve": 0
},
{
"slot": 2,
"master_preset_background_id": 0,
"master_preset_foreground_id": 0,
"master_card_id": 0,
"illust_master_card_id": 0,
"poem": 0,
"evolve": 0
},
{
"slot": 3,
"master_preset_background_id": 0,
"master_preset_foreground_id": 0,
"master_card_id": 0,
"illust_master_card_id": 0,
"poem": 0,
"evolve": 0
},
{
"slot": 4,
"master_preset_background_id": 0,
"master_preset_foreground_id": 0,
"master_card_id": 0,
"illust_master_card_id": 0,
"poem": 0,
"evolve": 0
}
],
"active_friend": 0,
"serial_code_id_list": []
},
"clear_mission_ids": []
}