mirror of
https://git.ethanthesleepy.one/ethanaobrien/ew.git
synced 2025-05-13 11:37:33 -05:00
Implement ability to add login bonus things in webui
This commit is contained in:
parent
9ba429d0ae
commit
c4d89059f0
7 changed files with 131 additions and 6 deletions
|
@ -221,6 +221,9 @@ async fn card_evolve(req: HttpRequest, body: String) -> HttpResponse { router::c
|
||||||
#[post("/api/webui/login")]
|
#[post("/api/webui/login")]
|
||||||
async fn webui_login(req: HttpRequest, body: String) -> HttpResponse { router::webui::login(req, body) }
|
async fn webui_login(req: HttpRequest, body: String) -> HttpResponse { router::webui::login(req, body) }
|
||||||
|
|
||||||
|
#[post("/api/webui/startLoginbonus")]
|
||||||
|
async fn webui_start_loginbonus(req: HttpRequest, body: String) -> HttpResponse { router::webui::start_loginbonus(req, body) }
|
||||||
|
|
||||||
#[get("/api/webui/userInfo")]
|
#[get("/api/webui/userInfo")]
|
||||||
async fn webui_user(req: HttpRequest) -> HttpResponse { router::webui::user(req) }
|
async fn webui_user(req: HttpRequest) -> HttpResponse { router::webui::user(req) }
|
||||||
|
|
||||||
|
@ -269,6 +272,7 @@ async fn main() -> std::io::Result<()> {
|
||||||
})
|
})
|
||||||
.service(css)
|
.service(css)
|
||||||
.service(js)
|
.service(js)
|
||||||
|
.service(webui_start_loginbonus)
|
||||||
.service(webui_import)
|
.service(webui_import)
|
||||||
.service(webui_logout)
|
.service(webui_logout)
|
||||||
.service(webui_user)
|
.service(webui_user)
|
||||||
|
|
|
@ -167,10 +167,13 @@ pub fn give_points(master_item_id: i64, amount: i64, user: &mut JsonValue) -> bo
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn start_login_bonus(id: i64, bonus: &mut JsonValue) {
|
pub fn start_login_bonus(id: i64, bonus: &mut JsonValue) -> bool {
|
||||||
|
if crate::router::login::get_login_bonus_info(id).is_empty() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
for (_j, dataa) in bonus["bonus_list"].members().enumerate() {
|
for (_j, dataa) in bonus["bonus_list"].members().enumerate() {
|
||||||
if dataa["master_login_bonus_id"].as_i64().unwrap() == id {
|
if dataa["master_login_bonus_id"].as_i64().unwrap() == id {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bonus["bonus_list"].push(object!{
|
bonus["bonus_list"].push(object!{
|
||||||
|
@ -178,6 +181,7 @@ pub fn start_login_bonus(id: i64, bonus: &mut JsonValue) {
|
||||||
day_counts: [],
|
day_counts: [],
|
||||||
event_bonus_list: []
|
event_bonus_list: []
|
||||||
}).unwrap();
|
}).unwrap();
|
||||||
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn give_primogems(amount: i64, user: &mut JsonValue) -> bool {
|
pub fn give_primogems(amount: i64, user: &mut JsonValue) -> bool {
|
||||||
|
|
|
@ -49,7 +49,7 @@ lazy_static! {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_login_bonus_info(id: i64) -> JsonValue {
|
pub fn get_login_bonus_info(id: i64) -> JsonValue {
|
||||||
LOTTERY_INFO[id.to_string()].clone()
|
LOTTERY_INFO[id.to_string()].clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -478,7 +478,7 @@ pub fn webui_import_user(user: JsonValue) -> Result<JsonValue, String> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn webui_get_user(token: &str) -> Option<JsonValue> {
|
fn webui_login_token(token: &str) -> Option<String> {
|
||||||
let uid = lock_and_select("SELECT user_id FROM webui WHERE token=?1", params!(token)).unwrap_or(String::new());
|
let uid = lock_and_select("SELECT user_id FROM webui WHERE token=?1", params!(token)).unwrap_or(String::new());
|
||||||
if uid == String::new() || token == "" {
|
if uid == String::new() || token == "" {
|
||||||
return None;
|
return None;
|
||||||
|
@ -494,17 +494,46 @@ pub fn webui_get_user(token: &str) -> Option<JsonValue> {
|
||||||
lock_and_exec("DELETE FROM webui WHERE user_id=?1", params!(uid));
|
lock_and_exec("DELETE FROM webui WHERE user_id=?1", params!(uid));
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let login_token = lock_and_select("SELECT token FROM tokens WHERE user_id=?1", params!(uid)).unwrap_or(String::new());
|
let login_token = lock_and_select("SELECT token FROM tokens WHERE user_id=?1", params!(uid)).unwrap_or(String::new());
|
||||||
if login_token == String::new() {
|
if login_token == String::new() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
Some(login_token)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn webui_get_user(token: &str) -> Option<JsonValue> {
|
||||||
|
let login_token = webui_login_token(token)?;
|
||||||
|
|
||||||
return Some(object!{
|
return Some(object!{
|
||||||
userdata: get_acc(&login_token),
|
userdata: get_acc(&login_token),
|
||||||
loginbonus: get_acc_loginbonus(&login_token)
|
loginbonus: get_acc_loginbonus(&login_token)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn webui_start_loginbonus(bonus_id: i64, token: &str) -> JsonValue {
|
||||||
|
let login_token = webui_login_token(token);
|
||||||
|
if login_token.is_none() {
|
||||||
|
return object!{
|
||||||
|
result: "ERR",
|
||||||
|
message: "Failed to validate token"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
let login_token = login_token.unwrap();
|
||||||
|
let mut bonuses = get_acc_loginbonus(&login_token);
|
||||||
|
if !global::start_login_bonus(bonus_id, &mut bonuses) {
|
||||||
|
return object!{
|
||||||
|
result: "ERR",
|
||||||
|
message: "Login bonus ID is either already going or does not exist"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
save_acc_loginbonus(&login_token, bonuses);
|
||||||
|
|
||||||
|
return object!{
|
||||||
|
result: "OK",
|
||||||
|
id: bonus_id
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
pub fn webui_logout(token: &str) {
|
pub fn webui_logout(token: &str) {
|
||||||
lock_and_exec("DELETE FROM webui WHERE token=?1", params!(token));
|
lock_and_exec("DELETE FROM webui WHERE token=?1", params!(token));
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,19 @@ pub fn user(req: HttpRequest) -> HttpResponse {
|
||||||
.body(json::stringify(resp))
|
.body(json::stringify(resp))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn start_loginbonus(req: HttpRequest, body: String) -> HttpResponse {
|
||||||
|
let token = get_login_token(&req);
|
||||||
|
if token.is_none() {
|
||||||
|
return error("Not logged in");
|
||||||
|
}
|
||||||
|
let body = json::parse(&body).unwrap();
|
||||||
|
let resp = userdata::webui_start_loginbonus(body["bonus_id"].as_i64().unwrap(), &token.unwrap());
|
||||||
|
|
||||||
|
HttpResponse::Ok()
|
||||||
|
.insert_header(ContentType::json())
|
||||||
|
.body(json::stringify(resp))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn logout(req: HttpRequest) -> HttpResponse {
|
pub fn logout(req: HttpRequest) -> HttpResponse {
|
||||||
let token = get_login_token(&req);
|
let token = get_login_token(&req);
|
||||||
if !token.is_none() {
|
if !token.is_none() {
|
||||||
|
|
|
@ -29,3 +29,8 @@ body {
|
||||||
#logout:hover {
|
#logout:hover {
|
||||||
background-color: red;
|
background-color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#error p {
|
||||||
|
color: orange;
|
||||||
|
grid-template-columns: auto auto auto;
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,65 @@
|
||||||
import { useState, useParams, useEffect } from 'react'
|
import { useState, useParams, useEffect } from 'react'
|
||||||
import './Home.css'
|
import './Home.css'
|
||||||
import Request from '../Request.jsx'
|
import Request from '../Request.jsx'
|
||||||
|
let bonusItems = [];
|
||||||
|
|
||||||
|
function Bonus() {
|
||||||
|
const [inputValue, setInputValue] = useState('');
|
||||||
|
const error = useState("");
|
||||||
|
|
||||||
|
let itemz = [];
|
||||||
|
bonusItems.forEach((e) => {
|
||||||
|
itemz.push(e.master_login_bonus_id);
|
||||||
|
})
|
||||||
|
|
||||||
|
const [submittedItems, setSubmittedItems] = useState(itemz);
|
||||||
|
|
||||||
|
const handleSubmit = async (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
let input = parseInt(inputValue.trim());
|
||||||
|
if (isNaN(input) || submittedItems.includes(input)) return;
|
||||||
|
let resp = await Request("/api/webui/startLoginbonus", {
|
||||||
|
bonus_id: input
|
||||||
|
});
|
||||||
|
if (resp.result !== "OK") {
|
||||||
|
error[1](resp.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setSubmittedItems([...submittedItems, resp.id]);
|
||||||
|
setInputValue('');
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleRemoveItem = (index) => {
|
||||||
|
const updatedItems = [...submittedItems];
|
||||||
|
updatedItems.splice(index, 1);
|
||||||
|
setSubmittedItems(updatedItems);
|
||||||
|
};
|
||||||
|
// <button onClick={() => handleRemoveItem(index)}>X</button>
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h2>Current login bonus list</h2>
|
||||||
|
<div id="error"> { error[0] ? <p>Error: { error[0] } </p> : <p></p> } </div>
|
||||||
|
<ul>
|
||||||
|
{submittedItems.map((item, index) => (
|
||||||
|
<li key={index}>
|
||||||
|
{item}
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<form onSubmit={handleSubmit}>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={inputValue}
|
||||||
|
onChange={(event) => setInputValue(event.target.value)}
|
||||||
|
placeholder="Enter login bonus ID"
|
||||||
|
/>
|
||||||
|
<button type="submit">Submit</button>
|
||||||
|
</form>
|
||||||
|
<p>You can find a list of available login bonus IDs <a href="https://github.com/ethanaobrien/ew/blob/main/src/router/json/login_bonus.json">here</a>. You should input the <code>id</code> field</p>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function Home() {
|
function Home() {
|
||||||
const [user, userdata] = useState();
|
const [user, userdata] = useState();
|
||||||
|
@ -18,12 +77,23 @@ function Home() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let user = resp.data.userdata;
|
let user = resp.data.userdata;
|
||||||
//let login = resp.data.loginbonus;
|
bonusItems = resp.data.loginbonus.bonus_list;
|
||||||
|
/*
|
||||||
|
bonusItems = [{"master_login_bonus_id":1,"day_counts":[1,2],"event_bonus_list":[]}];
|
||||||
|
let user = {
|
||||||
|
user: {
|
||||||
|
id: 1,
|
||||||
|
rank: 3,
|
||||||
|
exp: 10,
|
||||||
|
last_login_time: 5
|
||||||
|
}
|
||||||
|
}*/
|
||||||
userdata(
|
userdata(
|
||||||
<div>
|
<div>
|
||||||
<p>User id: { user.user.id } </p>
|
<p>User id: { user.user.id } </p>
|
||||||
<p>Rank: { user.user.rank } ({ user.user.exp } exp)</p>
|
<p>Rank: { user.user.rank } ({ user.user.exp } exp)</p>
|
||||||
<p>Last Login: { (new Date(user.user.last_login_time * 1000)).toString() } </p>
|
<p>Last Login: { (new Date(user.user.last_login_time * 1000)).toString() } </p>
|
||||||
|
<Bonus />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Add table
Reference in a new issue