mod admin; mod auth; mod storage; mod profile; mod cinema; use admin::DeviceSecurityInfo; use auth::{AuthResponse, DbStatus, ResetRequestResponse}; use serde::Serialize; use storage::{ServerUserDto, StorageItemDto, StorageStats}; #[derive(Debug, Serialize)] pub struct SafeDbInfo { pub host: String, pub port: u16, pub user: String, pub dbname: String, pub ssl_mode: String, pub users_table: String, pub email_column: String, } #[tauri::command] async fn check_db() -> Result { Ok(auth::check_db_health().await) } #[tauri::command] async fn login(email: String, password: String) -> Result { Ok(auth::authenticate_user(&email, &password).await) } #[tauri::command] async fn register(email: String, password: String, username: Option) -> Result { Ok(auth::register_user(&email, &password, username.as_deref()).await) } #[tauri::command] async fn request_reset_code(email: String) -> Result { Ok(auth::request_reset_code(&email).await) } #[tauri::command] fn verify_reset_code(email: String, code: String) -> Result { Ok(auth::verify_reset_code(&email, &code)) } #[tauri::command] async fn reset_password(email: String, code: String, new_password: String) -> Result { Ok(auth::reset_password_with_code(&email, &code, &new_password).await) } #[tauri::command] fn get_db_info() -> SafeDbInfo { SafeDbInfo { host: "Защищенный сервер (Home Autli)".to_string(), port: 0, user: "protected".to_string(), dbname: "protected".to_string(), ssl_mode: "tls".to_string(), users_table: "accounts".to_string(), email_column: "email".to_string(), } } // Storage commands #[tauri::command] async fn get_storage_stats() -> Result { storage::get_server_storage_stats().await } #[tauri::command] async fn list_storage_items(user_email: String, folder_id: Option) -> Result, String> { storage::list_server_items(&user_email, folder_id).await } #[tauri::command] async fn create_server_folder(user_email: String, folder_name: String, parent_id: Option) -> Result { storage::create_server_folder(&user_email, &folder_name, parent_id).await } #[tauri::command] async fn delete_server_item(user_email: String, item_id: String) -> Result { storage::delete_server_item(&user_email, &item_id).await } #[tauri::command] async fn rename_server_item(user_email: String, item_id: String, new_name: String) -> Result { storage::rename_server_item(&user_email, &item_id, &new_name).await } #[tauri::command] async fn create_server_file( user_email: String, file_name: String, content: Option, folder_id: Option, ) -> Result { storage::create_server_file(&user_email, &file_name, content, folder_id).await } #[tauri::command] async fn save_server_file_content( user_email: String, file_id: i64, content: String, ) -> Result { storage::save_server_file_content(&user_email, file_id, &content).await } #[tauri::command] async fn upload_server_file( user_email: String, file_name: String, size_bytes: i64, mime_type: Option, content_base64: Option, folder_id: Option, ) -> Result { storage::upload_server_file(&user_email, &file_name, size_bytes, mime_type, content_base64, folder_id).await } #[tauri::command] async fn download_server_file(user_email: String, file_id: i64) -> Result { storage::download_server_file(&user_email, file_id).await } #[tauri::command] async fn list_server_users() -> Result, String> { storage::list_server_users().await } #[tauri::command] async fn update_user_heartbeat(user_email: String) -> Result { storage::update_user_heartbeat(&user_email).await } // Admin security & user management commands #[tauri::command] async fn get_admin_security_info(admin_email: String) -> Result { admin::get_admin_security_info(&admin_email).await } #[tauri::command] async fn update_admin_security_policy( admin_email: String, device_binding: bool, trusted_device: Option, ip_binding: bool, trusted_ip: Option, ) -> Result { admin::update_admin_security_policy(&admin_email, device_binding, trusted_device, ip_binding, trusted_ip).await } #[tauri::command] async fn admin_update_user( admin_email: String, target_id: i32, new_username: Option, new_email: Option, new_role: Option, new_password: Option, admin_pin: Option, ) -> Result { admin::admin_update_user(&admin_email, target_id, new_username, new_email, new_role, new_password, admin_pin).await } #[tauri::command] async fn admin_delete_user( admin_email: String, target_id: i32, admin_pin: Option, ) -> Result { admin::admin_delete_user(&admin_email, target_id, admin_pin).await } #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { let _ = rustls::crypto::ring::default_provider().install_default(); auth::load_env(); #[allow(unused_mut)] let mut builder = tauri::Builder::default() .plugin(tauri_plugin_opener::init()) .plugin(tauri_plugin_process::init()); #[cfg(desktop)] { builder = builder.plugin(tauri_plugin_updater::Builder::new().build()); } builder .invoke_handler(tauri::generate_handler![ check_db, login, register, request_reset_code, verify_reset_code, reset_password, get_db_info, get_storage_stats, list_storage_items, create_server_folder, create_server_file, save_server_file_content, delete_server_item, rename_server_item, upload_server_file, download_server_file, list_server_users, update_user_heartbeat, get_admin_security_info, update_admin_security_policy, admin_update_user, admin_delete_user, profile::get_user_profile, profile::save_user_profile, cinema::get_cinema_config, cinema::get_cinema_state, cinema::save_cinema_state, cinema::update_cinema_progress, cinema::toggle_cinema_bookmark, cinema::tmdb_query, cinema::get_russian_media_info, cinema::filter_playable_media ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); }