From abebbe7f81b0ef3aa2c049000d523a9f0c4473f7 Mon Sep 17 00:00:00 2001 From: ghostlyzsh Date: Sun, 7 Apr 2024 20:26:03 -0500 Subject: [PATCH] return of auth and incomplete starfield fixing --- server/src/main.rs | 83 +++++++++++++--------------- starkingdoms-client/src/rendering.ts | 25 +++++---- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index 7eea944bd0c4a08c881c0ea0332f38e466f1a4a3..fbaf079f558ad4f0bc314cc293da36512dbe7fb6 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -21,7 +21,6 @@ static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; use std::collections::HashMap; use std::net::IpAddr; -use std::num::NonZeroUsize; use crate::mathutil::rot2d; use crate::ws::{StkTungsteniteServerConfig, StkTungsteniteServerPlugin, WsEvent}; @@ -34,11 +33,13 @@ use bevy::{ }; use bevy_rapier2d::prelude::*; use component::*; -//use hmac::Mac; +use hmac::{Hmac, Mac}; +use jwt::VerifyWithKey; use packet::*; use part::{HEARTY_THRUST_ENERGY, LANDING_THRUSTER_ENERGY}; use rand::Rng; use serde::{Deserialize, Serialize}; +use sha2::Sha256; use starkingdoms_common::SaveModule; use starkingdoms_common::{pack_savefile, unpack_savefile, SaveData}; use std::f32::consts::PI; @@ -316,47 +317,45 @@ fn on_message( Packet::ClientLogin { username, save, - jwt: _, + jwt, } => { // auth // plz no remove - /* - if let Some(token) = jwt { - let key: Hmac = Hmac::new_from_slice(&app_keys.app_key).unwrap(); - let claims: UserToken = match token.verify_with_key(&key) { - Ok(c) => c, - Err(e) => { - event_queue.push(WsEvent::Send { - to: *from, - message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: format!("Token is invalid or verification failed: {e}. Please log in again, or contact StarKingdoms staff if the problem persists.") }.into(), - }); - event_queue.push(WsEvent::Close { addr: *from }); - continue; - } - }; - - if claims.permission_level < REQUIRED_PERM_LEVEL { - event_queue.push(WsEvent::Send { - to: *from, - message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: format!("Permission level {} is too low, {REQUIRED_PERM_LEVEL} is required. If your permissions were just changed, you need to log out and log back in for the change to take effect. If you believe this is a mistake, contact StarKingdoms staff.", claims.permission_level) }.into(), - }); - event_queue.push(WsEvent::Close { addr: *from }); - continue; - } - - event_queue.push(WsEvent::Send { - to: *from, - message: Packet::Message { message_type: MessageType::Server, actor: "StarKingdoms Team".to_string(), content: "Thank you for participating in the StarKingdoms private alpha! Your feedback is essential to improving the game, so please give us any feedback you have in the Discord! <3".to_string() }.into(), - }); - } else if REQUIRED_PERM_LEVEL != 0 { - event_queue.push(WsEvent::Send { - to: *from, - message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: "Authentication is required to join this server at the moment. Log in and try again, or try again later.".to_string() }.into(), - }); - event_queue.push(WsEvent::Close { addr: *from }); - continue; - } - */ + if let Some(token) = jwt { + let key: Hmac = Hmac::new_from_slice(&app_keys.app_key).unwrap(); + let claims: UserToken = match token.verify_with_key(&key) { + Ok(c) => c, + Err(e) => { + event_queue.push(WsEvent::Send { + to: *from, + message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: format!("Token is invalid or verification failed: {e}. Please log in again, or contact StarKingdoms staff if the problem persists.") }.into(), + }); + event_queue.push(WsEvent::Close { addr: *from }); + continue; + } + }; + + if claims.permission_level < REQUIRED_PERM_LEVEL { + event_queue.push(WsEvent::Send { + to: *from, + message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: format!("Permission level {} is too low, {REQUIRED_PERM_LEVEL} is required. If your permissions were just changed, you need to log out and log back in for the change to take effect. If you believe this is a mistake, contact StarKingdoms staff.", claims.permission_level) }.into(), + }); + event_queue.push(WsEvent::Close { addr: *from }); + continue; + } + + event_queue.push(WsEvent::Send { + to: *from, + message: Packet::Message { message_type: MessageType::Server, actor: "StarKingdoms Team".to_string(), content: "Thank you for participating in the StarKingdoms private alpha! Your feedback is essential to improving the game, so please give us any feedback you have in the Discord! <3".to_string() }.into(), + }); + } else if REQUIRED_PERM_LEVEL != 0 { + event_queue.push(WsEvent::Send { + to: *from, + message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: "Authentication is required to join this server at the moment. Log in and try again, or try again later.".to_string() }.into(), + }); + event_queue.push(WsEvent::Close { addr: *from }); + continue; + } let angle: f32 = { let mut rng = rand::thread_rng(); rng.gen::() * std::f32::consts::PI * 2. @@ -1814,10 +1813,6 @@ fn on_position_change( message: packet.into(), }); } - /*let packet = Packet::SaveEligibility { eligible: true }; - for _ in 0..10000 { - packet_send.send(WsEvent::Broadcast { message: packet.clone().into() }); - }*/ let mut planets = Vec::new(); for (entity, planet_type, transform) in planet_query.iter() { diff --git a/starkingdoms-client/src/rendering.ts b/starkingdoms-client/src/rendering.ts index 55ec7e70da35587c4004a179c88cca38c07e466f..8fb85e097d640ee72c22811cff0c2a2dce237a81 100644 --- a/starkingdoms-client/src/rendering.ts +++ b/starkingdoms-client/src/rendering.ts @@ -77,18 +77,19 @@ export function startRender() { // Main starfield const sprite_size_scale_basis = 3 / 4; - const sprite_size_px_basis = 512; + const sprite_size_px_basis = 512; // size of single tile const sprite_size = - (sprite_size_px_basis * sprite_size_scale_basis) / global.scale; + (sprite_size_px_basis * sprite_size_scale_basis)/global.scale; global.rendering!.starfield.sprite.height = window.innerHeight / global.scale + sprite_size; global.rendering!.starfield.sprite.width = window.innerWidth / global.scale + sprite_size; + console.log(global.scale); global.rendering!.starfield.off_x = - (player()?.transform.x! * sprite_size_scale_basis) % sprite_size; + (player()?.transform.x! * sprite_size_scale_basis) % (global.scale); global.rendering!.starfield.off_y = - (player()?.transform.y! * sprite_size_scale_basis) % sprite_size; + (player()?.transform.y! * sprite_size_scale_basis) % (global.scale); global.rendering!.starfield.sprite.x = Math.floor(player()?.transform.x! / sprite_size) * sprite_size - @@ -105,22 +106,26 @@ export function startRender() { global.rendering!.starfield.off_y; // Near starfield + const sprite_size_near = + sprite_size_px_basis * (sprite_size_scale_basis*2); global.rendering!.starfield_near.sprite.height = - window.innerHeight + 2 * sprite_size; + window.innerHeight / global.scale + 2 * sprite_size; global.rendering!.starfield_near.sprite.width = - window.innerWidth + 2 * sprite_size; + window.innerWidth / global.scale + 2 * sprite_size; global.rendering!.starfield_near.off_x = - (player()?.transform.x! / 2) % (2 * sprite_size); + //(player()?.transform.x!/2) % (sprite_size*2*global.scale); + (player()?.transform.x!/2) % (sprite_size_px_basis*(sprite_size_scale_basis*2)); global.rendering!.starfield_near.off_y = - (player()?.transform.y! / 2) % (2 * sprite_size); + //(player()?.transform.y!/2) % (sprite_size*2*global.scale); + (player()?.transform.y!/2) % (sprite_size_px_basis*(sprite_size_scale_basis*2)); global.rendering!.starfield_near.sprite.x = - Math.floor((player()?.transform.x! / 2) * sprite_size) * 2 * sprite_size - + Math.floor((player()?.transform.x! / 2) / sprite_size) * 2 * sprite_size - global.rendering!.starfield_near.sprite.width / 2 + sprite_size; global.rendering!.starfield_near.sprite.y = - Math.floor((player()?.transform.y! / 2) * sprite_size) * 2 * sprite_size - + Math.floor((player()?.transform.y! / 2) / sprite_size) * 2 * sprite_size - global.rendering!.starfield_near.sprite.height / 2 + sprite_size;