From d27af4e2e43c2df81284c1cf81dccf271446fbee Mon Sep 17 00:00:00 2001 From: ParrotXray Date: Mon, 25 May 2026 11:20:18 +0800 Subject: [PATCH] feat/complete-account-page (#15) * wip * wip * wip * wip * wip * docs: Delete LICENSE * docs: Add GNU Affero General Public License v3 Added the GNU Affero General Public License version 3 to the project. * feat: inline frontend submodule and add auth + access control improvements * feat: Add live system log WebSocket API and frontend log viewer --- .github/images/architecture.png | Bin 0 -> 99631 bytes .github/images/mantis-logo.png | Bin 0 -> 62639 bytes LICENSE | 143 ++++++++---------- README.md | 7 + mantis-frontend | 2 +- mantis/src/core/app_state.rs | 2 + mantis/src/core/infrastructure/app_db.rs | 25 +-- .../core/infrastructure/log_broadcaster.rs | 53 +++++++ mantis/src/core/infrastructure/mod.rs | 10 +- mantis/src/core/system.rs | 17 ++- mantis/src/model/log/auth.rs | 4 +- mantis/src/utils/logging.rs | 8 +- mantis/src/utils/mod.rs | 1 + mantis/src/utils/tracing_layer.rs | 55 +++++++ mantis/src/web/api/auth.rs | 78 ++++++++++ mantis/src/web/api/logs.rs | 25 +++ mantis/src/web/api/mod.rs | 1 + mantis/src/web/websocket/log_websocket.rs | 64 ++++++++ mantis/src/web/websocket/mod.rs | 1 + 19 files changed, 397 insertions(+), 99 deletions(-) create mode 100644 .github/images/architecture.png create mode 100644 .github/images/mantis-logo.png create mode 100644 mantis/src/core/infrastructure/log_broadcaster.rs create mode 100644 mantis/src/utils/tracing_layer.rs create mode 100644 mantis/src/web/api/logs.rs create mode 100644 mantis/src/web/websocket/log_websocket.rs diff --git a/.github/images/architecture.png b/.github/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..88f56a78461dc207205a7c05db6177af4c26975f GIT binary patch literal 99631 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

#-IH5x7;y2Eu+ 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 w4JW{Mg=4MB(BlB`v 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 literal 0 HcmV?d00001 diff --git a/.github/images/mantis-logo.png b/.github/images/mantis-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d2da023e3c78d15d43d0403a03171f85a64dd44f GIT binary patch literal 62639 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 literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE index f288702..0ad25db 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies @@ -7,17 +7,15 @@ Preamble - The GNU General Public License is a free, copyleft license for -software and other kinds of works. + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to +our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. +software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you @@ -26,44 +24,34 @@ them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. The precise terms and conditions for copying, distribution and modification follow. @@ -72,7 +60,7 @@ modification follow. 0. Definitions. - "This License" refers to version 3 of the GNU General Public License. + "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. @@ -549,35 +537,45 @@ to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - 13. Use with the GNU Affero General Public License. + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single +under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General +Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published +GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's +versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. @@ -635,40 +633,29 @@ the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Affero General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see +For more information on this, and how to apply and follow the GNU AGPL, see . - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/README.md b/README.md index eb07164..ca0644c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ ## Project Overview +

+ log +

+ **Mantis** is a high-performance network security solution that combines eBPF XDP technology with deep learning models to provide advanced network protection. The system operates as a standalone network appliance that can run on any Ubuntu-based system with compatible network hardware. ## Core Technologies @@ -10,6 +14,9 @@ - **Deep Learning Models** - Identifies and predicts potential network attacks with intelligent threat detection - **Hardware Integration** - Designed to work with Intel i350 T2 and similar enterprise-grade network interface cards +## System Architecture +![Architecture](.github/images/architecture.png) + [//]: # (## Functional Modules) [//]: # () diff --git a/mantis-frontend b/mantis-frontend index 66ae9de..2b9c85d 160000 --- a/mantis-frontend +++ b/mantis-frontend @@ -1 +1 @@ -Subproject commit 66ae9de967702ef02ab47baa9597ab8f16e3ab91 +Subproject commit 2b9c85de173c2810a8ffca183ddddcc751f4e227 diff --git a/mantis/src/core/app_state.rs b/mantis/src/core/app_state.rs index 4be2a92..e580104 100644 --- a/mantis/src/core/app_state.rs +++ b/mantis/src/core/app_state.rs @@ -6,6 +6,7 @@ use crate::core::infrastructure::app_config::AppConfig; use crate::core::infrastructure::app_db::AppDB; use crate::core::infrastructure::detection_alert::DetectionAlert; use crate::core::infrastructure::health::SystemHealth; +use crate::core::infrastructure::log_broadcaster::LogBroadcaster; use crate::detection::ml::config_loader::InferenceConfig; #[derive(Clone)] @@ -17,4 +18,5 @@ pub struct AppState { pub health: Arc, pub detection_alert: Arc, pub app_db: Option>, + pub log_broadcaster: Arc, } diff --git a/mantis/src/core/infrastructure/app_db.rs b/mantis/src/core/infrastructure/app_db.rs index 7501d7d..ace4148 100644 --- a/mantis/src/core/infrastructure/app_db.rs +++ b/mantis/src/core/infrastructure/app_db.rs @@ -5,6 +5,7 @@ use argon2::Argon2; use argon2::password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString, rand_core::OsRng}; use macros::log; use rusqlite::{Connection, params}; +use uuid::Uuid; use crate::model::error::Error; use crate::model::error::auth::AuthError; @@ -55,22 +56,24 @@ impl AppDB { Ok(Self { conn: Mutex::new(conn) }) } - pub fn ensure_default_admin(&self, default_password: &str) -> Result<(), Error> { + pub fn has_any_account(&self) -> Result { let conn = self.conn.lock().unwrap(); let count: i64 = conn .query_row("SELECT COUNT(*) FROM accounts", [], |row| row.get(0)) .map_err(|e| AuthError::DBError { msg: e.to_string() })?; + Ok(count > 0) + } - if count == 0 { - let hash = hash_password(default_password)?; - let now = chrono::Utc::now().timestamp(); - conn.execute( - "INSERT INTO accounts (id, username, password_hash, role, created_at) VALUES (?1, ?2, ?3, ?4, ?5)", - params!["admin", "admin", hash, "admin", now], - ) - .map_err(|e| AuthError::DBError { msg: e.to_string() })?; - log!(AuthLog::DefaultAdminCreated); - } + pub fn create_account(&self, username: &str, password: &str, role: &str) -> Result<(), Error> { + let hash = hash_password(password)?; + let id = Uuid::new_v4().to_string(); + let now = chrono::Utc::now().timestamp(); + let conn = self.conn.lock().unwrap(); + conn.execute( + "INSERT INTO accounts (id, username, password_hash, role, created_at) VALUES (?1, ?2, ?3, ?4, ?5)", + params![id, username, hash, role, now], + ) + .map_err(|e| AuthError::DBError { msg: e.to_string() })?; Ok(()) } diff --git a/mantis/src/core/infrastructure/log_broadcaster.rs b/mantis/src/core/infrastructure/log_broadcaster.rs new file mode 100644 index 0000000..a8eaedb --- /dev/null +++ b/mantis/src/core/infrastructure/log_broadcaster.rs @@ -0,0 +1,53 @@ +use std::collections::VecDeque; +use std::sync::{Arc, Mutex}; + +use serde::{Deserialize, Serialize}; +use tokio::sync::broadcast; + +const RING_BUFFER_SIZE: usize = 500; +const CHANNEL_CAPACITY: usize = 512; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct LogRecord { + pub timestamp: String, + pub level: String, + pub message: String, +} + +pub struct LogBroadcaster { + tx: broadcast::Sender, + recent: Mutex>, +} + +impl LogBroadcaster { + pub fn new() -> Arc { + let (tx, _) = broadcast::channel(CHANNEL_CAPACITY); + Arc::new(Self { + tx, + recent: Mutex::new(VecDeque::with_capacity(RING_BUFFER_SIZE)), + }) + } + + pub fn emit(&self, record: LogRecord) { + if let Ok(mut buf) = self.recent.lock() { + if buf.len() >= RING_BUFFER_SIZE { + buf.pop_front(); + } + buf.push_back(record.clone()); + } + if self.tx.receiver_count() > 0 { + let _ = self.tx.send(record); + } + } + + pub fn subscribe(&self) -> broadcast::Receiver { + self.tx.subscribe() + } + + pub fn recent_logs(&self) -> Vec { + self.recent + .lock() + .map(|buf| buf.iter().cloned().collect()) + .unwrap_or_default() + } +} diff --git a/mantis/src/core/infrastructure/mod.rs b/mantis/src/core/infrastructure/mod.rs index 4227c78..c24fe84 100644 --- a/mantis/src/core/infrastructure/mod.rs +++ b/mantis/src/core/infrastructure/mod.rs @@ -3,6 +3,7 @@ pub mod app_db; pub mod detection_alert; pub mod geoip; pub mod health; +pub mod log_broadcaster; use std::path::PathBuf; use std::sync::Arc; @@ -37,11 +38,16 @@ pub struct AppServices { pub ml_engine: Arc, pub suricata_engine: Option>, pub app_db: Option>, + pub log_broadcaster: Arc, shutdowns: SegQueue>, } impl AppServices { - pub fn new(app_config: Arc, inference_config: Arc) -> Result { + pub fn new( + app_config: Arc, + inference_config: Arc, + log_broadcaster: Arc, + ) -> Result { let health = SystemHealth::new(app_config.clone())?; let ml_models = Arc::new(MLModels::load_models(&app_config)?); @@ -105,7 +111,6 @@ impl AppServices { let app_db = if let Some(ref auth) = app_config.auth { let db_path = PathBuf::from(env!("DB_PATH")).join("app.db"); let db = AppDB::open(db_path, &auth.db_key)?; - db.ensure_default_admin(&auth.default_admin_password)?; Some(Arc::new(db)) } else { None @@ -119,6 +124,7 @@ impl AppServices { ml_engine, suricata_engine, app_db, + log_broadcaster, shutdowns: SegQueue::new(), }) } diff --git a/mantis/src/core/system.rs b/mantis/src/core/system.rs index 69d0798..f8ee8b9 100644 --- a/mantis/src/core/system.rs +++ b/mantis/src/core/system.rs @@ -22,8 +22,9 @@ use crate::model::error::misc::MiscError; use crate::model::log::ml::MLLog; use crate::model::log::system::SystemLog; use crate::utils::logging::Logging; +use crate::core::infrastructure::log_broadcaster::LogBroadcaster; use crate::web::api::default::default_route; -use crate::web::api::{auth, control, detection_alert, health, misc}; +use crate::web::api::{auth, control, detection_alert, health, logs, misc}; pub struct System { pub app_config: Arc, @@ -40,7 +41,8 @@ pub struct System { impl System { pub async fn new() -> Result { - Logging::initialize()?; + let log_broadcaster = LogBroadcaster::new(); + Logging::initialize(log_broadcaster.clone())?; log!(SystemLog::Initializing); @@ -59,7 +61,11 @@ impl System { &mut egress_ebpf, )?); - let app_services = Arc::new(AppServices::new(app_config.clone(), inference_config.clone())?); + let app_services = Arc::new(AppServices::new( + app_config.clone(), + inference_config.clone(), + log_broadcaster, + )?); let system = System { app_config, @@ -93,9 +99,10 @@ impl System { .run(app_services.ml_engine.clone(), app_services.suricata_engine.clone()) .await?; app_services.run().await?; - self.run_http_server().await?; log!(SystemLog::InitializeComplete); + + self.run_http_server().await?; Ok(()) } @@ -153,12 +160,14 @@ impl System { health: self.app_services.health.clone(), detection_alert: self.app_services.detection_alert.clone(), app_db: self.app_services.app_db.clone(), + log_broadcaster: self.app_services.log_broadcaster.clone(), }; let app = Router::new() .nest("/ebpf", control::router()) .nest("/detection", detection_alert::router()) .nest("/health", health::router()) + .nest("/logs", logs::router()) .nest("/misc", misc::router()) .nest("/auth", auth::router()) .fallback(default_route) diff --git a/mantis/src/model/log/auth.rs b/mantis/src/model/log/auth.rs index bffa47a..8b33089 100644 --- a/mantis/src/model/log/auth.rs +++ b/mantis/src/model/log/auth.rs @@ -6,8 +6,8 @@ loggable! { #[error("Auth DB initialized at {path}")] DbInitialized { path: String } => tracing::Level::INFO, - #[error("Default admin account created")] - DefaultAdminCreated => tracing::Level::INFO, + #[error("First admin account registered: {username}")] + FirstAdminRegistered { username: String } => tracing::Level::INFO, #[error("Login successful for user: {username}")] LoginSuccess { username: String } => tracing::Level::INFO, diff --git a/mantis/src/utils/logging.rs b/mantis/src/utils/logging.rs index 18b0904..5c967dc 100644 --- a/mantis/src/utils/logging.rs +++ b/mantis/src/utils/logging.rs @@ -1,4 +1,5 @@ use std::fs; +use std::sync::Arc; use tracing::Level; use tracing_appender::rolling::{RollingFileAppender, Rotation}; @@ -6,13 +7,15 @@ use tracing_subscriber::filter::EnvFilter; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; +use crate::core::infrastructure::log_broadcaster::LogBroadcaster; use crate::model::error::Error; use crate::model::error::io::IOError; +use crate::utils::tracing_layer::BroadcastLayer; pub struct Logging; impl Logging { - pub fn initialize() -> Result<(), Error> { + pub fn initialize(broadcaster: Arc) -> Result<(), Error> { let log_directory = "logs"; fs::create_dir_all(log_directory).map_err(|err| IOError::CreateDirectoryFailed(log_directory, err))?; @@ -33,6 +36,8 @@ impl Logging { .with_ansi(false) .with_writer(file_appender); + let broadcast_layer = BroadcastLayer::new(broadcaster); + let level = if cfg!(debug_assertions) { Level::DEBUG } else { @@ -42,6 +47,7 @@ impl Logging { tracing_subscriber::registry() .with(stdout_layer) .with(file_layer) + .with(broadcast_layer) .with(EnvFilter::from_default_env().add_directive(level.into())) .init(); diff --git a/mantis/src/utils/mod.rs b/mantis/src/utils/mod.rs index b3ee894..6e26a27 100644 --- a/mantis/src/utils/mod.rs +++ b/mantis/src/utils/mod.rs @@ -3,5 +3,6 @@ pub mod cpu_affinity; pub mod logging; pub mod packet_parser; pub mod static_files; +pub mod tracing_layer; pub mod ip_address; diff --git a/mantis/src/utils/tracing_layer.rs b/mantis/src/utils/tracing_layer.rs new file mode 100644 index 0000000..19d08b6 --- /dev/null +++ b/mantis/src/utils/tracing_layer.rs @@ -0,0 +1,55 @@ +use std::sync::Arc; + +use tracing::Subscriber; +use tracing_subscriber::Layer; +use tracing_subscriber::layer::Context; + +use crate::core::infrastructure::log_broadcaster::{LogBroadcaster, LogRecord}; + +pub struct BroadcastLayer { + broadcaster: Arc, +} + +impl BroadcastLayer { + pub fn new(broadcaster: Arc) -> Self { + Self { broadcaster } + } +} + +struct MessageVisitor { + message: String, +} + +impl tracing::field::Visit for MessageVisitor { + fn record_debug(&mut self, field: &tracing::field::Field, value: &dyn std::fmt::Debug) { + if field.name() == "message" { + self.message = format!("{value:?}"); + } + } + + fn record_str(&mut self, field: &tracing::field::Field, value: &str) { + if field.name() == "message" { + self.message = value.to_string(); + } + } +} + +impl Layer for BroadcastLayer { + fn on_event(&self, event: &tracing::Event<'_>, _ctx: Context<'_, S>) { + let level = event.metadata().level().to_string(); + let mut visitor = MessageVisitor { message: String::new() }; + event.record(&mut visitor); + + if visitor.message.is_empty() { + return; + } + + let record = LogRecord { + timestamp: chrono::Utc::now().to_rfc3339_opts(chrono::SecondsFormat::Millis, true), + level, + message: visitor.message, + }; + + self.broadcaster.emit(record); + } +} diff --git a/mantis/src/web/api/auth.rs b/mantis/src/web/api/auth.rs index 328d055..e58419c 100644 --- a/mantis/src/web/api/auth.rs +++ b/mantis/src/web/api/auth.rs @@ -18,11 +18,24 @@ use crate::web::middleware::auth::{AuthenticatedUser, Claims}; pub fn router() -> Router { Router::new() + .route("/status", get(status)) + .route("/register", post(register)) .route("/login", post(login)) .route("/me", get(me)) .route("/logout", post(logout)) } +#[derive(Serialize)] +struct StatusResponse { + initialized: bool, +} + +#[derive(Deserialize)] +struct RegisterRequest { + username: String, + password: String, +} + #[derive(Deserialize)] struct LoginRequest { username: String, @@ -41,6 +54,71 @@ struct MeResponse { role: String, } +async fn status(State(state): State) -> impl IntoResponse { + if state.app_config.auth.is_none() { + return (StatusCode::NOT_IMPLEMENTED, "Auth not configured").into_response(); + } + let db = match &state.app_db { + Some(db) => db, + None => return (StatusCode::INTERNAL_SERVER_ERROR, "Database not available").into_response(), + }; + match db.has_any_account() { + Ok(initialized) => Json(StatusResponse { initialized }).into_response(), + Err(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Database error").into_response(), + } +} + +async fn register(State(state): State, Json(body): Json) -> impl IntoResponse { + let auth_cfg = match state.app_config.auth.as_ref() { + Some(c) => c, + None => return (StatusCode::NOT_IMPLEMENTED, "Auth not configured").into_response(), + }; + let db = match &state.app_db { + Some(db) => db, + None => return (StatusCode::INTERNAL_SERVER_ERROR, "Database not available").into_response(), + }; + + match db.has_any_account() { + Ok(true) => return (StatusCode::FORBIDDEN, "System already initialized").into_response(), + Ok(false) => {} + Err(_) => return (StatusCode::INTERNAL_SERVER_ERROR, "Database error").into_response(), + } + + if body.username.trim().is_empty() || body.password.len() < 8 { + return (StatusCode::BAD_REQUEST, "Username required and password must be at least 8 characters").into_response(); + } + + if db.create_account(body.username.trim(), &body.password, "admin").is_err() { + return (StatusCode::INTERNAL_SERVER_ERROR, "Failed to create account").into_response(); + } + + log!(AuthLog::FirstAdminRegistered { + username: body.username.trim().to_string() + }); + + let account = match db.find_account_by_username(body.username.trim()) { + Ok(Some(a)) => a, + _ => return (StatusCode::INTERNAL_SERVER_ERROR, "Account lookup failed").into_response(), + }; + + let exp = (Utc::now().timestamp() as usize) + (auth_cfg.token_ttl_secs as usize); + let claims = Claims { + sub: account.id, + username: account.username, + role: account.role, + exp, + }; + + match encode( + &Header::default(), + &claims, + &EncodingKey::from_secret(auth_cfg.jwt_secret.as_bytes()), + ) { + Ok(token) => Json(LoginResponse { token }).into_response(), + Err(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Token generation failed").into_response(), + } +} + async fn login(State(state): State, Json(body): Json) -> impl IntoResponse { let auth_cfg = match state.app_config.auth.as_ref() { Some(c) => c, diff --git a/mantis/src/web/api/logs.rs b/mantis/src/web/api/logs.rs new file mode 100644 index 0000000..716066d --- /dev/null +++ b/mantis/src/web/api/logs.rs @@ -0,0 +1,25 @@ +use axum::Router; +use axum::extract::{State, WebSocketUpgrade}; +use axum::response::IntoResponse; +use axum::routing::get; + +use crate::core::app_state::AppState; +use crate::web::websocket::log_websocket::handle_log_stream; + +pub fn router() -> Router { + Router::new() + .route("/recent", get(recent_logs)) + .route("/websocket", get(log_websocket)) +} + +async fn recent_logs(State(state): State) -> impl IntoResponse { + let logs = state.log_broadcaster.recent_logs(); + axum::Json(logs) +} + +async fn log_websocket( + ws: WebSocketUpgrade, + State(state): State, +) -> impl IntoResponse { + ws.on_upgrade(move |socket| handle_log_stream(socket, state.log_broadcaster)) +} diff --git a/mantis/src/web/api/mod.rs b/mantis/src/web/api/mod.rs index 37af96a..c6341a5 100644 --- a/mantis/src/web/api/mod.rs +++ b/mantis/src/web/api/mod.rs @@ -3,4 +3,5 @@ pub mod control; pub mod default; pub mod detection_alert; pub mod health; +pub mod logs; pub mod misc; diff --git a/mantis/src/web/websocket/log_websocket.rs b/mantis/src/web/websocket/log_websocket.rs new file mode 100644 index 0000000..9048ca9 --- /dev/null +++ b/mantis/src/web/websocket/log_websocket.rs @@ -0,0 +1,64 @@ +use std::sync::Arc; + +use axum::extract::ws::{Message, WebSocket}; +use futures_util::{SinkExt, StreamExt}; +use macros::log; +use tokio::sync::broadcast; + +use crate::core::infrastructure::log_broadcaster::LogBroadcaster; +use crate::model::error::http::HttpError; +use crate::model::error::misc::MiscError; +use crate::model::log::http::HttpLog; + +pub async fn handle_log_stream(socket: WebSocket, broadcaster: Arc) { + let (mut sender, mut receiver) = socket.split(); + + // Send buffered recent logs first + let recent = broadcaster.recent_logs(); + for record in recent { + match serde_json::to_string(&record) { + Ok(json) => { + if sender.send(Message::Text(json.into())).await.is_err() { + return; + } + } + Err(e) => log!(MiscError::SerializeError(e)), + } + } + + let mut rx = broadcaster.subscribe(); + + loop { + tokio::select! { + msg = receiver.next() => { + match msg { + Some(Ok(Message::Ping(data))) => { + if sender.send(Message::Pong(data)).await.is_err() { break; } + } + Some(Ok(Message::Close(_))) | None => break, + Some(Err(e)) => { + log!(HttpError::WebSocketError { msg: e.to_string() }); + break; + } + _ => {} + } + } + result = rx.recv() => { + match result { + Ok(record) => { + match serde_json::to_string(&record) { + Ok(json) => { + if sender.send(Message::Text(json.into())).await.is_err() { break; } + } + Err(e) => log!(MiscError::SerializeError(e)), + } + } + Err(broadcast::error::RecvError::Lagged(n)) => { + log!(HttpLog::WebSocketLaged { skipped: n }); + } + Err(broadcast::error::RecvError::Closed) => break, + } + } + } + } +} diff --git a/mantis/src/web/websocket/mod.rs b/mantis/src/web/websocket/mod.rs index 8ae1755..84b14cc 100644 --- a/mantis/src/web/websocket/mod.rs +++ b/mantis/src/web/websocket/mod.rs @@ -1,3 +1,4 @@ pub mod alert_websocket; pub mod flow_websocket; pub mod health_websocket; +pub mod log_websocket;