~starkingdoms/starkingdoms

61f286268a86795e572f8177f72af203f3efecf2 — core 1 year, 11 months ago 42b361c
fmt
3 files changed, 22 insertions(+), 13 deletions(-)

M server/src/main.rs
M starkingdoms-client/src/hub.ts
M starkingdoms-common/src/lib.rs
M server/src/main.rs => server/src/main.rs +10 -7
@@ 24,16 24,16 @@ use bevy_rapier2d::prelude::*;
use bevy_twite::{twite::frame::MessageType, ServerEvent, TwiteServerConfig, TwiteServerPlugin};
use component::Input;
use component::*;
use hmac::{Hmac, Mac};
use jwt::VerifyWithKey;
use packet::*;
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;
use serde::{Serialize, Deserialize};
use std::time::SystemTime;
use hmac::{Hmac, Mac};
use jwt::VerifyWithKey;
use sha2::Sha256;

pub mod component;
pub mod macros;


@@ 267,7 267,7 @@ fn on_message(
    mut packet_recv: Local<ManualEventReader<ServerEvent>>,
    mut packet_event_send: ResMut<Events<ServerEvent>>,
    app_keys: Res<AppKeys>,
    ) {
) {
    let mut event_queue = Vec::new();
    for ev in packet_recv.read(&packet_event_send) {
        if let ServerEvent::Recv(addr, MessageType::Text, data) = ev {


@@ 275,8 275,11 @@ fn on_message(
            let packet: Packet = err_or_cont!(serde_json::from_str(&data));

            match packet {
                Packet::ClientLogin { username, save, jwt } => {

                Packet::ClientLogin {
                    username,
                    save,
                    jwt,
                } => {
                    if jwt.is_none() && REQUIRED_PERMISSION_LEVEL != 0 {
                        // d/c
                        let packet = Packet::Message {

M starkingdoms-client/src/hub.ts => starkingdoms-client/src/hub.ts +1 -1
@@ 67,7 67,7 @@ export async function hub_connect(
      c: {
        username,
        save: window.localStorage.getItem("save"),
        jwt: window.localStorage.getItem("stk-token")
        jwt: window.localStorage.getItem("stk-token"),
      },
    };
    sendPacket(client, packet);

M starkingdoms-common/src/lib.rs => starkingdoms-common/src/lib.rs +11 -5
@@ 73,15 73,21 @@ pub fn pack_savefile(key: &[u8], save_data: SaveData) -> String {
}
pub fn unpack_savefile(key: &[u8], file: String) -> Result<SaveData, Box<dyn Error>> {
    // << reverse! <<
    let savefile_bytes = base64::engine::general_purpose::STANDARD.decode(file).map_err(|e| format!("error decoding b64: {e}"))?;
    let savefile_bytes = base64::engine::general_purpose::STANDARD
        .decode(file)
        .map_err(|e| format!("error decoding b64: {e}"))?;

    let save_file: Savefile = rmp_serde::from_slice(&savefile_bytes).map_err(|e| format!("error decoding savefile wrapper: {e}"))?;
    let save_file: Savefile = rmp_serde::from_slice(&savefile_bytes)
        .map_err(|e| format!("error decoding savefile wrapper: {e}"))?;

    let mut mac: Hmac<Sha256> = Hmac::new_from_slice(key).map_err(|e| format!("error loading hmac-sha256: {e}"))?;
    let mut mac: Hmac<Sha256> =
        Hmac::new_from_slice(key).map_err(|e| format!("error loading hmac-sha256: {e}"))?;
    mac.update(&save_file.data_msgpack);
    mac.verify_slice(&save_file.mac).map_err(|e| format!("error verifying signature: {e}"))?;
    mac.verify_slice(&save_file.mac)
        .map_err(|e| format!("error verifying signature: {e}"))?;

    let save_data = rmp_serde::from_slice(&save_file.data_msgpack).map_err(|e| format!("error decoding inner signature: {e}"))?;
    let save_data = rmp_serde::from_slice(&save_file.data_msgpack)
        .map_err(|e| format!("error decoding inner signature: {e}"))?;

    Ok(save_data)
}