From e1bf152fddf47c9c7ca8df4d38da2619162521e5 Mon Sep 17 00:00:00 2001 From: Alex Emmet <111742636+Alex-Emmet@users.noreply.github.com> Date: Sat, 22 Nov 2025 22:00:57 +0000 Subject: [PATCH] Krimskrams --- src/server/api.rs | 6 ++++++ src/users/user_profile.rs | 25 +++++++++++++++++++++---- src/util/file_util.rs | 3 +++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/server/api.rs b/src/server/api.rs index ae5e039..13af4df 100644 --- a/src/server/api.rs +++ b/src/server/api.rs @@ -1,5 +1,6 @@ use std::sync::Arc; +use crate::auth::auth_connector::unregister_user; use crate::communities::community::Community; use crate::data::communication::{CommunicationType, CommunicationValue, DataTypes}; use crate::gui::log_panel::log_message; @@ -78,6 +79,11 @@ pub async fn handle( } else { let uuid = Uuid::parse_str(body.unwrap()["uuid"].as_str().unwrap()) .unwrap(); + unregister_user( + uuid, + &user_manager::get_user(uuid).unwrap().reset_token, + ) + .await; user_manager::remove_user(uuid); "{}".to_string() } diff --git a/src/users/user_profile.rs b/src/users/user_profile.rs index f0ba7df..a76003f 100644 --- a/src/users/user_profile.rs +++ b/src/users/user_profile.rs @@ -1,6 +1,9 @@ +use std::time::{SystemTime, UNIX_EPOCH}; + use crate::auth::auth_connector; use crate::gui::log_panel::log_message; use crate::users::user_manager; +use crate::util::file_util::{has_file, load_file, used_dir_space}; use base64::{Engine as _, engine::general_purpose}; use json::{JsonValue, object}; use rand::Rng; @@ -15,6 +18,7 @@ pub struct UserProfile { pub public_key: String, pub private_key_hash: String, pub reset_token: String, + pub created_at: i64, pub display_name: Option, } @@ -33,6 +37,10 @@ impl UserProfile { display_name, public_key, private_key_hash, + created_at: SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_millis() as i64, reset_token, } } @@ -43,6 +51,7 @@ impl UserProfile { "username" => self.username.clone(), "public_key" => self.public_key.clone(), "private_key_hash" => self.private_key_hash.clone(), + "created_at" => self.created_at, "reset_token" => self.reset_token.clone() }; if let Some(d) = &self.display_name { @@ -56,28 +65,36 @@ impl UserProfile { "username" => self.username.clone(), "public_key" => self.public_key.clone(), "private_key_hash" => self.private_key_hash.clone(), + "created_at" => self.created_at, + "storage" => used_dir_space(&format!("users/{}", self.user_id.to_string())), }; if let Some(d) = &self.display_name { obj["display_name"] = d.clone().into(); } + if has_file("", &format!("{}.tu", self.username.clone())) { + obj["tu"] = load_file("", &format!("{}.tu", self.username.clone())).into(); + } + obj } pub async fn from_json(j: &JsonValue) -> Option { - let uuid = Uuid::parse_str(j["uuid"].as_str()?).ok()?; + let user_id = Uuid::parse_str(j["uuid"].as_str()?).ok()?; let username = j["username"].as_str()?.to_string(); let public_key = j["public_key"].as_str()?.to_string(); let private_key_hash = j["private_key_hash"].as_str()?.to_string(); let reset_token = j["reset_token"].as_str()?.to_string(); + let created_at = j["created_at"].as_i64()?; let display_name = j["display_name"].as_str().map(|s| s.to_string()); - let mut up = UserProfile::new( - uuid, + let mut up = UserProfile { + user_id, username, display_name, public_key, private_key_hash, + created_at, reset_token, - ); + }; if j.has_key("migrate") || j.has_key("migrating") diff --git a/src/util/file_util.rs b/src/util/file_util.rs index 776150b..adb38e1 100644 --- a/src/util/file_util.rs +++ b/src/util/file_util.rs @@ -190,6 +190,9 @@ pub fn get_directory() -> String { pub fn used_space() -> u64 { get_directory_size(&PathBuf::from(get_directory())) } +pub fn used_dir_space(path: &str) -> u64 { + get_directory_size(&PathBuf::from(format!("{}/{}", get_directory(), path))) +} pub fn get_directory_size(directory: &Path) -> u64 { let mut size = 0;