From 2b5060e75f71f40353383f44edecb3cbdc285dec Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 20 Jun 2025 12:51:14 +0200 Subject: [PATCH] feat(tauri): Major refactoring with enhanced features and managers - Add comprehensive manager system for various features: - Notification manager for in-app notifications - Permission manager for system permissions - Update manager for app updates - Backend manager for server backend management - Debug features manager for debugging tools - API testing manager for API test suites - Auth cache manager for credential caching - Terminal integrations manager for terminal emulator support - Session monitor for tracking active sessions - Port conflict resolver for port management - Network utilities for network information - TTY forward manager for TTY forwarding - Cast manager for terminal recording - App mover for macOS app location management - Terminal spawn service for launching terminals - File system API for file operations - Add settings UI pages (settings.html, server-console.html) - Update tauri.conf.json with new configuration - Enhance server implementation with better state management - Add comprehensive command system for all managers - Update dependencies in Cargo.toml - Add welcome screen manager for onboarding - Implement proper state management across all components --- tauri/package-lock.json | 233 +++ tauri/public/server-console.html | 634 ++++++ tauri/public/settings.html | 1286 ++++++++++++ tauri/src-tauri/Cargo.toml | 15 +- tauri/src-tauri/public/icon.png | Bin 0 -> 977212 bytes tauri/src-tauri/public/server-console.html | 634 ++++++ tauri/src-tauri/public/settings.html | 1286 ++++++++++++ tauri/src-tauri/public/welcome.html | 417 ++++ tauri/src-tauri/src/api_testing.rs | 648 ++++++ tauri/src-tauri/src/app_mover.rs | 172 ++ tauri/src-tauri/src/auth_cache.rs | 483 +++++ tauri/src-tauri/src/backend_manager.rs | 523 +++++ tauri/src-tauri/src/cast.rs | 364 ++++ tauri/src-tauri/src/commands.rs | 1733 ++++++++++++++++- tauri/src-tauri/src/debug_features.rs | 648 ++++++ tauri/src-tauri/src/fs_api.rs | 428 ++++ tauri/src-tauri/src/lib.rs | 14 + tauri/src-tauri/src/main.rs | 239 ++- tauri/src-tauri/src/network_utils.rs | 289 +++ tauri/src-tauri/src/notification_manager.rs | 383 ++++ tauri/src-tauri/src/permissions.rs | 529 +++++ tauri/src-tauri/src/port_conflict.rs | 470 +++++ tauri/src-tauri/src/server.rs | 43 +- tauri/src-tauri/src/session_monitor.rs | 267 +++ tauri/src-tauri/src/settings.rs | 263 +++ tauri/src-tauri/src/state.rs | 77 +- tauri/src-tauri/src/terminal.rs | 38 + tauri/src-tauri/src/terminal_integrations.rs | 678 +++++++ tauri/src-tauri/src/terminal_spawn_service.rs | 182 ++ tauri/src-tauri/src/tty_forward.rs | 377 ++++ tauri/src-tauri/src/updater.rs | 523 +++++ tauri/src-tauri/src/welcome.rs | 459 +++++ tauri/src-tauri/tauri.conf.json | 4 +- 33 files changed, 14296 insertions(+), 43 deletions(-) create mode 100644 tauri/package-lock.json create mode 100644 tauri/public/server-console.html create mode 100644 tauri/public/settings.html create mode 100644 tauri/src-tauri/public/icon.png create mode 100644 tauri/src-tauri/public/server-console.html create mode 100644 tauri/src-tauri/public/settings.html create mode 100644 tauri/src-tauri/public/welcome.html create mode 100644 tauri/src-tauri/src/api_testing.rs create mode 100644 tauri/src-tauri/src/app_mover.rs create mode 100644 tauri/src-tauri/src/auth_cache.rs create mode 100644 tauri/src-tauri/src/backend_manager.rs create mode 100644 tauri/src-tauri/src/cast.rs create mode 100644 tauri/src-tauri/src/debug_features.rs create mode 100644 tauri/src-tauri/src/fs_api.rs create mode 100644 tauri/src-tauri/src/network_utils.rs create mode 100644 tauri/src-tauri/src/notification_manager.rs create mode 100644 tauri/src-tauri/src/permissions.rs create mode 100644 tauri/src-tauri/src/port_conflict.rs create mode 100644 tauri/src-tauri/src/session_monitor.rs create mode 100644 tauri/src-tauri/src/terminal_integrations.rs create mode 100644 tauri/src-tauri/src/terminal_spawn_service.rs create mode 100644 tauri/src-tauri/src/tty_forward.rs create mode 100644 tauri/src-tauri/src/updater.rs create mode 100644 tauri/src-tauri/src/welcome.rs diff --git a/tauri/package-lock.json b/tauri/package-lock.json new file mode 100644 index 00000000..30888778 --- /dev/null +++ b/tauri/package-lock.json @@ -0,0 +1,233 @@ +{ + "name": "vibetunnel-tauri", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vibetunnel-tauri", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@tauri-apps/cli": "^2.0.0-rc.18" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.5.0.tgz", + "integrity": "sha512-rAtHqG0Gh/IWLjN2zTf3nZqYqbo81oMbqop56rGTjrlWk9pTTAjkqOjSL9XQLIMZ3RbeVjveCqqCA0s8RnLdMg==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.5.0", + "@tauri-apps/cli-darwin-x64": "2.5.0", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.5.0", + "@tauri-apps/cli-linux-arm64-gnu": "2.5.0", + "@tauri-apps/cli-linux-arm64-musl": "2.5.0", + "@tauri-apps/cli-linux-riscv64-gnu": "2.5.0", + "@tauri-apps/cli-linux-x64-gnu": "2.5.0", + "@tauri-apps/cli-linux-x64-musl": "2.5.0", + "@tauri-apps/cli-win32-arm64-msvc": "2.5.0", + "@tauri-apps/cli-win32-ia32-msvc": "2.5.0", + "@tauri-apps/cli-win32-x64-msvc": "2.5.0" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-VuVAeTFq86dfpoBDNYAdtQVLbP0+2EKCHIIhkaxjeoPARR0sLpFHz2zs0PcFU76e+KAaxtEtAJAXGNUc8E1PzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.5.0.tgz", + "integrity": "sha512-hUF01sC06cZVa8+I0/VtsHOk9BbO75rd+YdtHJ48xTdcYaQ5QIwL4yZz9OR1AKBTaUYhBam8UX9Pvd5V2/4Dpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.5.0.tgz", + "integrity": "sha512-LQKqttsK252LlqYyX8R02MinUsfFcy3+NZiJwHFgi5Y3+ZUIAED9cSxJkyNtuY5KMnR4RlpgWyLv4P6akN1xhg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.5.0.tgz", + "integrity": "sha512-mTQufsPcpdHg5RW0zypazMo4L55EfeE5snTzrPqbLX4yCK2qalN7+rnP8O8GT06xhp6ElSP/Ku1M2MR297SByQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-rQO1HhRUQqyEaal5dUVOQruTRda/TD36s9kv1hTxZiFuSq3558lsTjAcUEnMAtBcBkps20sbyTJNMT0AwYIk8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.5.0.tgz", + "integrity": "sha512-7oS18FN46yDxyw1zX/AxhLAd7T3GrLj3Ai6s8hZKd9qFVzrAn36ESL7d3G05s8wEtsJf26qjXnVF4qleS3dYsA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.5.0.tgz", + "integrity": "sha512-SG5sFNL7VMmDBdIg3nO3EzNRT306HsiEQ0N90ILe3ZABYAVoPDO/ttpCO37ApLInTzrq/DLN+gOlC/mgZvLw1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-QXDM8zp/6v05PNWju5ELsVwF0VH1n6b5pk2E6W/jFbbiwz80Vs1lACl9pv5kEHkrxBj+aWU/03JzGuIj2g3SkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.5.0.tgz", + "integrity": "sha512-pFSHFK6b+o9y4Un8w0gGLwVyFTZaC3P0kQ7umRt/BLDkzD5RnQ4vBM7CF8BCU5nkwmEBUCZd7Wt3TWZxe41o6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.5.0.tgz", + "integrity": "sha512-EArv1IaRlogdLAQyGlKmEqZqm5RfHCUMhJoedWu7GtdbOMUfSAz6FMX2boE1PtEmNO4An+g188flLeVErrxEKg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.5.0.tgz", + "integrity": "sha512-lj43EFYbnAta8pd9JnUq87o+xRUR0odz+4rixBtTUwUgdRdwQ2V9CzFtsMu6FQKpFQ6mujRK6P1IEwhL6ADRsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/tauri/public/server-console.html b/tauri/public/server-console.html new file mode 100644 index 00000000..6ee0dd06 --- /dev/null +++ b/tauri/public/server-console.html @@ -0,0 +1,634 @@ + + + + + + Server Console - VibeTunnel + + + +
+
+
+ Server Console + Port 4020 +
+
+ + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+
+
+
+ Connecting to server... +
+ +
+
+ + + + + + \ No newline at end of file diff --git a/tauri/public/settings.html b/tauri/public/settings.html new file mode 100644 index 00000000..806c85dc --- /dev/null +++ b/tauri/public/settings.html @@ -0,0 +1,1286 @@ + + + + + + VibeTunnel Settings + + + +
+ +
+
+ + + + + General +
+
+ + + + Dashboard +
+
+ + + + Advanced +
+ +
+ + + + About +
+
+ + +
+ +
+
+

Startup

+
+ +

Automatically start VibeTunnel when you log in to your computer

+
+
+ +
+

Updates

+
+ + +

Choose which release channel to receive updates from

+
+
+ + +
+
+ +
+

System Permissions

+
+ VibeTunnel requires certain permissions to function properly. Grant these permissions to enable all features. +
+
+ +
+
+
+ + +
+
+

Dashboard Security

+
+ +

Require a password to access the terminal dashboard

+
+ +
+ +
+

Server Configuration

+
+ + +

The port VibeTunnel's HTTP server will listen on

+
+
+ + +

Control who can access your terminal dashboard

+
+ +
+ +
+

Remote Access

+
+ +

Create a secure tunnel to access your terminals from anywhere

+
+ +
+
+ + +
+
+

Terminal Settings

+
+ + +

Choose your preferred terminal emulator

+
+
+ + +

Shell to use for new terminal sessions

+
+
+ +
+

CLI Tool

+
+ The vt command lets you quickly create terminal sessions from your existing terminal. +
+
+
+ + +
+ +
+
+ +
+

Session Management

+
+ +

Remove all terminal sessions when VibeTunnel starts

+
+
+ + +

Automatically close idle sessions (0 = disabled)

+
+
+ +
+

Display

+
+ +

Display the VibeTunnel icon in the macOS Dock

+
+
+ +

Show debug options and additional logging

+
+
+
+ + +
+
+

Server Status

+
+
Server: Running
+
Port: 4020
+
Mode: Rust
+
Sessions: 0
+
+
+ + +
+
+ +
+

API Testing

+
+ + +
+
+ +
+ +
+ +
+

Server Console

+
+ + +
+
+
Server started on port 4020
+
Health check: OK
+ +
+
+ +
+

Developer Tools

+
+ + +
+
+ +

Help improve VibeTunnel by sending anonymous usage data

+
+
+
+ + +
+
+ VibeTunnel +

VibeTunnel

+

Version 1.0.0

+ +
+ + + +
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/tauri/src-tauri/Cargo.toml b/tauri/src-tauri/Cargo.toml index 5955fee2..6308cd85 100644 --- a/tauri/src-tauri/Cargo.toml +++ b/tauri/src-tauri/Cargo.toml @@ -82,13 +82,20 @@ reqwest = { version = "0.12", features = ["json"] } base64 = "0.22" sha2 = "0.10" +# Debug features +num_cpus = "1" + +# Network utilities +[target.'cfg(unix)'.dependencies] +nix = { version = "0.27", features = ["net"] } + +[target.'cfg(windows)'.dependencies] +ipconfig = "0.3" +windows = { version = "0.58", features = ["Win32_Foundation", "Win32_Security", "Win32_System_Threading", "Win32_UI_WindowsAndMessaging"] } + [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] tauri-plugin-single-instance = "2.0.1" -# Platform-specific dependencies -[target.'cfg(windows)'.dependencies] -windows = { version = "0.58", features = ["Win32_Foundation", "Win32_Security", "Win32_System_Threading", "Win32_UI_WindowsAndMessaging"] } - [profile.release] panic = "abort" codegen-units = 1 diff --git a/tauri/src-tauri/public/icon.png b/tauri/src-tauri/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5ee25179fcd8e05c84e0d8ae7fb6c401c513a5 GIT binary patch literal 977212 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

LX#+Rq@?}z>|)nU*`F_-EuOl4(C

  • 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 wwiG6KyuE2@Do94f>kMEtd!FTpS} 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%0A|ZCE}N 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

    9@TV_Y89RiMFuriiAjXlaM%Vl1Zv9XpI#Xk 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 +

    +
    + + + + + General +
    +
    + + + + Dashboard +
    +
    + + + + Advanced +
    + +
    + + + + About +
    +
    + + +
    + +
    +
    +

    Startup

    +
    + +

    Automatically start VibeTunnel when you log in to your computer

    +
    +
    + +
    +

    Updates

    +
    + + +

    Choose which release channel to receive updates from

    +
    +
    + + +
    +
    + +
    +

    System Permissions

    +
    + VibeTunnel requires certain permissions to function properly. Grant these permissions to enable all features. +
    +
    + +
    +
    +
    + + +
    + + +
    +
    +

    Terminal Settings

    +
    + + +

    Choose your preferred terminal emulator

    +
    +
    + + +

    Shell to use for new terminal sessions

    +
    +
    + +
    +

    CLI Tool

    +
    + The vt command lets you quickly create terminal sessions from your existing terminal. +
    +
    +
    + + +
    + +
    +
    + +
    +

    Session Management

    +
    + +

    Remove all terminal sessions when VibeTunnel starts

    +
    +
    + + +

    Automatically close idle sessions (0 = disabled)

    +
    +
    + +
    +

    Display

    +
    + +

    Display the VibeTunnel icon in the macOS Dock

    +
    +
    + +

    Show debug options and additional logging

    +
    +
    +
    + + +
    +
    +

    Server Status

    +
    +
    Server: Running
    +
    Port: 4020
    +
    Mode: Rust
    +
    Sessions: 0
    +
    +
    + + +
    +
    + +
    +

    API Testing

    +
    + + +
    +
    + +
    + +
    + +
    +

    Server Console

    +
    + + +
    +
    +
    Server started on port 4020
    +
    Health check: OK
    + +
    +
    + +
    +

    Developer Tools

    +
    + + +
    +
    + +

    Help improve VibeTunnel by sending anonymous usage data

    +
    +
    +
    + + +
    +
    + VibeTunnel +

    VibeTunnel

    +

    Version 1.0.0

    + +
    + + + +
    + + +
    +
    +
    + + + + + \ No newline at end of file diff --git a/tauri/src-tauri/public/welcome.html b/tauri/src-tauri/public/welcome.html new file mode 100644 index 00000000..9a3ec713 --- /dev/null +++ b/tauri/src-tauri/public/welcome.html @@ -0,0 +1,417 @@ + + + + + + Welcome to VibeTunnel + + + +
    +
    + +
    + VibeTunnel +
    +

    Welcome to VibeTunnel

    +

    Turn any browser into your terminal. Command your agents on the go.

    +

    + You'll be quickly guided through the basics of VibeTunnel.
    + This screen can always be opened from the settings. +

    +
    +
    + + +
    + VibeTunnel +
    +

    What VibeTunnel Does

    +

    A secure terminal server that runs on your machine

    +
    +
    + + + + Access your terminal from any web browser +
    +
    + + + + Create multiple isolated terminal sessions +
    +
    + + + + Secure with password protection +
    +
    + + + + Works with ngrok or Tailscale for remote access +
    +
    +
    +
    + + +
    + VibeTunnel +
    +

    Accessing Your Dashboard

    +

    + To access your terminals from any device, create a tunnel from your device.

    + This can be done via ngrok in settings or Tailscale (recommended). +

    +
    + + +
    +
    +
    + + +
    + VibeTunnel +
    +

    You're All Set!

    +

    VibeTunnel is now running in your system tray

    +

    + Click the VibeTunnel icon in your system tray to access settings,
    + open the dashboard, or manage your terminal sessions. +

    +
    +
    +
    + + +
    + + + + \ No newline at end of file diff --git a/tauri/src-tauri/src/api_testing.rs b/tauri/src-tauri/src/api_testing.rs new file mode 100644 index 00000000..d221e997 --- /dev/null +++ b/tauri/src-tauri/src/api_testing.rs @@ -0,0 +1,648 @@ +use serde::{Serialize, Deserialize}; +use std::sync::Arc; +use tokio::sync::RwLock; +use std::collections::HashMap; +use chrono::{DateTime, Utc}; +use reqwest::Client; +use std::time::Duration; + +/// API test method +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] +pub enum HttpMethod { + GET, + POST, + PUT, + PATCH, + DELETE, + HEAD, + OPTIONS, +} + +impl HttpMethod { + pub fn as_str(&self) -> &str { + match self { + HttpMethod::GET => "GET", + HttpMethod::POST => "POST", + HttpMethod::PUT => "PUT", + HttpMethod::PATCH => "PATCH", + HttpMethod::DELETE => "DELETE", + HttpMethod::HEAD => "HEAD", + HttpMethod::OPTIONS => "OPTIONS", + } + } +} + +/// API test assertion type +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +pub enum AssertionType { + StatusCode(u16), + StatusRange { min: u16, max: u16 }, + ResponseTime { max_ms: u64 }, + HeaderExists(String), + HeaderEquals { key: String, value: String }, + JsonPath { path: String, expected: serde_json::Value }, + BodyContains(String), + BodyMatches(String), // Regex + ContentType(String), +} + +/// API test case +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITest { + pub id: String, + pub name: String, + pub description: Option, + pub group: Option, + pub endpoint_url: String, + pub method: HttpMethod, + pub headers: HashMap, + pub query_params: HashMap, + pub body: Option, + pub auth: Option, + pub assertions: Vec, + pub timeout_ms: u64, + pub retry_count: u32, + pub delay_ms: Option, + pub save_response: bool, +} + +/// API test body +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum APITestBody { + Json(serde_json::Value), + Form(HashMap), + Text(String), + Binary(Vec), +} + +/// API test authentication +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum APITestAuth { + Basic { username: String, password: String }, + Bearer(String), + ApiKey { key: String, value: String, in_header: bool }, + Custom(HashMap), +} + +/// API test result +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITestResult { + pub test_id: String, + pub test_name: String, + pub success: bool, + pub timestamp: DateTime, + pub duration_ms: u64, + pub status_code: Option, + pub response_headers: HashMap, + pub response_body: Option, + pub assertion_results: Vec, + pub error: Option, + pub retries_used: u32, +} + +/// Assertion result +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AssertionResult { + pub assertion: AssertionType, + pub passed: bool, + pub actual_value: Option, + pub error_message: Option, +} + +/// API test suite +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITestSuite { + pub id: String, + pub name: String, + pub description: Option, + pub base_url: Option, + pub default_headers: HashMap, + pub default_auth: Option, + pub tests: Vec, + pub setup_tests: Vec, + pub teardown_tests: Vec, + pub variables: HashMap, +} + +/// API test collection +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITestCollection { + pub id: String, + pub name: String, + pub suites: Vec, + pub global_variables: HashMap, +} + +/// API test runner configuration +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITestRunnerConfig { + pub parallel_execution: bool, + pub max_parallel_tests: usize, + pub stop_on_failure: bool, + pub capture_responses: bool, + pub follow_redirects: bool, + pub verify_ssl: bool, + pub proxy: Option, + pub environment_variables: HashMap, +} + +impl Default for APITestRunnerConfig { + fn default() -> Self { + Self { + parallel_execution: false, + max_parallel_tests: 5, + stop_on_failure: false, + capture_responses: true, + follow_redirects: true, + verify_ssl: true, + proxy: None, + environment_variables: HashMap::new(), + } + } +} + +/// API test history entry +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITestHistoryEntry { + pub run_id: String, + pub timestamp: DateTime, + pub suite_name: String, + pub total_tests: usize, + pub passed_tests: usize, + pub failed_tests: usize, + pub total_duration_ms: u64, + pub results: Vec, +} + +/// API testing manager +pub struct APITestingManager { + client: Arc, + config: Arc>, + test_suites: Arc>>, + test_history: Arc>>, + running_tests: Arc>>, + shared_variables: Arc>>, + notification_manager: Option>, +} + +impl APITestingManager { + /// Create a new API testing manager + pub fn new() -> Self { + let client = Client::builder() + .timeout(Duration::from_secs(30)) + .build() + .unwrap(); + + Self { + client: Arc::new(client), + config: Arc::new(RwLock::new(APITestRunnerConfig::default())), + test_suites: Arc::new(RwLock::new(HashMap::new())), + test_history: Arc::new(RwLock::new(Vec::new())), + running_tests: Arc::new(RwLock::new(HashMap::new())), + shared_variables: Arc::new(RwLock::new(HashMap::new())), + notification_manager: None, + } + } + + /// Set the notification manager + pub fn set_notification_manager(&mut self, notification_manager: Arc) { + self.notification_manager = Some(notification_manager); + } + + /// Get configuration + pub async fn get_config(&self) -> APITestRunnerConfig { + self.config.read().await.clone() + } + + /// Update configuration + pub async fn update_config(&self, config: APITestRunnerConfig) { + *self.config.write().await = config; + } + + /// Add test suite + pub async fn add_test_suite(&self, suite: APITestSuite) { + self.test_suites.write().await.insert(suite.id.clone(), suite); + } + + /// Get test suite + pub async fn get_test_suite(&self, suite_id: &str) -> Option { + self.test_suites.read().await.get(suite_id).cloned() + } + + /// List test suites + pub async fn list_test_suites(&self) -> Vec { + self.test_suites.read().await.values().cloned().collect() + } + + /// Run single test + pub async fn run_test(&self, test: &APITest, variables: &HashMap) -> APITestResult { + let start_time = std::time::Instant::now(); + let mut result = APITestResult { + test_id: test.id.clone(), + test_name: test.name.clone(), + success: false, + timestamp: Utc::now(), + duration_ms: 0, + status_code: None, + response_headers: HashMap::new(), + response_body: None, + assertion_results: Vec::new(), + error: None, + retries_used: 0, + }; + + // Replace variables in URL + let url = self.replace_variables(&test.endpoint_url, variables); + + // Run test with retries + let mut last_error = None; + for retry in 0..=test.retry_count { + if retry > 0 { + // Delay between retries + if let Some(delay) = test.delay_ms { + tokio::time::sleep(Duration::from_millis(delay)).await; + } + } + + match self.execute_request(&test, &url, variables).await { + Ok((status, headers, body)) => { + result.status_code = Some(status); + result.response_headers = headers; + if test.save_response { + result.response_body = Some(body.clone()); + } + result.retries_used = retry; + + // Run assertions + result.assertion_results = self.run_assertions(&test.assertions, status, &result.response_headers, &body).await; + result.success = result.assertion_results.iter().all(|a| a.passed); + + break; + } + Err(e) => { + last_error = Some(e); + } + } + } + + if let Some(error) = last_error { + result.error = Some(error); + } + + result.duration_ms = start_time.elapsed().as_millis() as u64; + result + } + + /// Run test suite + pub async fn run_test_suite(&self, suite_id: &str) -> Option { + let suite = self.get_test_suite(suite_id).await?; + let run_id = uuid::Uuid::new_v4().to_string(); + let start_time = std::time::Instant::now(); + + // Merge variables + let mut variables = self.shared_variables.read().await.clone(); + variables.extend(suite.variables.clone()); + + let mut results = Vec::new(); + + // Run setup tests + for test in &suite.setup_tests { + let result = self.run_test(test, &variables).await; + if !result.success && self.config.read().await.stop_on_failure { + break; + } + results.push(result); + } + + // Run main tests + let config = self.config.read().await; + if config.parallel_execution { + // Run tests in parallel + let mut tasks = Vec::new(); + for test in &suite.tests { + let test = test.clone(); + let vars = variables.clone(); + let manager = self.clone_for_parallel(); + + tasks.push(tokio::spawn(async move { + manager.run_test(&test, &vars).await + })); + } + + for task in tasks { + if let Ok(result) = task.await { + results.push(result); + } + } + } else { + // Run tests sequentially + for test in &suite.tests { + let result = self.run_test(test, &variables).await; + if !result.success && config.stop_on_failure { + break; + } + results.push(result); + } + } + + // Run teardown tests + for test in &suite.teardown_tests { + let result = self.run_test(test, &variables).await; + results.push(result); + } + + let total_duration = start_time.elapsed().as_millis() as u64; + let passed = results.iter().filter(|r| r.success).count(); + let failed = results.len() - passed; + + let history_entry = APITestHistoryEntry { + run_id, + timestamp: Utc::now(), + suite_name: suite.name, + total_tests: results.len(), + passed_tests: passed, + failed_tests: failed, + total_duration_ms: total_duration, + results, + }; + + // Store in history + self.test_history.write().await.push(history_entry.clone()); + + // Send notification + if let Some(notification_manager) = &self.notification_manager { + let message = format!( + "Test suite completed: {} passed, {} failed", + passed, failed + ); + let _ = notification_manager.notify_success("API Tests", &message).await; + } + + Some(history_entry) + } + + /// Get test history + pub async fn get_test_history(&self, limit: Option) -> Vec { + let history = self.test_history.read().await; + match limit { + Some(n) => history.iter().rev().take(n).cloned().collect(), + None => history.clone(), + } + } + + /// Clear test history + pub async fn clear_test_history(&self) { + self.test_history.write().await.clear(); + } + + /// Import Postman collection + pub async fn import_postman_collection(&self, _json_data: &str) -> Result { + // TODO: Implement Postman collection import + Err("Postman import not yet implemented".to_string()) + } + + /// Export test suite + pub async fn export_test_suite(&self, suite_id: &str) -> Result { + let suite = self.get_test_suite(suite_id).await + .ok_or_else(|| "Test suite not found".to_string())?; + + serde_json::to_string_pretty(&suite) + .map_err(|e| format!("Failed to serialize test suite: {}", e)) + } + + // Helper methods + async fn execute_request( + &self, + test: &APITest, + url: &str, + variables: &HashMap, + ) -> Result<(u16, HashMap, String), String> { + let config = self.config.read().await; + let client = Client::builder() + .timeout(Duration::from_millis(test.timeout_ms)) + .redirect(if config.follow_redirects { + reqwest::redirect::Policy::default() + } else { + reqwest::redirect::Policy::none() + }) + .danger_accept_invalid_certs(!config.verify_ssl) + .build() + .map_err(|e| e.to_string())?; + + let mut request = match test.method { + HttpMethod::GET => client.get(url), + HttpMethod::POST => client.post(url), + HttpMethod::PUT => client.put(url), + HttpMethod::PATCH => client.patch(url), + HttpMethod::DELETE => client.delete(url), + HttpMethod::HEAD => client.head(url), + HttpMethod::OPTIONS => client.request(reqwest::Method::OPTIONS, url), + }; + + // Add headers + for (key, value) in &test.headers { + let value = self.replace_variables(value, variables); + request = request.header(key, value); + } + + // Add query params + for (key, value) in &test.query_params { + let value = self.replace_variables(value, variables); + request = request.query(&[(key, value)]); + } + + // Add auth + if let Some(auth) = &test.auth { + request = self.apply_auth(request, auth, variables); + } + + // Add body + if let Some(body) = &test.body { + request = match body { + APITestBody::Json(json) => request.json(json), + APITestBody::Form(form) => request.form(form), + APITestBody::Text(text) => request.body(text.clone()), + APITestBody::Binary(bytes) => request.body(bytes.clone()), + }; + } + + // Execute request + let response = request.send().await.map_err(|e| e.to_string())?; + let status = response.status().as_u16(); + + let mut headers = HashMap::new(); + for (key, value) in response.headers() { + if let Ok(value_str) = value.to_str() { + headers.insert(key.to_string(), value_str.to_string()); + } + } + + let body = response.text().await.unwrap_or_default(); + + Ok((status, headers, body)) + } + + async fn run_assertions( + &self, + assertions: &[AssertionType], + status: u16, + headers: &HashMap, + body: &str, + ) -> Vec { + let mut results = Vec::new(); + + for assertion in assertions { + let result = match assertion { + AssertionType::StatusCode(expected) => { + AssertionResult { + assertion: assertion.clone(), + passed: status == *expected, + actual_value: Some(status.to_string()), + error_message: if status != *expected { + Some(format!("Expected status {}, got {}", expected, status)) + } else { + None + }, + } + } + AssertionType::StatusRange { min, max } => { + AssertionResult { + assertion: assertion.clone(), + passed: status >= *min && status <= *max, + actual_value: Some(status.to_string()), + error_message: if status < *min || status > *max { + Some(format!("Expected status between {} and {}, got {}", min, max, status)) + } else { + None + }, + } + } + AssertionType::HeaderExists(key) => { + AssertionResult { + assertion: assertion.clone(), + passed: headers.contains_key(key), + actual_value: None, + error_message: if !headers.contains_key(key) { + Some(format!("Header '{}' not found", key)) + } else { + None + }, + } + } + AssertionType::HeaderEquals { key, value } => { + let actual = headers.get(key); + AssertionResult { + assertion: assertion.clone(), + passed: actual == Some(value), + actual_value: actual.cloned(), + error_message: if actual != Some(value) { + Some(format!("Header '{}' expected '{}', got '{:?}'", key, value, actual)) + } else { + None + }, + } + } + AssertionType::BodyContains(text) => { + AssertionResult { + assertion: assertion.clone(), + passed: body.contains(text), + actual_value: None, + error_message: if !body.contains(text) { + Some(format!("Body does not contain '{}'", text)) + } else { + None + }, + } + } + AssertionType::JsonPath { path: _, expected: _ } => { + // TODO: Implement JSON path assertion + AssertionResult { + assertion: assertion.clone(), + passed: false, + actual_value: None, + error_message: Some("JSON path assertions not yet implemented".to_string()), + } + } + _ => { + AssertionResult { + assertion: assertion.clone(), + passed: false, + actual_value: None, + error_message: Some("Assertion type not implemented".to_string()), + } + } + }; + results.push(result); + } + + results + } + + fn replace_variables(&self, text: &str, variables: &HashMap) -> String { + let mut result = text.to_string(); + for (key, value) in variables { + result = result.replace(&format!("{{{{{}}}}}", key), value); + } + result + } + + fn apply_auth( + &self, + request: reqwest::RequestBuilder, + auth: &APITestAuth, + variables: &HashMap, + ) -> reqwest::RequestBuilder { + match auth { + APITestAuth::Basic { username, password } => { + let username = self.replace_variables(username, variables); + let password = self.replace_variables(password, variables); + request.basic_auth(username, Some(password)) + } + APITestAuth::Bearer(token) => { + let token = self.replace_variables(token, variables); + request.bearer_auth(token) + } + APITestAuth::ApiKey { key, value, in_header } => { + let key = self.replace_variables(key, variables); + let value = self.replace_variables(value, variables); + if *in_header { + request.header(key, value) + } else { + request.query(&[(key, value)]) + } + } + APITestAuth::Custom(headers) => { + let mut req = request; + for (key, value) in headers { + let value = self.replace_variables(value, variables); + req = req.header(key, value); + } + req + } + } + } + + fn clone_for_parallel(&self) -> Self { + Self { + client: self.client.clone(), + config: self.config.clone(), + test_suites: self.test_suites.clone(), + test_history: self.test_history.clone(), + running_tests: self.running_tests.clone(), + shared_variables: self.shared_variables.clone(), + notification_manager: self.notification_manager.clone(), + } + } +} + +/// API test statistics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITestStatistics { + pub total_suites: usize, + pub total_tests: usize, + pub total_runs: usize, + pub success_rate: f64, + pub average_duration_ms: f64, + pub most_failed_tests: Vec<(String, usize)>, + pub slowest_tests: Vec<(String, u64)>, +} \ No newline at end of file diff --git a/tauri/src-tauri/src/app_mover.rs b/tauri/src-tauri/src/app_mover.rs new file mode 100644 index 00000000..3444ef1f --- /dev/null +++ b/tauri/src-tauri/src/app_mover.rs @@ -0,0 +1,172 @@ +use tauri::{AppHandle, Manager}; +use std::path::PathBuf; + +/// Check if the app should be moved to Applications folder +/// This is a macOS-specific feature +#[cfg(target_os = "macos")] +pub async fn check_and_prompt_move(app_handle: AppHandle) -> Result<(), String> { + use std::process::Command; + + // Get current app bundle path + let bundle_path = get_app_bundle_path()?; + + // Check if already in Applications folder + if is_in_applications_folder(&bundle_path) { + return Ok(()); + } + + // Check if we've already asked this question + let settings = crate::settings::Settings::load().unwrap_or_default(); + if let Some(asked) = settings.general.show_welcome_on_startup { + if !asked { + // User has already been asked, don't ask again + return Ok(()); + } + } + + // Show dialog asking if user wants to move to Applications + let response = tauri::api::dialog::blocking::ask( + Some(&app_handle.get_webview_window("main").unwrap()), + "Move to Applications Folder?", + "VibeTunnel works best when run from the Applications folder. Would you like to move it there?" + ); + + if response { + move_to_applications_folder(bundle_path)?; + + // Restart the app from the new location + restart_from_applications()?; + } + + // Update settings to not ask again + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + settings.general.show_welcome_on_startup = Some(false); + settings.save().ok(); + + Ok(()) +} + +#[cfg(not(target_os = "macos"))] +pub async fn check_and_prompt_move(_app_handle: AppHandle) -> Result<(), String> { + // Not applicable on other platforms + Ok(()) +} + +#[cfg(target_os = "macos")] +fn get_app_bundle_path() -> Result { + use std::env; + + // Get the executable path + let exe_path = env::current_exe() + .map_err(|e| format!("Failed to get executable path: {}", e))?; + + // Navigate up to the .app bundle + // Typical structure: /path/to/VibeTunnel.app/Contents/MacOS/VibeTunnel + let mut bundle_path = exe_path; + + // Go up three levels to reach the .app bundle + for _ in 0..3 { + bundle_path = bundle_path.parent() + .ok_or("Failed to find app bundle")? + .to_path_buf(); + } + + // Verify this is an .app bundle + if !bundle_path.to_string_lossy().ends_with(".app") { + return Err("Not running from an app bundle".to_string()); + } + + Ok(bundle_path) +} + +#[cfg(target_os = "macos")] +fn is_in_applications_folder(bundle_path: &PathBuf) -> bool { + let path_str = bundle_path.to_string_lossy(); + path_str.contains("/Applications/") || path_str.contains("/System/Applications/") +} + +#[cfg(target_os = "macos")] +fn move_to_applications_folder(bundle_path: PathBuf) -> Result<(), String> { + use std::process::Command; + use std::fs; + + let app_name = bundle_path.file_name() + .ok_or("Failed to get app name")? + .to_string_lossy(); + + let dest_path = PathBuf::from("/Applications").join(&app_name); + + // Check if destination already exists + if dest_path.exists() { + // Ask user if they want to replace + let response = tauri::api::dialog::blocking::ask( + None, + "Replace Existing App?", + "VibeTunnel already exists in the Applications folder. Do you want to replace it?" + ); + + if !response { + return Err("User cancelled move operation".to_string()); + } + + // Remove existing app + fs::remove_dir_all(&dest_path) + .map_err(|e| format!("Failed to remove existing app: {}", e))?; + } + + // Use AppleScript to move the app with proper permissions + let script = format!( + r#"tell application "Finder" + move (POSIX file "{}") to (POSIX file "/Applications/") with replacing + end tell"#, + bundle_path.to_string_lossy() + ); + + let output = Command::new("osascript") + .arg("-e") + .arg(script) + .output() + .map_err(|e| format!("Failed to execute move command: {}", e))?; + + if !output.status.success() { + let error = String::from_utf8_lossy(&output.stderr); + return Err(format!("Failed to move app: {}", error)); + } + + Ok(()) +} + +#[cfg(target_os = "macos")] +fn restart_from_applications() -> Result<(), String> { + use std::process::Command; + + // Launch the app from the Applications folder + let output = Command::new("open") + .arg("-n") + .arg("/Applications/VibeTunnel.app") + .spawn() + .map_err(|e| format!("Failed to restart app: {}", e))?; + + // Exit the current instance + std::process::exit(0); +} + +#[tauri::command] +pub async fn prompt_move_to_applications(app_handle: AppHandle) -> Result<(), String> { + check_and_prompt_move(app_handle).await +} + +#[tauri::command] +pub async fn is_in_applications_folder() -> Result { + #[cfg(target_os = "macos")] + { + let bundle_path = get_app_bundle_path()?; + Ok(is_in_applications_folder(&bundle_path)) + } + + #[cfg(not(target_os = "macos"))] + { + // Always return true on non-macOS platforms + Ok(true) + } +} \ No newline at end of file diff --git a/tauri/src-tauri/src/auth_cache.rs b/tauri/src-tauri/src/auth_cache.rs new file mode 100644 index 00000000..8f25be25 --- /dev/null +++ b/tauri/src-tauri/src/auth_cache.rs @@ -0,0 +1,483 @@ +use serde::{Serialize, Deserialize}; +use std::sync::Arc; +use tokio::sync::RwLock; +use std::collections::HashMap; +use chrono::{DateTime, Utc, Duration}; +use sha2::{Sha256, Digest}; + +/// Authentication token type +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub enum TokenType { + Bearer, + Basic, + ApiKey, + OAuth2, + JWT, + Custom, +} + +/// Authentication scope +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub struct AuthScope { + pub service: String, + pub resource: Option, + pub permissions: Vec, +} + +/// Cached authentication token +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct CachedToken { + pub token_type: TokenType, + pub token_value: String, + pub scope: AuthScope, + pub created_at: DateTime, + pub expires_at: Option>, + pub refresh_token: Option, + pub metadata: HashMap, +} + +impl CachedToken { + /// Check if token is expired + pub fn is_expired(&self) -> bool { + if let Some(expires_at) = self.expires_at { + Utc::now() >= expires_at + } else { + false + } + } + + /// Check if token needs refresh (expires within threshold) + pub fn needs_refresh(&self, threshold_seconds: i64) -> bool { + if let Some(expires_at) = self.expires_at { + let refresh_time = expires_at - Duration::seconds(threshold_seconds); + Utc::now() >= refresh_time + } else { + false + } + } + + /// Get remaining lifetime in seconds + pub fn remaining_lifetime_seconds(&self) -> Option { + self.expires_at.map(|expires_at| { + let duration = expires_at - Utc::now(); + duration.num_seconds().max(0) + }) + } +} + +/// Authentication credential +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AuthCredential { + pub credential_type: String, + pub username: Option, + pub password_hash: Option, // Store hashed password + pub api_key: Option, + pub client_id: Option, + pub client_secret: Option, + pub metadata: HashMap, +} + +/// Authentication cache entry +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AuthCacheEntry { + pub key: String, + pub tokens: Vec, + pub credential: Option, + pub last_accessed: DateTime, + pub access_count: u64, +} + +/// Authentication cache configuration +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AuthCacheConfig { + pub enabled: bool, + pub max_entries: usize, + pub default_ttl_seconds: u64, + pub refresh_threshold_seconds: i64, + pub persist_to_disk: bool, + pub encryption_enabled: bool, + pub cleanup_interval_seconds: u64, +} + +impl Default for AuthCacheConfig { + fn default() -> Self { + Self { + enabled: true, + max_entries: 1000, + default_ttl_seconds: 3600, // 1 hour + refresh_threshold_seconds: 300, // 5 minutes + persist_to_disk: false, + encryption_enabled: true, + cleanup_interval_seconds: 600, // 10 minutes + } + } +} + +/// Authentication cache statistics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AuthCacheStats { + pub total_entries: usize, + pub total_tokens: usize, + pub expired_tokens: usize, + pub cache_hits: u64, + pub cache_misses: u64, + pub refresh_count: u64, + pub eviction_count: u64, +} + +/// Token refresh callback +pub type TokenRefreshCallback = Arc futures::future::BoxFuture<'static, Result> + Send + Sync>; + +/// Authentication cache manager +pub struct AuthCacheManager { + config: Arc>, + cache: Arc>>, + stats: Arc>, + refresh_callbacks: Arc>>, + cleanup_handle: Arc>>>, + notification_manager: Option>, +} + +impl AuthCacheManager { + /// Create a new authentication cache manager + pub fn new() -> Self { + let manager = Self { + config: Arc::new(RwLock::new(AuthCacheConfig::default())), + cache: Arc::new(RwLock::new(HashMap::new())), + stats: Arc::new(RwLock::new(AuthCacheStats { + total_entries: 0, + total_tokens: 0, + expired_tokens: 0, + cache_hits: 0, + cache_misses: 0, + refresh_count: 0, + eviction_count: 0, + })), + refresh_callbacks: Arc::new(RwLock::new(HashMap::new())), + cleanup_handle: Arc::new(RwLock::new(None)), + notification_manager: None, + }; + + // Start cleanup task + let cleanup_manager = manager.clone_for_cleanup(); + tokio::spawn(async move { + cleanup_manager.start_cleanup_task().await; + }); + + manager + } + + /// Set the notification manager + pub fn set_notification_manager(&mut self, notification_manager: Arc) { + self.notification_manager = Some(notification_manager); + } + + /// Get configuration + pub async fn get_config(&self) -> AuthCacheConfig { + self.config.read().await.clone() + } + + /// Update configuration + pub async fn update_config(&self, config: AuthCacheConfig) { + *self.config.write().await = config; + } + + /// Store token in cache + pub async fn store_token(&self, key: &str, token: CachedToken) -> Result<(), String> { + let config = self.config.read().await; + if !config.enabled { + return Ok(()); + } + + let mut cache = self.cache.write().await; + let mut stats = self.stats.write().await; + + // Get or create cache entry + let entry = cache.entry(key.to_string()).or_insert_with(|| { + stats.total_entries += 1; + AuthCacheEntry { + key: key.to_string(), + tokens: Vec::new(), + credential: None, + last_accessed: Utc::now(), + access_count: 0, + } + }); + + // Remove expired tokens + let expired_count = entry.tokens.iter().filter(|t| t.is_expired()).count(); + stats.expired_tokens += expired_count; + entry.tokens.retain(|t| !t.is_expired()); + + // Add new token + entry.tokens.push(token); + stats.total_tokens += 1; + entry.last_accessed = Utc::now(); + + // Check cache size limit + if cache.len() > config.max_entries { + self.evict_oldest_entry(&mut cache, &mut stats); + } + + Ok(()) + } + + /// Get token from cache + pub async fn get_token(&self, key: &str, scope: &AuthScope) -> Option { + let config = self.config.read().await; + if !config.enabled { + return None; + } + + let mut cache = self.cache.write().await; + let mut stats = self.stats.write().await; + + if let Some(entry) = cache.get_mut(key) { + entry.last_accessed = Utc::now(); + entry.access_count += 1; + + // Find matching token + for token in &entry.tokens { + if !token.is_expired() && self.token_matches_scope(token, scope) { + stats.cache_hits += 1; + + // Check if needs refresh + if token.needs_refresh(config.refresh_threshold_seconds) { + // Trigger refresh in background + if let Some(refresh_callback) = self.refresh_callbacks.read().await.get(key) { + let token_clone = token.clone(); + let callback = refresh_callback.clone(); + let key_clone = key.to_string(); + let manager = self.clone_for_refresh(); + + tokio::spawn(async move { + if let Ok(refreshed_token) = callback(token_clone).await { + let _ = manager.store_token(&key_clone, refreshed_token).await; + manager.stats.write().await.refresh_count += 1; + } + }); + } + } + + return Some(token.clone()); + } + } + } + + stats.cache_misses += 1; + None + } + + /// Store credential in cache + pub async fn store_credential(&self, key: &str, credential: AuthCredential) -> Result<(), String> { + let config = self.config.read().await; + if !config.enabled { + return Ok(()); + } + + let mut cache = self.cache.write().await; + let mut stats = self.stats.write().await; + + let entry = cache.entry(key.to_string()).or_insert_with(|| { + stats.total_entries += 1; + AuthCacheEntry { + key: key.to_string(), + tokens: Vec::new(), + credential: None, + last_accessed: Utc::now(), + access_count: 0, + } + }); + + entry.credential = Some(credential); + entry.last_accessed = Utc::now(); + + Ok(()) + } + + /// Get credential from cache + pub async fn get_credential(&self, key: &str) -> Option { + let config = self.config.read().await; + if !config.enabled { + return None; + } + + let mut cache = self.cache.write().await; + + if let Some(entry) = cache.get_mut(key) { + entry.last_accessed = Utc::now(); + entry.access_count += 1; + return entry.credential.clone(); + } + + None + } + + /// Register token refresh callback + pub async fn register_refresh_callback(&self, key: &str, callback: TokenRefreshCallback) { + self.refresh_callbacks.write().await.insert(key.to_string(), callback); + } + + /// Clear specific cache entry + pub async fn clear_entry(&self, key: &str) { + let mut cache = self.cache.write().await; + if cache.remove(key).is_some() { + self.stats.write().await.total_entries = cache.len(); + } + } + + /// Clear all cache entries + pub async fn clear_all(&self) { + let mut cache = self.cache.write().await; + cache.clear(); + + let mut stats = self.stats.write().await; + stats.total_entries = 0; + stats.total_tokens = 0; + stats.expired_tokens = 0; + } + + /// Get cache statistics + pub async fn get_stats(&self) -> AuthCacheStats { + self.stats.read().await.clone() + } + + /// List all cache entries + pub async fn list_entries(&self) -> Vec<(String, DateTime, u64)> { + self.cache.read().await + .values() + .map(|entry| (entry.key.clone(), entry.last_accessed, entry.access_count)) + .collect() + } + + /// Export cache to JSON (for persistence) + pub async fn export_cache(&self) -> Result { + let cache = self.cache.read().await; + let entries: Vec<_> = cache.values().cloned().collect(); + + serde_json::to_string_pretty(&entries) + .map_err(|e| format!("Failed to serialize cache: {}", e)) + } + + /// Import cache from JSON + pub async fn import_cache(&self, json_data: &str) -> Result<(), String> { + let entries: Vec = serde_json::from_str(json_data) + .map_err(|e| format!("Failed to deserialize cache: {}", e))?; + + let mut cache = self.cache.write().await; + let mut stats = self.stats.write().await; + + for entry in entries { + cache.insert(entry.key.clone(), entry); + } + + stats.total_entries = cache.len(); + stats.total_tokens = cache.values() + .map(|e| e.tokens.len()) + .sum(); + + Ok(()) + } + + /// Hash password for secure storage + pub fn hash_password(password: &str) -> String { + let mut hasher = Sha256::new(); + hasher.update(password.as_bytes()); + format!("{:x}", hasher.finalize()) + } + + // Helper methods + fn token_matches_scope(&self, token: &CachedToken, scope: &AuthScope) -> bool { + token.scope.service == scope.service && + token.scope.resource == scope.resource && + scope.permissions.iter().all(|p| token.scope.permissions.contains(p)) + } + + fn evict_oldest_entry(&self, cache: &mut HashMap, stats: &mut AuthCacheStats) { + if let Some((key, _)) = cache.iter() + .min_by_key(|(_, entry)| entry.last_accessed) { + let key = key.clone(); + cache.remove(&key); + stats.eviction_count += 1; + stats.total_entries = cache.len(); + } + } + + async fn start_cleanup_task(&self) { + let config = self.config.read().await; + let cleanup_interval = Duration::seconds(config.cleanup_interval_seconds as i64); + drop(config); + + loop { + tokio::time::sleep(cleanup_interval.to_std().unwrap()).await; + + let config = self.config.read().await; + if !config.enabled { + continue; + } + drop(config); + + // Clean up expired tokens + let mut cache = self.cache.write().await; + let mut stats = self.stats.write().await; + let mut total_expired = 0; + + for entry in cache.values_mut() { + let expired_count = entry.tokens.iter().filter(|t| t.is_expired()).count(); + total_expired += expired_count; + entry.tokens.retain(|t| !t.is_expired()); + } + + stats.expired_tokens += total_expired; + stats.total_tokens = cache.values() + .map(|e| e.tokens.len()) + .sum(); + + // Remove empty entries + cache.retain(|_, entry| !entry.tokens.is_empty() || entry.credential.is_some()); + stats.total_entries = cache.len(); + } + } + + fn clone_for_cleanup(&self) -> Self { + Self { + config: self.config.clone(), + cache: self.cache.clone(), + stats: self.stats.clone(), + refresh_callbacks: self.refresh_callbacks.clone(), + cleanup_handle: self.cleanup_handle.clone(), + notification_manager: self.notification_manager.clone(), + } + } + + fn clone_for_refresh(&self) -> Self { + Self { + config: self.config.clone(), + cache: self.cache.clone(), + stats: self.stats.clone(), + refresh_callbacks: self.refresh_callbacks.clone(), + cleanup_handle: self.cleanup_handle.clone(), + notification_manager: self.notification_manager.clone(), + } + } +} + +/// Create a cache key from components +pub fn create_cache_key(service: &str, username: Option<&str>, resource: Option<&str>) -> String { + let mut components = vec![service]; + if let Some(user) = username { + components.push(user); + } + if let Some(res) = resource { + components.push(res); + } + components.join(":") +} + +/// Authentication cache error +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AuthCacheError { + pub code: String, + pub message: String, + pub details: Option>, +} \ No newline at end of file diff --git a/tauri/src-tauri/src/backend_manager.rs b/tauri/src-tauri/src/backend_manager.rs new file mode 100644 index 00000000..d7ad669a --- /dev/null +++ b/tauri/src-tauri/src/backend_manager.rs @@ -0,0 +1,523 @@ +use serde::{Serialize, Deserialize}; +use std::sync::Arc; +use tokio::sync::RwLock; +use std::collections::HashMap; +use std::path::PathBuf; +use chrono::{DateTime, Utc}; +use tokio::process::Command; + +/// Backend type enumeration +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub enum BackendType { + Rust, + NodeJS, + Python, + Go, + Custom, +} + +impl BackendType { + pub fn as_str(&self) -> &str { + match self { + BackendType::Rust => "rust", + BackendType::NodeJS => "nodejs", + BackendType::Python => "python", + BackendType::Go => "go", + BackendType::Custom => "custom", + } + } + + pub fn from_str(s: &str) -> Self { + match s.to_lowercase().as_str() { + "rust" => BackendType::Rust, + "nodejs" | "node" => BackendType::NodeJS, + "python" => BackendType::Python, + "go" => BackendType::Go, + _ => BackendType::Custom, + } + } +} + +/// Backend status +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] +pub enum BackendStatus { + NotInstalled, + Installing, + Installed, + Starting, + Running, + Stopping, + Stopped, + Error, +} + +/// Backend configuration +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BackendConfig { + pub backend_type: BackendType, + pub name: String, + pub version: String, + pub executable_path: Option, + pub working_directory: Option, + pub environment_variables: HashMap, + pub arguments: Vec, + pub port: Option, + pub features: BackendFeatures, + pub requirements: BackendRequirements, +} + +/// Backend features +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BackendFeatures { + pub terminal_sessions: bool, + pub file_browser: bool, + pub port_forwarding: bool, + pub authentication: bool, + pub websocket_support: bool, + pub rest_api: bool, + pub graphql_api: bool, + pub metrics: bool, +} + +/// Backend requirements +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BackendRequirements { + pub runtime: Option, + pub runtime_version: Option, + pub dependencies: Vec, + pub system_packages: Vec, + pub min_memory_mb: Option, + pub min_disk_space_mb: Option, +} + +/// Backend instance information +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BackendInstance { + pub id: String, + pub backend_type: BackendType, + pub status: BackendStatus, + pub pid: Option, + pub port: u16, + pub started_at: Option>, + pub last_health_check: Option>, + pub health_status: HealthStatus, + pub metrics: BackendMetrics, +} + +/// Health status +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub enum HealthStatus { + Healthy, + Degraded, + Unhealthy, + Unknown, +} + +/// Backend metrics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BackendMetrics { + pub cpu_usage_percent: Option, + pub memory_usage_mb: Option, + pub request_count: u64, + pub error_count: u64, + pub average_response_time_ms: Option, + pub active_connections: u32, +} + +/// Backend manager +pub struct BackendManager { + configs: Arc>>, + instances: Arc>>, + active_backend: Arc>>, + notification_manager: Option>, +} + +impl BackendManager { + /// Create a new backend manager + pub fn new() -> Self { + let manager = Self { + configs: Arc::new(RwLock::new(HashMap::new())), + instances: Arc::new(RwLock::new(HashMap::new())), + active_backend: Arc::new(RwLock::new(Some(BackendType::Rust))), + notification_manager: None, + }; + + // Initialize default backend configurations + tokio::spawn({ + let configs = manager.configs.clone(); + async move { + let default_configs = Self::initialize_default_configs(); + *configs.write().await = default_configs; + } + }); + + manager + } + + /// Set the notification manager + pub fn set_notification_manager(&mut self, notification_manager: Arc) { + self.notification_manager = Some(notification_manager); + } + + /// Initialize default backend configurations + fn initialize_default_configs() -> HashMap { + let mut configs = HashMap::new(); + + // Rust backend (built-in) + configs.insert(BackendType::Rust, BackendConfig { + backend_type: BackendType::Rust, + name: "Rust (Built-in)".to_string(), + version: env!("CARGO_PKG_VERSION").to_string(), + executable_path: None, + working_directory: None, + environment_variables: HashMap::new(), + arguments: vec![], + port: Some(4020), + features: BackendFeatures { + terminal_sessions: true, + file_browser: true, + port_forwarding: true, + authentication: true, + websocket_support: true, + rest_api: true, + graphql_api: false, + metrics: true, + }, + requirements: BackendRequirements { + runtime: None, + runtime_version: None, + dependencies: vec![], + system_packages: vec![], + min_memory_mb: Some(64), + min_disk_space_mb: Some(10), + }, + }); + + // Node.js backend + configs.insert(BackendType::NodeJS, BackendConfig { + backend_type: BackendType::NodeJS, + name: "Node.js Server".to_string(), + version: "1.0.0".to_string(), + executable_path: Some(PathBuf::from("node")), + working_directory: None, + environment_variables: HashMap::new(), + arguments: vec!["server.js".to_string()], + port: Some(4021), + features: BackendFeatures { + terminal_sessions: true, + file_browser: true, + port_forwarding: false, + authentication: true, + websocket_support: true, + rest_api: true, + graphql_api: true, + metrics: false, + }, + requirements: BackendRequirements { + runtime: Some("node".to_string()), + runtime_version: Some(">=16.0.0".to_string()), + dependencies: vec![ + "express".to_string(), + "socket.io".to_string(), + "node-pty".to_string(), + ], + system_packages: vec![], + min_memory_mb: Some(128), + min_disk_space_mb: Some(50), + }, + }); + + // Python backend + configs.insert(BackendType::Python, BackendConfig { + backend_type: BackendType::Python, + name: "Python Server".to_string(), + version: "1.0.0".to_string(), + executable_path: Some(PathBuf::from("python3")), + working_directory: None, + environment_variables: HashMap::new(), + arguments: vec!["-m".to_string(), "vibetunnel_server".to_string()], + port: Some(4022), + features: BackendFeatures { + terminal_sessions: true, + file_browser: true, + port_forwarding: false, + authentication: true, + websocket_support: true, + rest_api: true, + graphql_api: false, + metrics: true, + }, + requirements: BackendRequirements { + runtime: Some("python3".to_string()), + runtime_version: Some(">=3.8".to_string()), + dependencies: vec![ + "fastapi".to_string(), + "uvicorn".to_string(), + "websockets".to_string(), + "ptyprocess".to_string(), + ], + system_packages: vec![], + min_memory_mb: Some(96), + min_disk_space_mb: Some(30), + }, + }); + + configs + } + + /// Get available backends + pub async fn get_available_backends(&self) -> Vec { + self.configs.read().await.values().cloned().collect() + } + + /// Get backend configuration + pub async fn get_backend_config(&self, backend_type: BackendType) -> Option { + self.configs.read().await.get(&backend_type).cloned() + } + + /// Check if backend is installed + pub async fn is_backend_installed(&self, backend_type: BackendType) -> bool { + match backend_type { + BackendType::Rust => true, // Built-in + BackendType::NodeJS => self.check_nodejs_installed().await, + BackendType::Python => self.check_python_installed().await, + BackendType::Go => self.check_go_installed().await, + BackendType::Custom => false, + } + } + + /// Install backend + pub async fn install_backend(&self, backend_type: BackendType) -> Result<(), String> { + match backend_type { + BackendType::Rust => Ok(()), // Already installed + BackendType::NodeJS => self.install_nodejs_backend().await, + BackendType::Python => self.install_python_backend().await, + BackendType::Go => Err("Go backend not yet implemented".to_string()), + BackendType::Custom => Err("Custom backend installation not supported".to_string()), + } + } + + /// Start backend + pub async fn start_backend(&self, backend_type: BackendType) -> Result { + // Check if backend is installed + if !self.is_backend_installed(backend_type).await { + return Err(format!("{:?} backend is not installed", backend_type)); + } + + // Get backend configuration + let config = self.get_backend_config(backend_type).await + .ok_or_else(|| "Backend configuration not found".to_string())?; + + // Generate instance ID + let instance_id = uuid::Uuid::new_v4().to_string(); + + // Create backend instance + let instance = BackendInstance { + id: instance_id.clone(), + backend_type, + status: BackendStatus::Starting, + pid: None, + port: config.port.unwrap_or(4020), + started_at: None, + last_health_check: None, + health_status: HealthStatus::Unknown, + metrics: BackendMetrics { + cpu_usage_percent: None, + memory_usage_mb: None, + request_count: 0, + error_count: 0, + average_response_time_ms: None, + active_connections: 0, + }, + }; + + // Store instance + self.instances.write().await.insert(instance_id.clone(), instance); + + // Start backend process + match backend_type { + BackendType::Rust => { + // Rust backend is handled internally + self.update_instance_status(&instance_id, BackendStatus::Running).await; + *self.active_backend.write().await = Some(BackendType::Rust); + Ok(instance_id) + } + _ => { + // Start external backend process + self.start_external_backend(&instance_id, config).await + } + } + } + + /// Stop backend + pub async fn stop_backend(&self, instance_id: &str) -> Result<(), String> { + let instance = self.instances.read().await + .get(instance_id) + .cloned() + .ok_or_else(|| "Backend instance not found".to_string())?; + + match instance.backend_type { + BackendType::Rust => { + // Rust backend is handled internally + self.update_instance_status(instance_id, BackendStatus::Stopped).await; + Ok(()) + } + _ => { + // Stop external backend process + self.stop_external_backend(instance_id).await + } + } + } + + /// Switch active backend + pub async fn switch_backend(&self, backend_type: BackendType) -> Result<(), String> { + // Stop current backend if different + let current_backend = *self.active_backend.read().await; + if let Some(current) = current_backend { + if current != backend_type { + // Find and stop current backend instances + let instance_id = { + let instances = self.instances.read().await; + instances.iter() + .find(|(_, instance)| instance.backend_type == current && instance.status == BackendStatus::Running) + .map(|(id, _)| id.clone()) + }; + if let Some(id) = instance_id { + self.stop_backend(&id).await?; + } + } + } + + // Start new backend + self.start_backend(backend_type).await?; + + // Update active backend + *self.active_backend.write().await = Some(backend_type); + + // Notify about backend switch + if let Some(notification_manager) = &self.notification_manager { + let _ = notification_manager.notify_success( + "Backend Switched", + &format!("Switched to {:?} backend", backend_type) + ).await; + } + + Ok(()) + } + + /// Get active backend + pub async fn get_active_backend(&self) -> Option { + *self.active_backend.read().await + } + + /// Get backend instances + pub async fn get_backend_instances(&self) -> Vec { + self.instances.read().await.values().cloned().collect() + } + + /// Get backend health + pub async fn check_backend_health(&self, instance_id: &str) -> Result { + let instance = self.instances.read().await + .get(instance_id) + .cloned() + .ok_or_else(|| "Backend instance not found".to_string())?; + + if instance.status != BackendStatus::Running { + return Ok(HealthStatus::Unknown); + } + + // Perform health check based on backend type + let health_status = match instance.backend_type { + BackendType::Rust => HealthStatus::Healthy, // Always healthy for built-in + _ => self.check_external_backend_health(&instance).await?, + }; + + // Update instance health status + if let Some(instance) = self.instances.write().await.get_mut(instance_id) { + instance.health_status = health_status; + instance.last_health_check = Some(Utc::now()); + } + + Ok(health_status) + } + + // Helper methods + async fn check_nodejs_installed(&self) -> bool { + Command::new("node") + .arg("--version") + .output() + .await + .map(|output| output.status.success()) + .unwrap_or(false) + } + + async fn check_python_installed(&self) -> bool { + Command::new("python3") + .arg("--version") + .output() + .await + .map(|output| output.status.success()) + .unwrap_or(false) + } + + async fn check_go_installed(&self) -> bool { + Command::new("go") + .arg("version") + .output() + .await + .map(|output| output.status.success()) + .unwrap_or(false) + } + + async fn install_nodejs_backend(&self) -> Result<(), String> { + // TODO: Implement Node.js backend installation + // This would involve: + // 1. Creating package.json + // 2. Installing dependencies + // 3. Copying server files + Err("Node.js backend installation not yet implemented".to_string()) + } + + async fn install_python_backend(&self) -> Result<(), String> { + // TODO: Implement Python backend installation + // This would involve: + // 1. Creating virtual environment + // 2. Installing pip dependencies + // 3. Copying server files + Err("Python backend installation not yet implemented".to_string()) + } + + async fn start_external_backend(&self, _instance_id: &str, _config: BackendConfig) -> Result { + // TODO: Implement external backend startup + Err("External backend startup not yet implemented".to_string()) + } + + async fn stop_external_backend(&self, _instance_id: &str) -> Result<(), String> { + // TODO: Implement external backend shutdown + Err("External backend shutdown not yet implemented".to_string()) + } + + async fn check_external_backend_health(&self, _instance: &BackendInstance) -> Result { + // TODO: Implement health check for external backends + Ok(HealthStatus::Unknown) + } + + async fn update_instance_status(&self, instance_id: &str, status: BackendStatus) { + if let Some(instance) = self.instances.write().await.get_mut(instance_id) { + instance.status = status; + if status == BackendStatus::Running { + instance.started_at = Some(Utc::now()); + } + } + } +} + +/// Backend statistics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BackendStats { + pub total_backends: usize, + pub installed_backends: usize, + pub running_instances: usize, + pub active_backend: Option, + pub health_summary: HashMap, +} \ No newline at end of file diff --git a/tauri/src-tauri/src/cast.rs b/tauri/src-tauri/src/cast.rs new file mode 100644 index 00000000..c7a770f2 --- /dev/null +++ b/tauri/src-tauri/src/cast.rs @@ -0,0 +1,364 @@ +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::fs::File; +use std::io::{BufWriter, Write}; +use std::path::Path; +use std::sync::Arc; +use tokio::sync::Mutex; +use chrono::{DateTime, Utc}; + +/// Asciinema cast v2 format header +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct CastHeader { + pub version: u8, + pub width: u16, + pub height: u16, + #[serde(skip_serializing_if = "Option::is_none")] + pub timestamp: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub duration: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub idle_time_limit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub command: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub title: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub env: Option>, +} + +/// Event types for Asciinema cast format +#[derive(Debug, Clone, Copy)] +pub enum EventType { + Output, + Input, +} + +impl EventType { + fn as_str(&self) -> &'static str { + match self { + EventType::Output => "o", + EventType::Input => "i", + } + } +} + +/// A single event in the cast file +#[derive(Debug)] +pub struct CastEvent { + pub timestamp: f64, + pub event_type: EventType, + pub data: String, +} + +/// Handles recording terminal sessions in Asciinema cast format +pub struct CastRecorder { + header: CastHeader, + start_time: DateTime, + events: Arc>>, + file_writer: Option>>>, + is_recording: Arc>, +} + +impl CastRecorder { + /// Create a new cast recorder + pub fn new( + width: u16, + height: u16, + title: Option, + command: Option, + ) -> Self { + let now = Utc::now(); + let header = CastHeader { + version: 2, + width, + height, + timestamp: Some(now.timestamp()), + duration: None, + idle_time_limit: None, + command, + title, + env: None, + }; + + Self { + header, + start_time: now, + events: Arc::new(Mutex::new(Vec::new())), + file_writer: None, + is_recording: Arc::new(Mutex::new(false)), + } + } + + /// Start recording to a file + pub async fn start_recording(&mut self, path: impl AsRef) -> Result<(), String> { + let mut is_recording = self.is_recording.lock().await; + if *is_recording { + return Err("Already recording".to_string()); + } + + // Create file and write header + let file = File::create(path.as_ref()) + .map_err(|e| format!("Failed to create cast file: {}", e))?; + let mut writer = BufWriter::new(file); + + // Write header as first line + let header_json = serde_json::to_string(&self.header) + .map_err(|e| format!("Failed to serialize header: {}", e))?; + writeln!(writer, "{}", header_json) + .map_err(|e| format!("Failed to write header: {}", e))?; + + // Write any existing events + let events = self.events.lock().await; + for event in events.iter() { + self.write_event_to_file(&mut writer, event)?; + } + + writer.flush() + .map_err(|e| format!("Failed to flush writer: {}", e))?; + + self.file_writer = Some(Arc::new(Mutex::new(writer))); + *is_recording = true; + Ok(()) + } + + /// Stop recording + pub async fn stop_recording(&mut self) -> Result<(), String> { + let mut is_recording = self.is_recording.lock().await; + if !*is_recording { + return Ok(()); + } + + if let Some(writer_arc) = self.file_writer.take() { + let mut writer = writer_arc.lock().await; + writer.flush() + .map_err(|e| format!("Failed to flush final data: {}", e))?; + } + + *is_recording = false; + Ok(()) + } + + /// Add output data to the recording + pub async fn add_output(&self, data: &[u8]) -> Result<(), String> { + self.add_event(EventType::Output, data).await + } + + /// Add input data to the recording + pub async fn add_input(&self, data: &[u8]) -> Result<(), String> { + self.add_event(EventType::Input, data).await + } + + /// Add an event to the recording + async fn add_event(&self, event_type: EventType, data: &[u8]) -> Result<(), String> { + let timestamp = Utc::now() + .signed_duration_since(self.start_time) + .num_milliseconds() as f64 / 1000.0; + + // Convert data to string (handling potential UTF-8 errors) + let data_string = String::from_utf8_lossy(data).to_string(); + + let event = CastEvent { + timestamp, + event_type, + data: data_string, + }; + + // If we have a file writer, write immediately + if let Some(writer_arc) = &self.file_writer { + let mut writer = writer_arc.lock().await; + self.write_event_to_file(&mut writer, &event)?; + writer.flush() + .map_err(|e| format!("Failed to flush event: {}", e))?; + } + + // Also store in memory + let mut events = self.events.lock().await; + events.push(event); + + Ok(()) + } + + /// Write an event to the file + fn write_event_to_file( + &self, + writer: &mut BufWriter, + event: &CastEvent, + ) -> Result<(), String> { + // Format: [timestamp, event_type, data] + let event_array = serde_json::json!([ + event.timestamp, + event.event_type.as_str(), + event.data + ]); + + writeln!(writer, "{}", event_array) + .map_err(|e| format!("Failed to write event: {}", e))?; + + Ok(()) + } + + /// Save all recorded events to a file + pub async fn save_to_file(&self, path: impl AsRef) -> Result<(), String> { + let file = File::create(path.as_ref()) + .map_err(|e| format!("Failed to create cast file: {}", e))?; + let mut writer = BufWriter::new(file); + + // Calculate duration + let events = self.events.lock().await; + let duration = events.last().map(|e| e.timestamp); + + // Update header with duration + let mut header = self.header.clone(); + header.duration = duration; + + // Write header + let header_json = serde_json::to_string(&header) + .map_err(|e| format!("Failed to serialize header: {}", e))?; + writeln!(writer, "{}", header_json) + .map_err(|e| format!("Failed to write header: {}", e))?; + + // Write events + for event in events.iter() { + self.write_event_to_file(&mut writer, event)?; + } + + writer.flush() + .map_err(|e| format!("Failed to flush file: {}", e))?; + + Ok(()) + } + + /// Get the current recording duration + pub async fn get_duration(&self) -> f64 { + let events = self.events.lock().await; + events.last().map(|e| e.timestamp).unwrap_or(0.0) + } + + /// Check if currently recording + pub async fn is_recording(&self) -> bool { + *self.is_recording.lock().await + } + + /// Update terminal dimensions + pub async fn resize(&mut self, width: u16, height: u16) { + self.header.width = width; + self.header.height = height; + // Note: In a real implementation, you might want to add a resize event + } +} + +/// Manages cast recordings for multiple sessions +pub struct CastManager { + recorders: Arc>>>>, +} + +impl CastManager { + pub fn new() -> Self { + Self { + recorders: Arc::new(Mutex::new(HashMap::new())), + } + } + + /// Create a new recorder for a session + pub async fn create_recorder( + &self, + session_id: String, + width: u16, + height: u16, + title: Option, + command: Option, + ) -> Result<(), String> { + let mut recorders = self.recorders.lock().await; + if recorders.contains_key(&session_id) { + return Err("Recorder already exists for this session".to_string()); + } + + let recorder = CastRecorder::new(width, height, title, command); + recorders.insert(session_id, Arc::new(Mutex::new(recorder))); + Ok(()) + } + + /// Get a recorder for a session + pub async fn get_recorder(&self, session_id: &str) -> Option>> { + self.recorders.lock().await.get(session_id).cloned() + } + + /// Remove a recorder for a session + pub async fn remove_recorder(&self, session_id: &str) -> Result<(), String> { + let mut recorders = self.recorders.lock().await; + if let Some(recorder_arc) = recorders.remove(session_id) { + let mut recorder = recorder_arc.lock().await; + recorder.stop_recording().await?; + } + Ok(()) + } + + /// Start recording for a session + pub async fn start_recording( + &self, + session_id: &str, + path: impl AsRef, + ) -> Result<(), String> { + if let Some(recorder_arc) = self.get_recorder(session_id).await { + let mut recorder = recorder_arc.lock().await; + recorder.start_recording(path).await + } else { + Err("No recorder found for session".to_string()) + } + } + + /// Stop recording for a session + pub async fn stop_recording(&self, session_id: &str) -> Result<(), String> { + if let Some(recorder_arc) = self.get_recorder(session_id).await { + let mut recorder = recorder_arc.lock().await; + recorder.stop_recording().await + } else { + Err("No recorder found for session".to_string()) + } + } + + /// Add output to a session's recording + pub async fn add_output(&self, session_id: &str, data: &[u8]) -> Result<(), String> { + if let Some(recorder_arc) = self.get_recorder(session_id).await { + let recorder = recorder_arc.lock().await; + recorder.add_output(data).await + } else { + Ok(()) // Silently ignore if no recorder + } + } + + /// Add input to a session's recording + pub async fn add_input(&self, session_id: &str, data: &[u8]) -> Result<(), String> { + if let Some(recorder_arc) = self.get_recorder(session_id).await { + let recorder = recorder_arc.lock().await; + recorder.add_input(data).await + } else { + Ok(()) // Silently ignore if no recorder + } + } + + /// Save a session's recording to file + pub async fn save_recording( + &self, + session_id: &str, + path: impl AsRef, + ) -> Result<(), String> { + if let Some(recorder_arc) = self.get_recorder(session_id).await { + let recorder = recorder_arc.lock().await; + recorder.save_to_file(path).await + } else { + Err("No recorder found for session".to_string()) + } + } + + /// Check if a session is being recorded + pub async fn is_recording(&self, session_id: &str) -> bool { + if let Some(recorder_arc) = self.get_recorder(session_id).await { + let recorder = recorder_arc.lock().await; + recorder.is_recording().await + } else { + false + } + } +} \ No newline at end of file diff --git a/tauri/src-tauri/src/commands.rs b/tauri/src-tauri/src/commands.rs index 60a0b7ba..f16aeab7 100644 --- a/tauri/src-tauri/src/commands.rs +++ b/tauri/src-tauri/src/commands.rs @@ -125,9 +125,9 @@ pub async fn start_server( // Start HTTP server with auth if configured let mut http_server = if settings.dashboard.enable_password && !settings.dashboard.password.is_empty() { let auth_config = crate::auth::AuthConfig::new(true, Some(settings.dashboard.password)); - HttpServer::with_auth(state.terminal_manager.clone(), auth_config) + HttpServer::with_auth(state.terminal_manager.clone(), state.session_monitor.clone(), auth_config) } else { - HttpServer::new(state.terminal_manager.clone()) + HttpServer::new(state.terminal_manager.clone(), state.session_monitor.clone()) }; // Start server with appropriate access mode @@ -246,9 +246,10 @@ pub async fn restart_server( // Start a new server let terminal_manager = state.terminal_manager.clone(); + let session_monitor = state.session_monitor.clone(); let settings = crate::settings::Settings::load().unwrap_or_default(); - let mut new_server = HttpServer::new(terminal_manager); + let mut new_server = HttpServer::new(terminal_manager, session_monitor); new_server.start_with_mode(match settings.dashboard.access_mode.as_str() { "network" => "network", _ => "localhost" @@ -274,9 +275,11 @@ pub async fn show_server_console( "server-console", tauri::WebviewUrl::App("server-console.html".into()) ) - .title("Server Console") - .inner_size(800.0, 600.0) + .title("Server Console - VibeTunnel") + .inner_size(900.0, 600.0) .resizable(true) + .decorations(true) + .center() .build() .map_err(|e| e.to_string())?; } @@ -286,27 +289,10 @@ pub async fn show_server_console( #[tauri::command] pub async fn show_welcome_screen( - app_handle: tauri::AppHandle, + state: State<'_, AppState>, ) -> Result<(), String> { - // Check if welcome window already exists - if let Some(window) = app_handle.get_webview_window("welcome") { - window.show().map_err(|e| e.to_string())?; - window.set_focus().map_err(|e| e.to_string())?; - } else { - // Create new welcome window - tauri::WebviewWindowBuilder::new( - &app_handle, - "welcome", - tauri::WebviewUrl::App("welcome.html".into()) - ) - .title("Welcome to VibeTunnel") - .inner_size(700.0, 500.0) - .resizable(false) - .build() - .map_err(|e| e.to_string())?; - } - - Ok(()) + let welcome_manager = &state.welcome_manager; + welcome_manager.show_welcome_window().await } #[tauri::command] @@ -346,4 +332,1701 @@ pub async fn update_dock_icon_visibility(app_handle: tauri::AppHandle) -> Result } } Ok(()) +} + +// Terminal Recording Commands +#[derive(Debug, Serialize, Deserialize)] +pub struct StartRecordingOptions { + pub session_id: String, + pub title: Option, + pub output_path: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct RecordingStatus { + pub is_recording: bool, + pub duration: f64, +} + +#[tauri::command] +pub async fn start_terminal_recording( + options: StartRecordingOptions, + state: State<'_, AppState>, +) -> Result<(), String> { + let cast_manager = &state.cast_manager; + + // Get terminal info for metadata + let terminal_manager = &state.terminal_manager; + let sessions = terminal_manager.list_sessions().await; + let session = sessions.iter() + .find(|s| s.id == options.session_id) + .ok_or_else(|| "Session not found".to_string())?; + + // Create recorder if it doesn't exist + cast_manager.create_recorder( + options.session_id.clone(), + session.cols, + session.rows, + options.title.or(Some(session.name.clone())), + None, // command + ).await.ok(); // Ignore if already exists + + // Start recording + if let Some(path) = options.output_path { + cast_manager.start_recording(&options.session_id, path).await + } else { + // Use default path with timestamp + let timestamp = chrono::Utc::now().format("%Y%m%d_%H%M%S"); + let filename = format!("vibetunnel_recording_{}.cast", timestamp); + let path = std::env::temp_dir().join(filename); + cast_manager.start_recording(&options.session_id, path).await + } +} + +#[tauri::command] +pub async fn stop_terminal_recording( + session_id: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let cast_manager = &state.cast_manager; + cast_manager.stop_recording(&session_id).await +} + +#[tauri::command] +pub async fn save_terminal_recording( + session_id: String, + output_path: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let cast_manager = &state.cast_manager; + cast_manager.save_recording(&session_id, output_path).await +} + +#[tauri::command] +pub async fn get_recording_status( + session_id: String, + state: State<'_, AppState>, +) -> Result { + let cast_manager = &state.cast_manager; + let is_recording = cast_manager.is_recording(&session_id).await; + + let duration = if let Some(recorder) = cast_manager.get_recorder(&session_id).await { + let rec = recorder.lock().await; + rec.get_duration().await + } else { + 0.0 + }; + + Ok(RecordingStatus { + is_recording, + duration, + }) +} + +// TTY Forwarding Commands +#[derive(Debug, Serialize, Deserialize)] +pub struct StartTTYForwardOptions { + pub local_port: u16, + pub remote_host: Option, + pub remote_port: Option, + pub shell: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct TTYForwardInfo { + pub id: String, + pub local_port: u16, + pub remote_host: String, + pub remote_port: u16, + pub connected: bool, + pub client_count: usize, +} + +#[tauri::command] +pub async fn start_tty_forward( + options: StartTTYForwardOptions, + state: State<'_, AppState>, +) -> Result { + let tty_forward_manager = &state.tty_forward_manager; + + let remote_host = options.remote_host.unwrap_or_else(|| "localhost".to_string()); + let remote_port = options.remote_port.unwrap_or(22); + + tty_forward_manager.start_forward( + options.local_port, + remote_host, + remote_port, + options.shell, + ).await +} + +#[tauri::command] +pub async fn stop_tty_forward( + id: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let tty_forward_manager = &state.tty_forward_manager; + tty_forward_manager.stop_forward(&id).await +} + +#[tauri::command] +pub async fn list_tty_forwards( + state: State<'_, AppState>, +) -> Result, String> { + let tty_forward_manager = &state.tty_forward_manager; + let forwards = tty_forward_manager.list_forwards().await; + + Ok(forwards.into_iter().map(|f| TTYForwardInfo { + id: f.id, + local_port: f.local_port, + remote_host: f.remote_host, + remote_port: f.remote_port, + connected: f.connected, + client_count: f.client_count, + }).collect()) +} + +#[tauri::command] +pub async fn get_tty_forward( + id: String, + state: State<'_, AppState>, +) -> Result, String> { + let tty_forward_manager = &state.tty_forward_manager; + + Ok(tty_forward_manager.get_forward(&id).await.map(|f| TTYForwardInfo { + id: f.id, + local_port: f.local_port, + remote_host: f.remote_host, + remote_port: f.remote_port, + connected: f.connected, + client_count: f.client_count, + })) +} + +// Session Monitoring Commands +#[tauri::command] +pub async fn get_session_stats( + state: State<'_, AppState>, +) -> Result { + let session_monitor = &state.session_monitor; + Ok(session_monitor.get_stats().await) +} + +#[tauri::command] +pub async fn get_monitored_sessions( + state: State<'_, AppState>, +) -> Result, String> { + let session_monitor = &state.session_monitor; + Ok(session_monitor.get_sessions().await) +} + +#[tauri::command] +pub async fn start_session_monitoring( + state: State<'_, AppState>, +) -> Result<(), String> { + let session_monitor = &state.session_monitor; + session_monitor.start_monitoring().await; + Ok(()) +} + +// Port Conflict Resolution Commands +#[tauri::command] +pub async fn check_port_availability( + port: u16, +) -> Result { + Ok(crate::port_conflict::PortConflictResolver::is_port_available(port).await) +} + +#[tauri::command] +pub async fn detect_port_conflict( + port: u16, +) -> Result, String> { + Ok(crate::port_conflict::PortConflictResolver::detect_conflict(port).await) +} + +#[tauri::command] +pub async fn resolve_port_conflict( + conflict: crate::port_conflict::PortConflict, +) -> Result<(), String> { + crate::port_conflict::PortConflictResolver::resolve_conflict(&conflict).await +} + +#[tauri::command] +pub async fn force_kill_process( + conflict: crate::port_conflict::PortConflict, +) -> Result<(), String> { + crate::port_conflict::PortConflictResolver::force_kill_process(&conflict).await +} + +#[tauri::command] +pub async fn find_available_ports( + near_port: u16, + count: usize, +) -> Result, String> { + let mut available_ports = Vec::new(); + let start = near_port.saturating_sub(10).max(1024); + let end = near_port.saturating_add(100).min(65535); + + for port in start..=end { + if port != near_port && crate::port_conflict::PortConflictResolver::is_port_available(port).await { + available_ports.push(port); + if available_ports.len() >= count { + break; + } + } + } + + Ok(available_ports) +} + +// Network Utilities Commands +#[tauri::command] +pub async fn get_local_ip_address() -> Result, String> { + Ok(crate::network_utils::NetworkUtils::get_local_ip_address()) +} + +#[tauri::command] +pub async fn get_all_ip_addresses() -> Result, String> { + Ok(crate::network_utils::NetworkUtils::get_all_ip_addresses()) +} + +#[tauri::command] +pub async fn get_network_interfaces() -> Result, String> { + Ok(crate::network_utils::NetworkUtils::get_all_interfaces()) +} + +#[tauri::command] +pub async fn get_hostname() -> Result, String> { + Ok(crate::network_utils::NetworkUtils::get_hostname()) +} + +#[tauri::command] +pub async fn test_network_connectivity( + host: String, + port: u16, +) -> Result { + Ok(crate::network_utils::NetworkUtils::test_connectivity(&host, port).await) +} + +#[tauri::command] +pub async fn get_network_stats() -> Result { + Ok(crate::network_utils::NetworkUtils::get_network_stats()) +} + +// Notification Commands +#[derive(Debug, Serialize, Deserialize)] +pub struct ShowNotificationOptions { + pub notification_type: crate::notification_manager::NotificationType, + pub priority: crate::notification_manager::NotificationPriority, + pub title: String, + pub body: String, + pub actions: Vec, + #[serde(default)] + pub metadata: HashMap, +} + +#[tauri::command] +pub async fn show_notification( + options: ShowNotificationOptions, + state: State<'_, AppState>, +) -> Result { + let notification_manager = &state.notification_manager; + notification_manager.show_notification( + options.notification_type, + options.priority, + options.title, + options.body, + options.actions, + options.metadata, + ).await +} + +#[tauri::command] +pub async fn get_notifications( + state: State<'_, AppState>, +) -> Result, String> { + let notification_manager = &state.notification_manager; + Ok(notification_manager.get_notifications().await) +} + +#[tauri::command] +pub async fn get_notification_history( + limit: Option, + state: State<'_, AppState>, +) -> Result, String> { + let notification_manager = &state.notification_manager; + Ok(notification_manager.get_history(limit).await) +} + +#[tauri::command] +pub async fn mark_notification_as_read( + notification_id: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let notification_manager = &state.notification_manager; + notification_manager.mark_as_read(¬ification_id).await +} + +#[tauri::command] +pub async fn mark_all_notifications_as_read( + state: State<'_, AppState>, +) -> Result<(), String> { + let notification_manager = &state.notification_manager; + notification_manager.mark_all_as_read().await +} + +#[tauri::command] +pub async fn clear_notification( + notification_id: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let notification_manager = &state.notification_manager; + notification_manager.clear_notification(¬ification_id).await +} + +#[tauri::command] +pub async fn clear_all_notifications( + state: State<'_, AppState>, +) -> Result<(), String> { + let notification_manager = &state.notification_manager; + notification_manager.clear_all_notifications().await +} + +#[tauri::command] +pub async fn get_unread_notification_count( + state: State<'_, AppState>, +) -> Result { + let notification_manager = &state.notification_manager; + Ok(notification_manager.get_unread_count().await) +} + +#[tauri::command] +pub async fn update_notification_settings( + settings: crate::notification_manager::NotificationSettings, + state: State<'_, AppState>, +) -> Result<(), String> { + let notification_manager = &state.notification_manager; + notification_manager.update_settings(settings).await; + Ok(()) +} + +#[tauri::command] +pub async fn get_notification_settings( + state: State<'_, AppState>, +) -> Result { + let notification_manager = &state.notification_manager; + Ok(notification_manager.get_settings().await) +} + +// Welcome/Tutorial Commands +#[tauri::command] +pub async fn get_welcome_state( + state: State<'_, AppState>, +) -> Result { + let welcome_manager = &state.welcome_manager; + Ok(welcome_manager.get_state().await) +} + +#[tauri::command] +pub async fn should_show_welcome( + state: State<'_, AppState>, +) -> Result { + let welcome_manager = &state.welcome_manager; + Ok(welcome_manager.should_show_welcome().await) +} + +#[tauri::command] +pub async fn get_tutorials( + state: State<'_, AppState>, +) -> Result, String> { + let welcome_manager = &state.welcome_manager; + Ok(welcome_manager.get_tutorials().await) +} + +#[tauri::command] +pub async fn get_tutorial_category( + category_id: String, + state: State<'_, AppState>, +) -> Result, String> { + let welcome_manager = &state.welcome_manager; + Ok(welcome_manager.get_tutorial_category(&category_id).await) +} + +#[tauri::command] +pub async fn complete_tutorial_step( + step_id: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let welcome_manager = &state.welcome_manager; + welcome_manager.complete_step(&step_id).await +} + +#[tauri::command] +pub async fn skip_tutorial( + state: State<'_, AppState>, +) -> Result<(), String> { + let welcome_manager = &state.welcome_manager; + welcome_manager.skip_tutorial().await +} + +#[tauri::command] +pub async fn reset_tutorial( + state: State<'_, AppState>, +) -> Result<(), String> { + let welcome_manager = &state.welcome_manager; + welcome_manager.reset_tutorial().await +} + +#[tauri::command] +pub async fn get_tutorial_progress( + state: State<'_, AppState>, +) -> Result { + let welcome_manager = &state.welcome_manager; + Ok(welcome_manager.get_progress().await) +} + +#[tauri::command] +pub async fn show_welcome_window( + state: State<'_, AppState>, +) -> Result<(), String> { + let welcome_manager = &state.welcome_manager; + welcome_manager.show_welcome_window().await +} + +// Advanced Settings Commands +#[tauri::command] +pub async fn get_recording_settings() -> Result { + let settings = crate::settings::Settings::load().unwrap_or_default(); + Ok(settings.recording.unwrap_or(crate::settings::RecordingSettings { + enabled: true, + output_directory: None, + format: "asciinema".to_string(), + include_timing: true, + compress_output: false, + max_file_size_mb: Some(100), + auto_save: false, + filename_template: Some("vibetunnel_%Y%m%d_%H%M%S".to_string()), + })) +} + +#[tauri::command] +pub async fn save_recording_settings( + recording: crate::settings::RecordingSettings, +) -> Result<(), String> { + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + settings.recording = Some(recording); + settings.save() +} + +#[tauri::command] +pub async fn get_all_advanced_settings() -> Result, String> { + let settings = crate::settings::Settings::load().unwrap_or_default(); + let mut all_settings = HashMap::new(); + + // Convert all settings sections to JSON values + all_settings.insert("recording".to_string(), + serde_json::to_value(&settings.recording).unwrap_or(serde_json::Value::Null)); + all_settings.insert("tty_forward".to_string(), + serde_json::to_value(&settings.tty_forward).unwrap_or(serde_json::Value::Null)); + all_settings.insert("monitoring".to_string(), + serde_json::to_value(&settings.monitoring).unwrap_or(serde_json::Value::Null)); + all_settings.insert("network".to_string(), + serde_json::to_value(&settings.network).unwrap_or(serde_json::Value::Null)); + all_settings.insert("port".to_string(), + serde_json::to_value(&settings.port).unwrap_or(serde_json::Value::Null)); + all_settings.insert("notifications".to_string(), + serde_json::to_value(&settings.notifications).unwrap_or(serde_json::Value::Null)); + all_settings.insert("terminal_integrations".to_string(), + serde_json::to_value(&settings.terminal_integrations).unwrap_or(serde_json::Value::Null)); + all_settings.insert("updates".to_string(), + serde_json::to_value(&settings.updates).unwrap_or(serde_json::Value::Null)); + all_settings.insert("security".to_string(), + serde_json::to_value(&settings.security).unwrap_or(serde_json::Value::Null)); + all_settings.insert("debug".to_string(), + serde_json::to_value(&settings.debug).unwrap_or(serde_json::Value::Null)); + + Ok(all_settings) +} + +#[tauri::command] +pub async fn update_advanced_settings( + section: String, + value: serde_json::Value, +) -> Result<(), String> { + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + + match section.as_str() { + "recording" => { + settings.recording = serde_json::from_value(value) + .map_err(|e| format!("Invalid recording settings: {}", e))?; + } + "tty_forward" => { + settings.tty_forward = serde_json::from_value(value) + .map_err(|e| format!("Invalid TTY forward settings: {}", e))?; + } + "monitoring" => { + settings.monitoring = serde_json::from_value(value) + .map_err(|e| format!("Invalid monitoring settings: {}", e))?; + } + "network" => { + settings.network = serde_json::from_value(value) + .map_err(|e| format!("Invalid network settings: {}", e))?; + } + "port" => { + settings.port = serde_json::from_value(value) + .map_err(|e| format!("Invalid port settings: {}", e))?; + } + "notifications" => { + settings.notifications = serde_json::from_value(value) + .map_err(|e| format!("Invalid notification settings: {}", e))?; + } + "terminal_integrations" => { + settings.terminal_integrations = serde_json::from_value(value) + .map_err(|e| format!("Invalid terminal integration settings: {}", e))?; + } + "updates" => { + settings.updates = serde_json::from_value(value) + .map_err(|e| format!("Invalid update settings: {}", e))?; + } + "security" => { + settings.security = serde_json::from_value(value) + .map_err(|e| format!("Invalid security settings: {}", e))?; + } + "debug" => { + settings.debug = serde_json::from_value(value) + .map_err(|e| format!("Invalid debug settings: {}", e))?; + } + _ => return Err(format!("Unknown settings section: {}", section)), + } + + settings.save() +} + +#[tauri::command] +pub async fn reset_settings_section(section: String) -> Result<(), String> { + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + let defaults = crate::settings::Settings::default(); + + match section.as_str() { + "recording" => settings.recording = defaults.recording, + "tty_forward" => settings.tty_forward = defaults.tty_forward, + "monitoring" => settings.monitoring = defaults.monitoring, + "network" => settings.network = defaults.network, + "port" => settings.port = defaults.port, + "notifications" => settings.notifications = defaults.notifications, + "terminal_integrations" => settings.terminal_integrations = defaults.terminal_integrations, + "updates" => settings.updates = defaults.updates, + "security" => settings.security = defaults.security, + "debug" => settings.debug = defaults.debug, + "all" => settings = defaults, + _ => return Err(format!("Unknown settings section: {}", section)), + } + + settings.save() +} + +#[tauri::command] +pub async fn export_settings() -> Result { + let settings = crate::settings::Settings::load().unwrap_or_default(); + toml::to_string_pretty(&settings) + .map_err(|e| format!("Failed to export settings: {}", e)) +} + +#[tauri::command] +pub async fn import_settings(toml_content: String) -> Result<(), String> { + let settings: crate::settings::Settings = toml::from_str(&toml_content) + .map_err(|e| format!("Failed to parse settings: {}", e))?; + settings.save() +} + +// Permissions Commands +#[tauri::command] +pub async fn check_all_permissions( + state: State<'_, AppState>, +) -> Result, String> { + let permissions_manager = &state.permissions_manager; + Ok(permissions_manager.check_all_permissions().await) +} + +#[tauri::command] +pub async fn check_permission( + permission_type: crate::permissions::PermissionType, + state: State<'_, AppState>, +) -> Result { + let permissions_manager = &state.permissions_manager; + Ok(permissions_manager.check_permission(permission_type).await) +} + +#[tauri::command] +pub async fn request_permission( + permission_type: crate::permissions::PermissionType, + state: State<'_, AppState>, +) -> Result { + let permissions_manager = &state.permissions_manager; + permissions_manager.request_permission(permission_type).await +} + +#[tauri::command] +pub async fn get_permission_info( + permission_type: crate::permissions::PermissionType, + state: State<'_, AppState>, +) -> Result, String> { + let permissions_manager = &state.permissions_manager; + Ok(permissions_manager.get_permission_info(permission_type).await) +} + +#[tauri::command] +pub async fn get_all_permissions( + state: State<'_, AppState>, +) -> Result, String> { + let permissions_manager = &state.permissions_manager; + Ok(permissions_manager.get_all_permissions().await) +} + +#[tauri::command] +pub async fn get_required_permissions( + state: State<'_, AppState>, +) -> Result, String> { + let permissions_manager = &state.permissions_manager; + Ok(permissions_manager.get_required_permissions().await) +} + +#[tauri::command] +pub async fn get_missing_required_permissions( + state: State<'_, AppState>, +) -> Result, String> { + let permissions_manager = &state.permissions_manager; + Ok(permissions_manager.get_missing_required_permissions().await) +} + +#[tauri::command] +pub async fn all_required_permissions_granted( + state: State<'_, AppState>, +) -> Result { + let permissions_manager = &state.permissions_manager; + Ok(permissions_manager.all_required_permissions_granted().await) +} + +#[tauri::command] +pub async fn open_system_permission_settings( + permission_type: crate::permissions::PermissionType, + state: State<'_, AppState>, +) -> Result<(), String> { + let permissions_manager = &state.permissions_manager; + permissions_manager.open_system_settings(permission_type).await +} + +#[tauri::command] +pub async fn get_permission_stats( + state: State<'_, AppState>, +) -> Result { + let permissions_manager = &state.permissions_manager; + let all_permissions = permissions_manager.get_all_permissions().await; + + let stats = crate::permissions::PermissionStats { + total_permissions: all_permissions.len(), + granted_permissions: all_permissions.iter().filter(|p| p.status == crate::permissions::PermissionStatus::Granted).count(), + denied_permissions: all_permissions.iter().filter(|p| p.status == crate::permissions::PermissionStatus::Denied).count(), + required_permissions: all_permissions.iter().filter(|p| p.required).count(), + missing_required: all_permissions.iter().filter(|p| p.required && p.status != crate::permissions::PermissionStatus::Granted).count(), + platform: std::env::consts::OS.to_string(), + }; + + Ok(stats) +} + +// Update Manager Commands +#[tauri::command] +pub async fn check_for_updates( + state: State<'_, AppState>, +) -> Result, String> { + let update_manager = &state.update_manager; + update_manager.check_for_updates().await +} + +#[tauri::command] +pub async fn download_update( + state: State<'_, AppState>, +) -> Result<(), String> { + let update_manager = &state.update_manager; + update_manager.download_update().await +} + +#[tauri::command] +pub async fn install_update( + state: State<'_, AppState>, +) -> Result<(), String> { + let update_manager = &state.update_manager; + update_manager.install_update().await +} + +#[tauri::command] +pub async fn cancel_update( + state: State<'_, AppState>, +) -> Result<(), String> { + let update_manager = &state.update_manager; + update_manager.cancel_update().await +} + +#[tauri::command] +pub async fn get_update_state( + state: State<'_, AppState>, +) -> Result { + let update_manager = &state.update_manager; + Ok(update_manager.get_state().await) +} + +#[tauri::command] +pub async fn get_updater_settings( + state: State<'_, AppState>, +) -> Result { + let update_manager = &state.update_manager; + Ok(update_manager.get_settings().await) +} + +#[tauri::command] +pub async fn update_updater_settings( + settings: crate::updater::UpdaterSettings, + state: State<'_, AppState>, +) -> Result<(), String> { + let update_manager = &state.update_manager; + update_manager.update_settings(settings).await +} + +#[tauri::command] +pub async fn switch_update_channel( + channel: crate::updater::UpdateChannel, + state: State<'_, AppState>, +) -> Result<(), String> { + let update_manager = &state.update_manager; + update_manager.switch_channel(channel).await +} + +#[tauri::command] +pub async fn get_update_history( + limit: Option, + state: State<'_, AppState>, +) -> Result, String> { + let update_manager = &state.update_manager; + Ok(update_manager.get_update_history(limit).await) +} + +// Backend Manager Commands +#[tauri::command] +pub async fn get_available_backends( + state: State<'_, AppState>, +) -> Result, String> { + let backend_manager = &state.backend_manager; + Ok(backend_manager.get_available_backends().await) +} + +#[tauri::command] +pub async fn get_backend_config( + backend_type: crate::backend_manager::BackendType, + state: State<'_, AppState>, +) -> Result, String> { + let backend_manager = &state.backend_manager; + Ok(backend_manager.get_backend_config(backend_type).await) +} + +#[tauri::command] +pub async fn is_backend_installed( + backend_type: crate::backend_manager::BackendType, + state: State<'_, AppState>, +) -> Result { + let backend_manager = &state.backend_manager; + Ok(backend_manager.is_backend_installed(backend_type).await) +} + +#[tauri::command] +pub async fn install_backend( + backend_type: crate::backend_manager::BackendType, + state: State<'_, AppState>, +) -> Result<(), String> { + let backend_manager = &state.backend_manager; + backend_manager.install_backend(backend_type).await +} + +#[tauri::command] +pub async fn start_backend( + backend_type: crate::backend_manager::BackendType, + state: State<'_, AppState>, +) -> Result { + let backend_manager = &state.backend_manager; + backend_manager.start_backend(backend_type).await +} + +#[tauri::command] +pub async fn stop_backend( + instance_id: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let backend_manager = &state.backend_manager; + backend_manager.stop_backend(&instance_id).await +} + +#[tauri::command] +pub async fn switch_backend( + backend_type: crate::backend_manager::BackendType, + state: State<'_, AppState>, +) -> Result<(), String> { + let backend_manager = &state.backend_manager; + backend_manager.switch_backend(backend_type).await +} + +#[tauri::command] +pub async fn get_active_backend( + state: State<'_, AppState>, +) -> Result, String> { + let backend_manager = &state.backend_manager; + Ok(backend_manager.get_active_backend().await) +} + +#[tauri::command] +pub async fn get_backend_instances( + state: State<'_, AppState>, +) -> Result, String> { + let backend_manager = &state.backend_manager; + Ok(backend_manager.get_backend_instances().await) +} + +#[tauri::command] +pub async fn check_backend_health( + instance_id: String, + state: State<'_, AppState>, +) -> Result { + let backend_manager = &state.backend_manager; + backend_manager.check_backend_health(&instance_id).await +} + +#[tauri::command] +pub async fn get_backend_stats( + state: State<'_, AppState>, +) -> Result { + let backend_manager = &state.backend_manager; + + let backends = backend_manager.get_available_backends().await; + let instances = backend_manager.get_backend_instances().await; + let active_backend = backend_manager.get_active_backend().await; + + let mut health_summary = std::collections::HashMap::new(); + for instance in &instances { + *health_summary.entry(instance.health_status).or_insert(0) += 1; + } + + let mut installed_count = 0; + for backend in &backends { + if backend_manager.is_backend_installed(backend.backend_type).await { + installed_count += 1; + } + } + + Ok(crate::backend_manager::BackendStats { + total_backends: backends.len(), + installed_backends: installed_count, + running_instances: instances.iter().filter(|i| i.status == crate::backend_manager::BackendStatus::Running).count(), + active_backend, + health_summary, + }) +} + +// Debug Features Commands +#[derive(Debug, Serialize, Deserialize)] +pub struct LogDebugMessageOptions { + pub level: crate::debug_features::LogLevel, + pub component: String, + pub message: String, + pub metadata: HashMap, +} + +#[tauri::command] +pub async fn get_debug_settings( + state: State<'_, AppState>, +) -> Result { + let debug_features_manager = &state.debug_features_manager; + Ok(debug_features_manager.get_settings().await) +} + +#[tauri::command] +pub async fn update_debug_settings( + settings: crate::debug_features::DebugSettings, + state: State<'_, AppState>, +) -> Result<(), String> { + let debug_features_manager = &state.debug_features_manager; + debug_features_manager.update_settings(settings).await; + Ok(()) +} + +#[tauri::command] +pub async fn log_debug_message( + options: LogDebugMessageOptions, + state: State<'_, AppState>, +) -> Result<(), String> { + let debug_features_manager = &state.debug_features_manager; + debug_features_manager.log( + options.level, + &options.component, + &options.message, + options.metadata, + ).await; + Ok(()) +} + +#[tauri::command] +pub async fn record_performance_metric( + name: String, + value: f64, + unit: String, + tags: HashMap, + state: State<'_, AppState>, +) -> Result<(), String> { + let debug_features_manager = &state.debug_features_manager; + debug_features_manager.record_metric(&name, value, &unit, tags).await; + Ok(()) +} + +#[tauri::command] +pub async fn take_memory_snapshot( + state: State<'_, AppState>, +) -> Result { + let debug_features_manager = &state.debug_features_manager; + debug_features_manager.take_memory_snapshot().await +} + +#[tauri::command] +pub async fn get_debug_logs( + limit: Option, + level: Option, + state: State<'_, AppState>, +) -> Result, String> { + let debug_features_manager = &state.debug_features_manager; + Ok(debug_features_manager.get_logs(limit, level).await) +} + +#[tauri::command] +pub async fn get_performance_metrics( + limit: Option, + state: State<'_, AppState>, +) -> Result, String> { + let debug_features_manager = &state.debug_features_manager; + Ok(debug_features_manager.get_performance_metrics(limit).await) +} + +#[tauri::command] +pub async fn get_memory_snapshots( + limit: Option, + state: State<'_, AppState>, +) -> Result, String> { + let debug_features_manager = &state.debug_features_manager; + Ok(debug_features_manager.get_memory_snapshots(limit).await) +} + +#[tauri::command] +pub async fn get_network_requests( + limit: Option, + state: State<'_, AppState>, +) -> Result, String> { + let debug_features_manager = &state.debug_features_manager; + Ok(debug_features_manager.get_network_requests(limit).await) +} + +#[tauri::command] +pub async fn run_api_tests( + tests: Vec, + state: State<'_, AppState>, +) -> Result, String> { + let debug_features_manager = &state.debug_features_manager; + Ok(debug_features_manager.run_api_tests(tests).await) +} + +// API Testing Commands +#[tauri::command] +pub async fn get_api_test_config( + state: State<'_, AppState>, +) -> Result { + let api_testing_manager = &state.api_testing_manager; + Ok(api_testing_manager.get_config().await) +} + +#[tauri::command] +pub async fn update_api_test_config( + config: crate::api_testing::APITestRunnerConfig, + state: State<'_, AppState>, +) -> Result<(), String> { + let api_testing_manager = &state.api_testing_manager; + api_testing_manager.update_config(config).await; + Ok(()) +} + +#[tauri::command] +pub async fn add_api_test_suite( + suite: crate::api_testing::APITestSuite, + state: State<'_, AppState>, +) -> Result<(), String> { + let api_testing_manager = &state.api_testing_manager; + api_testing_manager.add_test_suite(suite).await; + Ok(()) +} + +#[tauri::command] +pub async fn get_api_test_suite( + suite_id: String, + state: State<'_, AppState>, +) -> Result, String> { + let api_testing_manager = &state.api_testing_manager; + Ok(api_testing_manager.get_test_suite(&suite_id).await) +} + +#[tauri::command] +pub async fn list_api_test_suites( + state: State<'_, AppState>, +) -> Result, String> { + let api_testing_manager = &state.api_testing_manager; + Ok(api_testing_manager.list_test_suites().await) +} + +#[tauri::command] +pub async fn run_single_api_test( + test: crate::api_testing::APITest, + variables: HashMap, + state: State<'_, AppState>, +) -> Result { + let api_testing_manager = &state.api_testing_manager; + Ok(api_testing_manager.run_test(&test, &variables).await) +} + +#[tauri::command] +pub async fn run_api_test_suite( + suite_id: String, + state: State<'_, AppState>, +) -> Result, String> { + let api_testing_manager = &state.api_testing_manager; + Ok(api_testing_manager.run_test_suite(&suite_id).await) +} + +#[tauri::command] +pub async fn get_api_test_history( + limit: Option, + state: State<'_, AppState>, +) -> Result, String> { + let api_testing_manager = &state.api_testing_manager; + Ok(api_testing_manager.get_test_history(limit).await) +} + +#[tauri::command] +pub async fn clear_api_test_history( + state: State<'_, AppState>, +) -> Result<(), String> { + let api_testing_manager = &state.api_testing_manager; + api_testing_manager.clear_test_history().await; + Ok(()) +} + +#[tauri::command] +pub async fn import_postman_collection( + json_data: String, + state: State<'_, AppState>, +) -> Result { + let api_testing_manager = &state.api_testing_manager; + api_testing_manager.import_postman_collection(&json_data).await +} + +#[tauri::command] +pub async fn export_api_test_suite( + suite_id: String, + state: State<'_, AppState>, +) -> Result { + let api_testing_manager = &state.api_testing_manager; + api_testing_manager.export_test_suite(&suite_id).await +} + +#[tauri::command] +pub async fn run_benchmarks( + configs: Vec, + state: State<'_, AppState>, +) -> Result, String> { + let debug_features_manager = &state.debug_features_manager; + Ok(debug_features_manager.run_benchmarks(configs).await) +} + +#[tauri::command] +pub async fn generate_diagnostic_report( + state: State<'_, AppState>, +) -> Result { + let debug_features_manager = &state.debug_features_manager; + Ok(debug_features_manager.generate_diagnostic_report().await) +} + +#[tauri::command] +pub async fn clear_debug_data( + state: State<'_, AppState>, +) -> Result<(), String> { + let debug_features_manager = &state.debug_features_manager; + debug_features_manager.clear_all_data().await; + Ok(()) +} + +#[tauri::command] +pub async fn set_debug_mode( + enabled: bool, + state: State<'_, AppState>, +) -> Result<(), String> { + let debug_features_manager = &state.debug_features_manager; + debug_features_manager.set_debug_mode(enabled).await; + Ok(()) +} + +#[tauri::command] +pub async fn get_debug_stats( + state: State<'_, AppState>, +) -> Result { + let debug_features_manager = &state.debug_features_manager; + + let logs = debug_features_manager.get_logs(None, None).await; + let mut logs_by_level = HashMap::new(); + for log in &logs { + let level = format!("{:?}", log.level); + *logs_by_level.entry(level).or_insert(0) += 1; + } + + let metrics = debug_features_manager.get_performance_metrics(None).await; + let snapshots = debug_features_manager.get_memory_snapshots(None).await; + let requests = debug_features_manager.get_network_requests(None).await; + + Ok(crate::debug_features::DebugStats { + total_logs: logs.len(), + logs_by_level, + total_metrics: metrics.len(), + total_snapshots: snapshots.len(), + total_requests: requests.len(), + total_test_results: 0, // TODO: Track test results + total_benchmarks: 0, // TODO: Track benchmarks + }) +} + +// Auth Cache Commands +#[derive(Debug, Serialize, Deserialize)] +pub struct StoreTokenOptions { + pub key: String, + pub token: crate::auth_cache::CachedToken, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct GetTokenOptions { + pub key: String, + pub scope: crate::auth_cache::AuthScope, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct StoreCredentialOptions { + pub key: String, + pub credential: crate::auth_cache::AuthCredential, +} + +#[tauri::command] +pub async fn get_auth_cache_config( + state: State<'_, AppState>, +) -> Result { + let auth_cache_manager = &state.auth_cache_manager; + Ok(auth_cache_manager.get_config().await) +} + +#[tauri::command] +pub async fn update_auth_cache_config( + config: crate::auth_cache::AuthCacheConfig, + state: State<'_, AppState>, +) -> Result<(), String> { + let auth_cache_manager = &state.auth_cache_manager; + auth_cache_manager.update_config(config).await; + Ok(()) +} + +#[tauri::command] +pub async fn store_auth_token( + options: StoreTokenOptions, + state: State<'_, AppState>, +) -> Result<(), String> { + let auth_cache_manager = &state.auth_cache_manager; + auth_cache_manager.store_token(&options.key, options.token).await +} + +#[tauri::command] +pub async fn get_auth_token( + options: GetTokenOptions, + state: State<'_, AppState>, +) -> Result, String> { + let auth_cache_manager = &state.auth_cache_manager; + Ok(auth_cache_manager.get_token(&options.key, &options.scope).await) +} + +#[tauri::command] +pub async fn store_auth_credential( + options: StoreCredentialOptions, + state: State<'_, AppState>, +) -> Result<(), String> { + let auth_cache_manager = &state.auth_cache_manager; + auth_cache_manager.store_credential(&options.key, options.credential).await +} + +#[tauri::command] +pub async fn get_auth_credential( + key: String, + state: State<'_, AppState>, +) -> Result, String> { + let auth_cache_manager = &state.auth_cache_manager; + Ok(auth_cache_manager.get_credential(&key).await) +} + +#[tauri::command] +pub async fn clear_auth_cache_entry( + key: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let auth_cache_manager = &state.auth_cache_manager; + auth_cache_manager.clear_entry(&key).await; + Ok(()) +} + +#[tauri::command] +pub async fn clear_all_auth_cache( + state: State<'_, AppState>, +) -> Result<(), String> { + let auth_cache_manager = &state.auth_cache_manager; + auth_cache_manager.clear_all().await; + Ok(()) +} + +#[tauri::command] +pub async fn get_auth_cache_stats( + state: State<'_, AppState>, +) -> Result { + let auth_cache_manager = &state.auth_cache_manager; + Ok(auth_cache_manager.get_stats().await) +} + +#[tauri::command] +pub async fn list_auth_cache_entries( + state: State<'_, AppState>, +) -> Result, u64)>, String> { + let auth_cache_manager = &state.auth_cache_manager; + Ok(auth_cache_manager.list_entries().await) +} + +#[tauri::command] +pub async fn export_auth_cache( + state: State<'_, AppState>, +) -> Result { + let auth_cache_manager = &state.auth_cache_manager; + auth_cache_manager.export_cache().await +} + +#[tauri::command] +pub async fn import_auth_cache( + json_data: String, + state: State<'_, AppState>, +) -> Result<(), String> { + let auth_cache_manager = &state.auth_cache_manager; + auth_cache_manager.import_cache(&json_data).await +} + +#[tauri::command] +pub fn hash_password(password: String) -> String { + crate::auth_cache::AuthCacheManager::hash_password(&password) +} + +#[tauri::command] +pub fn create_auth_cache_key( + service: String, + username: Option, + resource: Option, +) -> String { + crate::auth_cache::create_cache_key( + &service, + username.as_deref(), + resource.as_deref(), + ) +} + +// Terminal Integrations Commands +#[tauri::command] +pub async fn detect_installed_terminals( + state: State<'_, AppState>, +) -> Result, String> { + let terminal_integrations_manager = &state.terminal_integrations_manager; + Ok(terminal_integrations_manager.detect_terminals().await) +} + +#[tauri::command] +pub async fn get_default_terminal( + state: State<'_, AppState>, +) -> Result { + let terminal_integrations_manager = &state.terminal_integrations_manager; + Ok(terminal_integrations_manager.get_default_terminal().await) +} + +#[tauri::command] +pub async fn set_default_terminal( + emulator: crate::terminal_integrations::TerminalEmulator, + state: State<'_, AppState>, +) -> Result<(), String> { + let terminal_integrations_manager = &state.terminal_integrations_manager; + terminal_integrations_manager.set_default_terminal(emulator).await +} + +#[tauri::command] +pub async fn launch_terminal_emulator( + emulator: Option, + options: crate::terminal_integrations::TerminalLaunchOptions, + state: State<'_, AppState>, +) -> Result<(), String> { + let terminal_integrations_manager = &state.terminal_integrations_manager; + terminal_integrations_manager.launch_terminal(emulator, options).await +} + +#[tauri::command] +pub async fn get_terminal_config( + emulator: crate::terminal_integrations::TerminalEmulator, + state: State<'_, AppState>, +) -> Result, String> { + let terminal_integrations_manager = &state.terminal_integrations_manager; + Ok(terminal_integrations_manager.get_terminal_config(emulator).await) +} + +#[tauri::command] +pub async fn update_terminal_config( + config: crate::terminal_integrations::TerminalConfig, + state: State<'_, AppState>, +) -> Result<(), String> { + let terminal_integrations_manager = &state.terminal_integrations_manager; + terminal_integrations_manager.update_terminal_config(config).await; + Ok(()) +} + +#[tauri::command] +pub async fn list_detected_terminals( + state: State<'_, AppState>, +) -> Result, String> { + let terminal_integrations_manager = &state.terminal_integrations_manager; + Ok(terminal_integrations_manager.list_detected_terminals().await) +} + +#[tauri::command] +pub async fn create_terminal_ssh_url( + emulator: crate::terminal_integrations::TerminalEmulator, + user: String, + host: String, + port: u16, + state: State<'_, AppState>, +) -> Result, String> { + let terminal_integrations_manager = &state.terminal_integrations_manager; + Ok(terminal_integrations_manager.create_ssh_url(emulator, &user, &host, port).await) +} + +#[tauri::command] +pub async fn get_terminal_integration_stats( + state: State<'_, AppState>, +) -> Result { + let terminal_integrations_manager = &state.terminal_integrations_manager; + + let detected = terminal_integrations_manager.list_detected_terminals().await; + let default = terminal_integrations_manager.get_default_terminal().await; + + let mut terminals_by_platform = HashMap::new(); + for info in &detected { + if let Some(config) = &info.config { + for platform in &config.platform { + terminals_by_platform + .entry(platform.clone()) + .or_insert_with(Vec::new) + .push(info.emulator); + } + } + } + + Ok(crate::terminal_integrations::TerminalIntegrationStats { + total_terminals: detected.len(), + installed_terminals: detected.iter().filter(|t| t.installed).count(), + default_terminal: default, + terminals_by_platform, + }) +} + +// Settings UI Commands +#[tauri::command] +pub async fn get_all_settings() -> Result, String> { + let settings = crate::settings::Settings::load().unwrap_or_default(); + let mut all_settings = HashMap::new(); + + all_settings.insert("general".to_string(), + serde_json::to_value(&settings.general).unwrap_or(serde_json::Value::Null)); + all_settings.insert("dashboard".to_string(), + serde_json::to_value(&settings.dashboard).unwrap_or(serde_json::Value::Null)); + all_settings.insert("advanced".to_string(), + serde_json::to_value(&settings.advanced).unwrap_or(serde_json::Value::Null)); + all_settings.insert("recording".to_string(), + serde_json::to_value(&settings.recording).unwrap_or(serde_json::Value::Null)); + all_settings.insert("tty_forward".to_string(), + serde_json::to_value(&settings.tty_forward).unwrap_or(serde_json::Value::Null)); + all_settings.insert("monitoring".to_string(), + serde_json::to_value(&settings.monitoring).unwrap_or(serde_json::Value::Null)); + all_settings.insert("network".to_string(), + serde_json::to_value(&settings.network).unwrap_or(serde_json::Value::Null)); + all_settings.insert("port".to_string(), + serde_json::to_value(&settings.port).unwrap_or(serde_json::Value::Null)); + all_settings.insert("notifications".to_string(), + serde_json::to_value(&settings.notifications).unwrap_or(serde_json::Value::Null)); + all_settings.insert("terminal_integrations".to_string(), + serde_json::to_value(&settings.terminal_integrations).unwrap_or(serde_json::Value::Null)); + all_settings.insert("updates".to_string(), + serde_json::to_value(&settings.updates).unwrap_or(serde_json::Value::Null)); + all_settings.insert("security".to_string(), + serde_json::to_value(&settings.security).unwrap_or(serde_json::Value::Null)); + all_settings.insert("debug".to_string(), + serde_json::to_value(&settings.debug).unwrap_or(serde_json::Value::Null)); + + Ok(all_settings) +} + +#[tauri::command] +pub async fn update_setting(section: String, key: String, value: String) -> Result<(), String> { + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + + // Parse the JSON value + let json_value: serde_json::Value = serde_json::from_str(&value) + .map_err(|e| format!("Invalid JSON value: {}", e))?; + + match section.as_str() { + "general" => { + match key.as_str() { + "launch_at_login" => settings.general.launch_at_login = json_value.as_bool().unwrap_or(false), + "show_dock_icon" => settings.general.show_dock_icon = json_value.as_bool().unwrap_or(true), + "default_terminal" => settings.general.default_terminal = json_value.as_str().unwrap_or("system").to_string(), + "default_shell" => settings.general.default_shell = json_value.as_str().unwrap_or("default").to_string(), + "show_welcome_on_startup" => settings.general.show_welcome_on_startup = json_value.as_bool(), + "theme" => settings.general.theme = json_value.as_str().map(|s| s.to_string()), + "language" => settings.general.language = json_value.as_str().map(|s| s.to_string()), + "check_updates_automatically" => settings.general.check_updates_automatically = json_value.as_bool(), + _ => return Err(format!("Unknown general setting: {}", key)), + } + } + "dashboard" => { + match key.as_str() { + "server_port" => settings.dashboard.server_port = json_value.as_u64().unwrap_or(4020) as u16, + "enable_password" => settings.dashboard.enable_password = json_value.as_bool().unwrap_or(false), + "password" => settings.dashboard.password = json_value.as_str().unwrap_or("").to_string(), + "access_mode" => settings.dashboard.access_mode = json_value.as_str().unwrap_or("localhost").to_string(), + "auto_cleanup" => settings.dashboard.auto_cleanup = json_value.as_bool().unwrap_or(true), + "session_limit" => settings.dashboard.session_limit = json_value.as_u64().map(|v| v as u32), + "idle_timeout_minutes" => settings.dashboard.idle_timeout_minutes = json_value.as_u64().map(|v| v as u32), + "enable_cors" => settings.dashboard.enable_cors = json_value.as_bool(), + _ => return Err(format!("Unknown dashboard setting: {}", key)), + } + } + "advanced" => { + match key.as_str() { + "server_mode" => settings.advanced.server_mode = json_value.as_str().unwrap_or("rust").to_string(), + "debug_mode" => settings.advanced.debug_mode = json_value.as_bool().unwrap_or(false), + "log_level" => settings.advanced.log_level = json_value.as_str().unwrap_or("info").to_string(), + "session_timeout" => settings.advanced.session_timeout = json_value.as_u64().unwrap_or(0) as u32, + "ngrok_auth_token" => settings.advanced.ngrok_auth_token = json_value.as_str().map(|s| s.to_string()), + "ngrok_region" => settings.advanced.ngrok_region = json_value.as_str().map(|s| s.to_string()), + "ngrok_subdomain" => settings.advanced.ngrok_subdomain = json_value.as_str().map(|s| s.to_string()), + "enable_telemetry" => settings.advanced.enable_telemetry = json_value.as_bool(), + "experimental_features" => settings.advanced.experimental_features = json_value.as_bool(), + _ => return Err(format!("Unknown advanced setting: {}", key)), + } + } + "debug" => { + // Ensure debug settings exist + if settings.debug.is_none() { + settings.debug = Some(crate::settings::DebugSettings { + enable_debug_menu: false, + show_performance_stats: false, + enable_verbose_logging: false, + log_to_file: false, + log_file_path: None, + max_log_file_size_mb: None, + enable_dev_tools: false, + show_internal_errors: false, + }); + } + + if let Some(ref mut debug) = settings.debug { + match key.as_str() { + "enable_debug_menu" => debug.enable_debug_menu = json_value.as_bool().unwrap_or(false), + "show_performance_stats" => debug.show_performance_stats = json_value.as_bool().unwrap_or(false), + "enable_verbose_logging" => debug.enable_verbose_logging = json_value.as_bool().unwrap_or(false), + "log_to_file" => debug.log_to_file = json_value.as_bool().unwrap_or(false), + "log_file_path" => debug.log_file_path = json_value.as_str().map(|s| s.to_string()), + "max_log_file_size_mb" => debug.max_log_file_size_mb = json_value.as_u64().map(|v| v as u32), + "enable_dev_tools" => debug.enable_dev_tools = json_value.as_bool().unwrap_or(false), + "show_internal_errors" => debug.show_internal_errors = json_value.as_bool().unwrap_or(false), + _ => return Err(format!("Unknown debug setting: {}", key)), + } + } + } + _ => return Err(format!("Unknown settings section: {}", section)), + } + + settings.save() +} + +#[tauri::command] +pub async fn set_dashboard_password(password: String, state: State<'_, AppState>) -> Result<(), String> { + // Update settings + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + settings.dashboard.password = password.clone(); + settings.dashboard.enable_password = !password.is_empty(); + settings.save()?; + + // Update the running server's auth configuration if it's running + let server = state.http_server.read().await; + if server.is_some() { + drop(server); + // Restart server to apply new auth settings + restart_server(state).await?; + } + + Ok(()) +} + +#[tauri::command] +pub async fn restart_server_with_port(port: u16, state: State<'_, AppState>) -> Result<(), String> { + // Update settings with new port + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + settings.dashboard.server_port = port; + settings.save()?; + + // Restart the server + restart_server(state).await +} + +#[tauri::command] +pub async fn update_server_bind_address(address: String, state: State<'_, AppState>) -> Result<(), String> { + // Update settings + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + settings.dashboard.access_mode = if address == "127.0.0.1" { "localhost" } else { "network" }.to_string(); + settings.save()?; + + // Restart server to apply new bind address + restart_server(state).await +} + +#[tauri::command] +pub async fn set_dock_icon_visibility(visible: bool, app_handle: tauri::AppHandle) -> Result<(), String> { + // Update settings + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + settings.general.show_dock_icon = visible; + settings.save()?; + + // Apply the change + update_dock_icon_visibility(app_handle).await +} + +#[tauri::command] +pub async fn set_log_level(level: String) -> Result<(), String> { + // Update settings + let mut settings = crate::settings::Settings::load().unwrap_or_default(); + settings.advanced.log_level = level.clone(); + settings.save()?; + + // TODO: Apply the log level change to the running logger + tracing::info!("Log level changed to: {}", level); + + Ok(()) +} + +#[tauri::command] +pub async fn test_api_endpoint(endpoint: String, state: State<'_, AppState>) -> Result { + let server = state.http_server.read().await; + + if let Some(http_server) = server.as_ref() { + let port = http_server.port(); + let url = format!("http://localhost:{}{}", port, endpoint); + + // Create a simple HTTP client request + let client = reqwest::Client::new(); + let response = client.get(&url) + .send() + .await + .map_err(|e| format!("Request failed: {}", e))?; + + let status = response.status(); + let body = response.text().await.unwrap_or_else(|_| "Failed to read body".to_string()); + + // Try to parse as JSON, fallback to text + let json_body = serde_json::from_str::(&body) + .unwrap_or_else(|_| serde_json::json!({ "body": body })); + + Ok(serde_json::json!({ + "status": status.as_u16(), + "endpoint": endpoint, + "response": json_body, + })) + } else { + Err("Server is not running".to_string()) + } +} + +#[derive(Debug, Serialize, Clone)] +pub struct ServerLog { + pub timestamp: String, + pub level: String, + pub message: String, +} + +#[tauri::command] +pub async fn get_server_logs(limit: usize) -> Result, String> { + // TODO: Implement actual log collection from the server + // For now, return dummy logs for the UI + let logs = vec![ + ServerLog { + timestamp: chrono::Utc::now().to_rfc3339(), + level: "info".to_string(), + message: "Server started on port 4020".to_string(), + }, + ServerLog { + timestamp: chrono::Utc::now().to_rfc3339(), + level: "info".to_string(), + message: "Health check endpoint accessed".to_string(), + }, + ]; + + Ok(logs.into_iter().take(limit).collect()) +} + +#[tauri::command] +pub async fn export_logs(app_handle: tauri::AppHandle) -> Result<(), String> { + // Get logs + let logs = get_server_logs(1000).await?; + + // Convert to text format + let log_text = logs.into_iter() + .map(|log| format!("[{}] {} - {}", log.timestamp, log.level.to_uppercase(), log.message)) + .collect::>() + .join("\n"); + + // Save to file + let timestamp = chrono::Utc::now().format("%Y%m%d_%H%M%S"); + let filename = format!("vibetunnel_logs_{}.txt", timestamp); + + use tauri::api::dialog::blocking::FileDialogBuilder; + if let Some(path) = FileDialogBuilder::new() + .set_file_name(&filename) + .set_title("Export Logs") + .save_file() { + std::fs::write(path, log_text).map_err(|e| e.to_string())?; + } + + Ok(()) +} + +#[tauri::command] +pub async fn get_local_ip() -> Result { + get_local_ip_address().await.map(|opt| opt.unwrap_or_else(|| "127.0.0.1".to_string())) +} + +#[tauri::command] +pub async fn detect_terminals() -> Result, String> { + Ok(crate::terminal_detector::detect_terminals()) } \ No newline at end of file diff --git a/tauri/src-tauri/src/debug_features.rs b/tauri/src-tauri/src/debug_features.rs new file mode 100644 index 00000000..5dc4eef8 --- /dev/null +++ b/tauri/src-tauri/src/debug_features.rs @@ -0,0 +1,648 @@ +use serde::{Serialize, Deserialize}; +use std::sync::Arc; +use tokio::sync::RwLock; +use std::collections::{HashMap, VecDeque}; +use chrono::{DateTime, Utc}; +use std::path::PathBuf; + +/// Debug feature types +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub enum DebugFeature { + APITesting, + PerformanceMonitoring, + MemoryProfiling, + NetworkInspector, + EventLogger, + StateInspector, + LogViewer, + CrashReporter, + BenchmarkRunner, + DiagnosticReport, +} + +/// Debug log level +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] +pub enum LogLevel { + Trace, + Debug, + Info, + Warn, + Error, +} + +/// Debug log entry +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct LogEntry { + pub timestamp: DateTime, + pub level: LogLevel, + pub component: String, + pub message: String, + pub metadata: HashMap, +} + +/// Performance metric +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PerformanceMetric { + pub name: String, + pub value: f64, + pub unit: String, + pub timestamp: DateTime, + pub tags: HashMap, +} + +/// Memory snapshot +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct MemorySnapshot { + pub timestamp: DateTime, + pub heap_used_mb: f64, + pub heap_total_mb: f64, + pub external_mb: f64, + pub process_rss_mb: f64, + pub details: HashMap, +} + +/// Network request log +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct NetworkRequest { + pub id: String, + pub timestamp: DateTime, + pub method: String, + pub url: String, + pub status: Option, + pub duration_ms: Option, + pub request_headers: HashMap, + pub response_headers: HashMap, + pub request_body: Option, + pub response_body: Option, + pub error: Option, +} + +/// API test case +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITestCase { + pub id: String, + pub name: String, + pub endpoint: String, + pub method: String, + pub headers: HashMap, + pub body: Option, + pub expected_status: u16, + pub expected_body: Option, + pub timeout_ms: u64, +} + +/// API test result +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct APITestResult { + pub test_id: String, + pub success: bool, + pub actual_status: Option, + pub actual_body: Option, + pub duration_ms: u64, + pub error: Option, + pub timestamp: DateTime, +} + +/// Benchmark configuration +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BenchmarkConfig { + pub name: String, + pub iterations: u32, + pub warmup_iterations: u32, + pub timeout_ms: u64, + pub collect_memory: bool, + pub collect_cpu: bool, +} + +/// Benchmark result +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BenchmarkResult { + pub name: String, + pub iterations: u32, + pub mean_ms: f64, + pub median_ms: f64, + pub min_ms: f64, + pub max_ms: f64, + pub std_dev_ms: f64, + pub memory_usage_mb: Option, + pub cpu_usage_percent: Option, + pub timestamp: DateTime, +} + +/// Diagnostic report +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DiagnosticReport { + pub timestamp: DateTime, + pub system_info: SystemInfo, + pub app_info: AppInfo, + pub performance_summary: PerformanceSummary, + pub error_summary: ErrorSummary, + pub recommendations: Vec, +} + +/// System information +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SystemInfo { + pub os: String, + pub arch: String, + pub cpu_count: usize, + pub total_memory_mb: u64, + pub available_memory_mb: u64, + pub disk_space_mb: u64, + pub node_version: Option, + pub rust_version: String, +} + +/// Application information +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AppInfo { + pub version: String, + pub build_date: String, + pub uptime_seconds: u64, + pub active_sessions: usize, + pub total_requests: u64, + pub error_count: u64, +} + +/// Performance summary +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PerformanceSummary { + pub avg_response_time_ms: f64, + pub p95_response_time_ms: f64, + pub p99_response_time_ms: f64, + pub requests_per_second: f64, + pub cpu_usage_percent: f64, + pub memory_usage_mb: f64, +} + +/// Error summary +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ErrorSummary { + pub total_errors: u64, + pub errors_by_type: HashMap, + pub recent_errors: Vec, +} + +/// Debug settings +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DebugSettings { + pub enabled: bool, + pub log_level: LogLevel, + pub max_log_entries: usize, + pub enable_performance_monitoring: bool, + pub enable_memory_profiling: bool, + pub enable_network_inspector: bool, + pub enable_crash_reporting: bool, + pub log_to_file: bool, + pub log_file_path: Option, + pub performance_sample_interval_ms: u64, + pub memory_sample_interval_ms: u64, +} + +impl Default for DebugSettings { + fn default() -> Self { + Self { + enabled: cfg!(debug_assertions), + log_level: LogLevel::Info, + max_log_entries: 10000, + enable_performance_monitoring: false, + enable_memory_profiling: false, + enable_network_inspector: false, + enable_crash_reporting: true, + log_to_file: false, + log_file_path: None, + performance_sample_interval_ms: 1000, + memory_sample_interval_ms: 5000, + } + } +} + +/// Debug features manager +pub struct DebugFeaturesManager { + settings: Arc>, + logs: Arc>>, + performance_metrics: Arc>>, + memory_snapshots: Arc>>, + network_requests: Arc>>, + api_test_results: Arc>>>, + benchmark_results: Arc>>, + notification_manager: Option>, +} + +impl DebugFeaturesManager { + /// Create a new debug features manager + pub fn new() -> Self { + Self { + settings: Arc::new(RwLock::new(DebugSettings::default())), + logs: Arc::new(RwLock::new(VecDeque::new())), + performance_metrics: Arc::new(RwLock::new(VecDeque::new())), + memory_snapshots: Arc::new(RwLock::new(VecDeque::new())), + network_requests: Arc::new(RwLock::new(HashMap::new())), + api_test_results: Arc::new(RwLock::new(HashMap::new())), + benchmark_results: Arc::new(RwLock::new(Vec::new())), + notification_manager: None, + } + } + + /// Set the notification manager + pub fn set_notification_manager(&mut self, notification_manager: Arc) { + self.notification_manager = Some(notification_manager); + } + + /// Get debug settings + pub async fn get_settings(&self) -> DebugSettings { + self.settings.read().await.clone() + } + + /// Update debug settings + pub async fn update_settings(&self, settings: DebugSettings) { + *self.settings.write().await = settings; + } + + /// Log a message + pub async fn log(&self, level: LogLevel, component: &str, message: &str, metadata: HashMap) { + let settings = self.settings.read().await; + + // Check if logging is enabled and level is appropriate + if !settings.enabled || level < settings.log_level { + return; + } + + let entry = LogEntry { + timestamp: Utc::now(), + level, + component: component.to_string(), + message: message.to_string(), + metadata, + }; + + // Add to in-memory log + let mut logs = self.logs.write().await; + logs.push_back(entry.clone()); + + // Limit log size + while logs.len() > settings.max_log_entries { + logs.pop_front(); + } + + // Log to file if enabled + if settings.log_to_file { + if let Some(path) = &settings.log_file_path { + let _ = self.write_log_to_file(&entry, path).await; + } + } + } + + /// Record a performance metric + pub async fn record_metric(&self, name: &str, value: f64, unit: &str, tags: HashMap) { + let settings = self.settings.read().await; + + if !settings.enabled || !settings.enable_performance_monitoring { + return; + } + + let metric = PerformanceMetric { + name: name.to_string(), + value, + unit: unit.to_string(), + timestamp: Utc::now(), + tags, + }; + + let mut metrics = self.performance_metrics.write().await; + metrics.push_back(metric); + + // Keep only last 1000 metrics + while metrics.len() > 1000 { + metrics.pop_front(); + } + } + + /// Take a memory snapshot + pub async fn take_memory_snapshot(&self) -> Result { + let settings = self.settings.read().await; + + if !settings.enabled || !settings.enable_memory_profiling { + return Err("Memory profiling is disabled".to_string()); + } + + // TODO: Implement actual memory profiling + let snapshot = MemorySnapshot { + timestamp: Utc::now(), + heap_used_mb: 0.0, + heap_total_mb: 0.0, + external_mb: 0.0, + process_rss_mb: 0.0, + details: HashMap::new(), + }; + + let mut snapshots = self.memory_snapshots.write().await; + snapshots.push_back(snapshot.clone()); + + // Keep only last 100 snapshots + while snapshots.len() > 100 { + snapshots.pop_front(); + } + + Ok(snapshot) + } + + /// Log a network request + pub async fn log_network_request(&self, request: NetworkRequest) { + let settings = self.settings.read().await; + + if !settings.enabled || !settings.enable_network_inspector { + return; + } + + let mut requests = self.network_requests.write().await; + requests.insert(request.id.clone(), request); + + // Keep only last 500 requests + if requests.len() > 500 { + // Remove oldest entries + let mut ids: Vec<_> = requests.keys().cloned().collect(); + ids.sort(); + for id in ids.iter().take(requests.len() - 500) { + requests.remove(id); + } + } + } + + /// Run API tests + pub async fn run_api_tests(&self, tests: Vec) -> Vec { + let mut results = Vec::new(); + + for test in tests { + let result = self.run_single_api_test(&test).await; + results.push(result.clone()); + + // Store result + let mut test_results = self.api_test_results.write().await; + test_results.entry(test.id.clone()) + .or_insert_with(Vec::new) + .push(result); + } + + results + } + + /// Run a single API test + async fn run_single_api_test(&self, test: &APITestCase) -> APITestResult { + let start = std::time::Instant::now(); + + // TODO: Implement actual API testing + let duration_ms = start.elapsed().as_millis() as u64; + + APITestResult { + test_id: test.id.clone(), + success: false, + actual_status: None, + actual_body: None, + duration_ms, + error: Some("API testing not yet implemented".to_string()), + timestamp: Utc::now(), + } + } + + /// Run benchmarks + pub async fn run_benchmarks(&self, configs: Vec) -> Vec { + let mut results = Vec::new(); + + for config in configs { + let result = self.run_single_benchmark(&config).await; + results.push(result.clone()); + + // Store result + self.benchmark_results.write().await.push(result); + } + + results + } + + /// Run a single benchmark + async fn run_single_benchmark(&self, config: &BenchmarkConfig) -> BenchmarkResult { + // TODO: Implement actual benchmarking + BenchmarkResult { + name: config.name.clone(), + iterations: config.iterations, + mean_ms: 0.0, + median_ms: 0.0, + min_ms: 0.0, + max_ms: 0.0, + std_dev_ms: 0.0, + memory_usage_mb: None, + cpu_usage_percent: None, + timestamp: Utc::now(), + } + } + + /// Generate diagnostic report + pub async fn generate_diagnostic_report(&self) -> DiagnosticReport { + let system_info = self.get_system_info().await; + let app_info = self.get_app_info().await; + let performance_summary = self.get_performance_summary().await; + let error_summary = self.get_error_summary().await; + let recommendations = self.generate_recommendations(&system_info, &app_info, &performance_summary, &error_summary); + + DiagnosticReport { + timestamp: Utc::now(), + system_info, + app_info, + performance_summary, + error_summary, + recommendations, + } + } + + /// Get recent logs + pub async fn get_logs(&self, limit: Option, level: Option) -> Vec { + let logs = self.logs.read().await; + let iter = logs.iter().rev(); + + let filtered: Vec<_> = if let Some(min_level) = level { + iter.filter(|log| log.level >= min_level).cloned().collect() + } else { + iter.cloned().collect() + }; + + match limit { + Some(n) => filtered.into_iter().take(n).collect(), + None => filtered, + } + } + + /// Get performance metrics + pub async fn get_performance_metrics(&self, limit: Option) -> Vec { + let metrics = self.performance_metrics.read().await; + match limit { + Some(n) => metrics.iter().rev().take(n).cloned().collect(), + None => metrics.iter().cloned().collect(), + } + } + + /// Get memory snapshots + pub async fn get_memory_snapshots(&self, limit: Option) -> Vec { + let snapshots = self.memory_snapshots.read().await; + match limit { + Some(n) => snapshots.iter().rev().take(n).cloned().collect(), + None => snapshots.iter().cloned().collect(), + } + } + + /// Get network requests + pub async fn get_network_requests(&self, limit: Option) -> Vec { + let requests = self.network_requests.read().await; + let mut sorted: Vec<_> = requests.values().cloned().collect(); + sorted.sort_by(|a, b| b.timestamp.cmp(&a.timestamp)); + + match limit { + Some(n) => sorted.into_iter().take(n).collect(), + None => sorted, + } + } + + /// Clear all debug data + pub async fn clear_all_data(&self) { + self.logs.write().await.clear(); + self.performance_metrics.write().await.clear(); + self.memory_snapshots.write().await.clear(); + self.network_requests.write().await.clear(); + self.api_test_results.write().await.clear(); + self.benchmark_results.write().await.clear(); + } + + /// Enable/disable debug mode + pub async fn set_debug_mode(&self, enabled: bool) { + self.settings.write().await.enabled = enabled; + + if let Some(notification_manager) = &self.notification_manager { + let message = if enabled { + "Debug mode enabled" + } else { + "Debug mode disabled" + }; + let _ = notification_manager.notify_success("Debug Mode", message).await; + } + } + + // Helper methods + async fn write_log_to_file(&self, entry: &LogEntry, path: &PathBuf) -> Result<(), String> { + use tokio::io::AsyncWriteExt; + + let log_line = format!( + "[{}] [{}] [{}] {}\n", + entry.timestamp.format("%Y-%m-%d %H:%M:%S%.3f"), + format!("{:?}", entry.level), + entry.component, + entry.message + ); + + let mut file = tokio::fs::OpenOptions::new() + .create(true) + .append(true) + .open(path) + .await + .map_err(|e| e.to_string())?; + + file.write_all(log_line.as_bytes()).await + .map_err(|e| e.to_string())?; + + Ok(()) + } + + async fn get_system_info(&self) -> SystemInfo { + SystemInfo { + os: std::env::consts::OS.to_string(), + arch: std::env::consts::ARCH.to_string(), + cpu_count: num_cpus::get(), + total_memory_mb: 0, // TODO: Get actual memory + available_memory_mb: 0, + disk_space_mb: 0, + node_version: None, + rust_version: "1.70.0".to_string(), // TODO: Get actual rust version + } + } + + async fn get_app_info(&self) -> AppInfo { + AppInfo { + version: env!("CARGO_PKG_VERSION").to_string(), + build_date: chrono::Utc::now().to_rfc3339(), // TODO: Get actual build date + uptime_seconds: 0, // TODO: Track uptime + active_sessions: 0, + total_requests: 0, + error_count: 0, + } + } + + async fn get_performance_summary(&self) -> PerformanceSummary { + PerformanceSummary { + avg_response_time_ms: 0.0, + p95_response_time_ms: 0.0, + p99_response_time_ms: 0.0, + requests_per_second: 0.0, + cpu_usage_percent: 0.0, + memory_usage_mb: 0.0, + } + } + + async fn get_error_summary(&self) -> ErrorSummary { + let logs = self.logs.read().await; + let errors: Vec<_> = logs.iter() + .filter(|log| log.level == LogLevel::Error) + .cloned() + .collect(); + + let mut errors_by_type = HashMap::new(); + for error in &errors { + let error_type = error.metadata.get("type") + .and_then(|v| v.as_str()) + .unwrap_or("unknown") + .to_string(); + *errors_by_type.entry(error_type).or_insert(0) += 1; + } + + ErrorSummary { + total_errors: errors.len() as u64, + errors_by_type, + recent_errors: errors.into_iter().rev().take(10).collect(), + } + } + + fn generate_recommendations(&self, system: &SystemInfo, _app: &AppInfo, perf: &PerformanceSummary, errors: &ErrorSummary) -> Vec { + let mut recommendations = Vec::new(); + + if perf.cpu_usage_percent > 80.0 { + recommendations.push("High CPU usage detected. Consider optimizing performance-critical code.".to_string()); + } + + if perf.memory_usage_mb > (system.total_memory_mb as f64 * 0.8) { + recommendations.push("High memory usage detected. Check for memory leaks.".to_string()); + } + + if errors.total_errors > 100 { + recommendations.push("High error rate detected. Review error logs for patterns.".to_string()); + } + + if perf.avg_response_time_ms > 1000.0 { + recommendations.push("Slow response times detected. Consider caching or query optimization.".to_string()); + } + + recommendations + } +} + +/// Debug statistics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DebugStats { + pub total_logs: usize, + pub logs_by_level: HashMap, + pub total_metrics: usize, + pub total_snapshots: usize, + pub total_requests: usize, + pub total_test_results: usize, + pub total_benchmarks: usize, +} + +// Re-export num_cpus if needed +extern crate num_cpus; \ No newline at end of file diff --git a/tauri/src-tauri/src/fs_api.rs b/tauri/src-tauri/src/fs_api.rs new file mode 100644 index 00000000..5ef2d9f9 --- /dev/null +++ b/tauri/src-tauri/src/fs_api.rs @@ -0,0 +1,428 @@ +use axum::{ + extract::{Path, Query, State as AxumState}, + http::{StatusCode, header}, + response::{IntoResponse, Response}, + Json, +}; +use serde::{Deserialize, Serialize}; +use std::path::PathBuf; +use tokio::fs; +use tokio::io::AsyncReadExt; + +#[derive(Debug, Deserialize)] +pub struct FileQuery { + pub path: String, +} + +#[derive(Debug, Serialize)] +pub struct FileMetadata { + pub name: String, + pub path: String, + pub size: u64, + pub is_dir: bool, + pub is_file: bool, + pub is_symlink: bool, + pub readonly: bool, + pub hidden: bool, + pub created: Option, + pub modified: Option, + pub accessed: Option, + #[cfg(unix)] + pub permissions: Option, + pub mime_type: Option, +} + +#[derive(Debug, Deserialize)] +pub struct MoveRequest { + pub from: String, + pub to: String, +} + +#[derive(Debug, Deserialize)] +pub struct CopyRequest { + pub from: String, + pub to: String, + pub overwrite: Option, +} + +#[derive(Debug, Deserialize)] +pub struct WriteFileRequest { + pub path: String, + pub content: String, + pub encoding: Option, +} + +#[derive(Debug, Serialize)] +pub struct OperationResult { + pub success: bool, + pub message: String, +} + +/// Expand tilde to home directory +fn expand_path(path: &str) -> Result { + if path.starts_with('~') { + let home = dirs::home_dir() + .ok_or(StatusCode::INTERNAL_SERVER_ERROR)?; + Ok(home.join(path.strip_prefix("~/").unwrap_or(""))) + } else { + Ok(PathBuf::from(path)) + } +} + +/// Get detailed file metadata +pub async fn get_file_info( + Query(params): Query, +) -> Result, StatusCode> { + let path = expand_path(¶ms.path)?; + + let metadata = fs::metadata(&path).await + .map_err(|_| StatusCode::NOT_FOUND)?; + + let name = path.file_name() + .map(|n| n.to_string_lossy().to_string()) + .unwrap_or_else(|| path.to_string_lossy().to_string()); + + let is_symlink = fs::symlink_metadata(&path).await + .map(|m| m.file_type().is_symlink()) + .unwrap_or(false); + + let hidden = name.starts_with('.'); + + let created = metadata.created() + .map(|t| { + let datetime: chrono::DateTime = t.into(); + datetime.to_rfc3339() + }) + .ok(); + + let modified = metadata.modified() + .map(|t| { + let datetime: chrono::DateTime = t.into(); + datetime.to_rfc3339() + }) + .ok(); + + let accessed = metadata.accessed() + .map(|t| { + let datetime: chrono::DateTime = t.into(); + datetime.to_rfc3339() + }) + .ok(); + + #[cfg(unix)] + let permissions = { + use std::os::unix::fs::PermissionsExt; + Some(format!("{:o}", metadata.permissions().mode() & 0o777)) + }; + + let mime_type = if metadata.is_file() { + // Simple MIME type detection based on extension + let ext = path.extension() + .and_then(|e| e.to_str()) + .unwrap_or(""); + + Some(match ext { + "txt" => "text/plain", + "html" | "htm" => "text/html", + "css" => "text/css", + "js" => "application/javascript", + "json" => "application/json", + "png" => "image/png", + "jpg" | "jpeg" => "image/jpeg", + "gif" => "image/gif", + "pdf" => "application/pdf", + "zip" => "application/zip", + _ => "application/octet-stream", + }.to_string()) + } else { + None + }; + + Ok(Json(FileMetadata { + name, + path: path.to_string_lossy().to_string(), + size: metadata.len(), + is_dir: metadata.is_dir(), + is_file: metadata.is_file(), + is_symlink, + readonly: metadata.permissions().readonly(), + hidden, + created, + modified, + accessed, + #[cfg(unix)] + permissions, + #[cfg(not(unix))] + permissions: None, + mime_type, + })) +} + +/// Read file contents +pub async fn read_file( + Query(params): Query, +) -> Result { + let path = expand_path(¶ms.path)?; + + // Check if file exists and is a file + let metadata = fs::metadata(&path).await + .map_err(|_| StatusCode::NOT_FOUND)?; + + if !metadata.is_file() { + return Err(StatusCode::BAD_REQUEST); + } + + // Read file contents + let mut file = fs::File::open(&path).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + let mut contents = Vec::new(); + file.read_to_end(&mut contents).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + // Determine content type + let content_type = path.extension() + .and_then(|e| e.to_str()) + .and_then(|ext| match ext { + "txt" => Some("text/plain"), + "html" | "htm" => Some("text/html"), + "css" => Some("text/css"), + "js" => Some("application/javascript"), + "json" => Some("application/json"), + "png" => Some("image/png"), + "jpg" | "jpeg" => Some("image/jpeg"), + "gif" => Some("image/gif"), + "pdf" => Some("application/pdf"), + _ => None, + }) + .unwrap_or("application/octet-stream"); + + Ok(( + [(header::CONTENT_TYPE, content_type)], + contents, + ).into_response()) +} + +/// Write file contents +pub async fn write_file( + Json(req): Json, +) -> Result, StatusCode> { + let path = expand_path(&req.path)?; + + // Ensure parent directory exists + if let Some(parent) = path.parent() { + fs::create_dir_all(parent).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + } + + // Write file + let content = if req.encoding.as_deref() == Some("base64") { + base64::decode(&req.content) + .map_err(|_| StatusCode::BAD_REQUEST)? + } else { + req.content.into_bytes() + }; + + fs::write(&path, content).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + Ok(Json(OperationResult { + success: true, + message: format!("File written successfully: {}", path.display()), + })) +} + +/// Delete file or directory +pub async fn delete_file( + Query(params): Query, +) -> Result, StatusCode> { + let path = expand_path(¶ms.path)?; + + // Check if path exists + let metadata = fs::metadata(&path).await + .map_err(|_| StatusCode::NOT_FOUND)?; + + // Delete based on type + if metadata.is_dir() { + fs::remove_dir_all(&path).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + } else { + fs::remove_file(&path).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + } + + Ok(Json(OperationResult { + success: true, + message: format!("Deleted: {}", path.display()), + })) +} + +/// Move/rename file or directory +pub async fn move_file( + Json(req): Json, +) -> Result, StatusCode> { + let from_path = expand_path(&req.from)?; + let to_path = expand_path(&req.to)?; + + // Check if source exists + if !from_path.exists() { + return Err(StatusCode::NOT_FOUND); + } + + // Check if destination already exists + if to_path.exists() { + return Err(StatusCode::CONFLICT); + } + + // Ensure destination parent directory exists + if let Some(parent) = to_path.parent() { + fs::create_dir_all(parent).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + } + + // Move the file/directory + fs::rename(&from_path, &to_path).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + Ok(Json(OperationResult { + success: true, + message: format!("Moved from {} to {}", from_path.display(), to_path.display()), + })) +} + +/// Copy file or directory +pub async fn copy_file( + Json(req): Json, +) -> Result, StatusCode> { + let from_path = expand_path(&req.from)?; + let to_path = expand_path(&req.to)?; + + // Check if source exists + let metadata = fs::metadata(&from_path).await + .map_err(|_| StatusCode::NOT_FOUND)?; + + // Check if destination already exists + if to_path.exists() && !req.overwrite.unwrap_or(false) { + return Err(StatusCode::CONFLICT); + } + + // Ensure destination parent directory exists + if let Some(parent) = to_path.parent() { + fs::create_dir_all(parent).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + } + + // Copy based on type + if metadata.is_file() { + fs::copy(&from_path, &to_path).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + } else if metadata.is_dir() { + // Recursive directory copy + copy_dir_recursive(&from_path, &to_path).await?; + } + + Ok(Json(OperationResult { + success: true, + message: format!("Copied from {} to {}", from_path.display(), to_path.display()), + })) +} + +/// Recursively copy a directory +async fn copy_dir_recursive(from: &PathBuf, to: &PathBuf) -> Result<(), StatusCode> { + fs::create_dir_all(to).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + let mut entries = fs::read_dir(from).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + while let Some(entry) = entries.next_entry().await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? { + + let from_path = entry.path(); + let to_path = to.join(entry.file_name()); + + let metadata = entry.metadata().await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + if metadata.is_file() { + fs::copy(&from_path, &to_path).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + } else if metadata.is_dir() { + Box::pin(copy_dir_recursive(&from_path, &to_path)).await?; + } + } + + Ok(()) +} + +/// Search for files matching a pattern +#[derive(Debug, Deserialize)] +pub struct SearchQuery { + pub path: String, + pub pattern: String, + pub max_depth: Option, +} + +#[derive(Debug, Serialize)] +pub struct SearchResult { + pub path: String, + pub name: String, + pub is_dir: bool, + pub size: u64, +} + +pub async fn search_files( + Query(params): Query, +) -> Result>, StatusCode> { + let base_path = expand_path(¶ms.path)?; + let pattern = params.pattern.to_lowercase(); + let max_depth = params.max_depth.unwrap_or(5); + + let mut results = Vec::new(); + search_recursive(&base_path, &pattern, 0, max_depth, &mut results).await?; + + Ok(Json(results)) +} + +async fn search_recursive( + path: &PathBuf, + pattern: &str, + depth: u32, + max_depth: u32, + results: &mut Vec, +) -> Result<(), StatusCode> { + if depth > max_depth { + return Ok(()); + } + + let mut entries = fs::read_dir(path).await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + while let Some(entry) = entries.next_entry().await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? { + + let entry_path = entry.path(); + let file_name = entry.file_name().to_string_lossy().to_string(); + + if file_name.to_lowercase().contains(pattern) { + let metadata = entry.metadata().await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + results.push(SearchResult { + path: entry_path.to_string_lossy().to_string(), + name: file_name, + is_dir: metadata.is_dir(), + size: metadata.len(), + }); + } + + // Recurse into directories + if entry.file_type().await + .map(|t| t.is_dir()) + .unwrap_or(false) { + Box::pin(search_recursive(&entry_path, pattern, depth + 1, max_depth, results)).await?; + } + } + + Ok(()) +} \ No newline at end of file diff --git a/tauri/src-tauri/src/lib.rs b/tauri/src-tauri/src/lib.rs index cbc86237..22db7788 100644 --- a/tauri/src-tauri/src/lib.rs +++ b/tauri/src-tauri/src/lib.rs @@ -9,6 +9,20 @@ pub mod auth; pub mod terminal_detector; pub mod cli_installer; pub mod tray_menu; +pub mod cast; +pub mod tty_forward; +pub mod session_monitor; +pub mod port_conflict; +pub mod network_utils; +pub mod notification_manager; +pub mod welcome; +pub mod permissions; +pub mod updater; +pub mod backend_manager; +pub mod debug_features; +pub mod api_testing; +pub mod auth_cache; +pub mod terminal_integrations; #[cfg(mobile)] pub fn init() { diff --git a/tauri/src-tauri/src/main.rs b/tauri/src-tauri/src/main.rs index 555fbc3e..cb3e8169 100644 --- a/tauri/src-tauri/src/main.rs +++ b/tauri/src-tauri/src/main.rs @@ -19,6 +19,23 @@ mod terminal_detector; mod cli_installer; mod auth; mod tray_menu; +mod cast; +mod tty_forward; +mod session_monitor; +mod port_conflict; +mod network_utils; +mod notification_manager; +mod welcome; +mod permissions; +mod updater; +mod backend_manager; +mod debug_features; +mod api_testing; +mod auth_cache; +mod terminal_integrations; +mod app_mover; +mod terminal_spawn_service; +mod fs_api; use commands::*; use state::AppState; @@ -40,8 +57,8 @@ fn open_settings_window(app: AppHandle) -> Result<(), String> { ) .title("VibeTunnel Settings") .inner_size(800.0, 600.0) - .resizable(false) - .decorations(false) + .resizable(true) + .decorations(true) .center() .build() .map_err(|e| e.to_string())?; @@ -108,8 +125,197 @@ fn main() { cli_installer::install_cli, cli_installer::uninstall_cli, cli_installer::check_cli_installed, + start_terminal_recording, + stop_terminal_recording, + save_terminal_recording, + get_recording_status, + start_tty_forward, + stop_tty_forward, + list_tty_forwards, + get_tty_forward, + get_session_stats, + get_monitored_sessions, + start_session_monitoring, + check_port_availability, + detect_port_conflict, + resolve_port_conflict, + force_kill_process, + find_available_ports, + get_local_ip_address, + get_all_ip_addresses, + get_network_interfaces, + get_hostname, + test_network_connectivity, + get_network_stats, + show_notification, + get_notifications, + get_notification_history, + mark_notification_as_read, + mark_all_notifications_as_read, + clear_notification, + clear_all_notifications, + get_unread_notification_count, + update_notification_settings, + get_notification_settings, + get_welcome_state, + should_show_welcome, + get_tutorials, + get_tutorial_category, + complete_tutorial_step, + skip_tutorial, + reset_tutorial, + get_tutorial_progress, + show_welcome_window, + get_recording_settings, + save_recording_settings, + get_all_advanced_settings, + update_advanced_settings, + reset_settings_section, + export_settings, + import_settings, + check_all_permissions, + check_permission, + request_permission, + get_permission_info, + get_all_permissions, + get_required_permissions, + get_missing_required_permissions, + all_required_permissions_granted, + open_system_permission_settings, + get_permission_stats, + check_for_updates, + download_update, + install_update, + cancel_update, + get_update_state, + get_updater_settings, + update_updater_settings, + switch_update_channel, + get_update_history, + get_available_backends, + get_backend_config, + is_backend_installed, + install_backend, + start_backend, + stop_backend, + switch_backend, + get_active_backend, + get_backend_instances, + check_backend_health, + get_backend_stats, + get_debug_settings, + update_debug_settings, + log_debug_message, + record_performance_metric, + take_memory_snapshot, + get_debug_logs, + get_performance_metrics, + get_memory_snapshots, + get_network_requests, + run_api_tests, + run_benchmarks, + generate_diagnostic_report, + clear_debug_data, + set_debug_mode, + get_debug_stats, + get_api_test_config, + update_api_test_config, + add_api_test_suite, + get_api_test_suite, + list_api_test_suites, + run_single_api_test, + run_api_test_suite, + get_api_test_history, + clear_api_test_history, + import_postman_collection, + export_api_test_suite, + get_auth_cache_config, + update_auth_cache_config, + store_auth_token, + get_auth_token, + store_auth_credential, + get_auth_credential, + clear_auth_cache_entry, + clear_all_auth_cache, + get_auth_cache_stats, + list_auth_cache_entries, + export_auth_cache, + import_auth_cache, + hash_password, + create_auth_cache_key, + detect_installed_terminals, + get_default_terminal, + set_default_terminal, + launch_terminal_emulator, + get_terminal_config, + update_terminal_config, + list_detected_terminals, + create_terminal_ssh_url, + get_terminal_integration_stats, + // Settings UI Commands + get_all_settings, + update_setting, + set_dashboard_password, + restart_server_with_port, + update_server_bind_address, + set_dock_icon_visibility, + set_log_level, + test_api_endpoint, + get_server_logs, + export_logs, + get_local_ip, + detect_terminals, + // App Mover Commands + app_mover::prompt_move_to_applications, + app_mover::is_in_applications_folder, + // Terminal Spawn Service Commands + terminal_spawn_service::spawn_terminal_for_session, + terminal_spawn_service::spawn_terminal_with_command, + terminal_spawn_service::spawn_custom_terminal, ]) .setup(|app| { + // Set app handle in managers + let state = app.state::(); + let notification_manager = state.notification_manager.clone(); + let welcome_manager = state.welcome_manager.clone(); + let permissions_manager = state.permissions_manager.clone(); + let update_manager = state.update_manager.clone(); + let app_handle = app.handle().clone(); + let app_handle2 = app.handle().clone(); + let app_handle3 = app.handle().clone(); + let app_handle4 = app.handle().clone(); + let app_handle_for_move = app.handle().clone(); + tauri::async_runtime::spawn(async move { + notification_manager.set_app_handle(app_handle).await; + welcome_manager.set_app_handle(app_handle2).await; + permissions_manager.set_app_handle(app_handle3).await; + update_manager.set_app_handle(app_handle4).await; + + // Load welcome state and check if should show welcome + let _ = welcome_manager.load_state().await; + if welcome_manager.should_show_welcome().await { + let _ = welcome_manager.show_welcome_window().await; + } + + // Check permissions on startup + let _ = permissions_manager.check_all_permissions().await; + + // Check if app should be moved to Applications folder (macOS only) + #[cfg(target_os = "macos")] + { + let app_handle_move = app_handle_for_move.clone(); + tokio::spawn(async move { + // Small delay to let the app fully initialize + tokio::time::sleep(tokio::time::Duration::from_secs(2)).await; + let _ = app_mover::check_and_prompt_move(app_handle_move).await; + }); + } + + // Load updater settings and start auto-check + let _ = update_manager.load_settings().await; + update_manager.clone().start_auto_check().await; + }); + // Create system tray icon using menu-bar-icon.png with template mode let icon_path = app.path().resource_dir().unwrap().join("icons/menu-bar-icon.png"); let tray_icon = if let Ok(icon_data) = std::fs::read(&icon_path) { @@ -370,9 +576,16 @@ async fn start_server_with_monitoring(app_handle: AppHandle) { // Update tray menu with server status update_tray_menu_status(&app_handle, status.port, 0); + + // Show notification + let _ = state.notification_manager.notify_server_status(true, status.port).await; } Err(e) => { tracing::error!("Failed to start server: {}", e); + let _ = state.notification_manager.notify_error( + "Server Start Failed", + &format!("Failed to start server: {}", e) + ).await; } } @@ -416,11 +629,18 @@ async fn start_server_with_monitoring(app_handle: AppHandle) { // Notify frontend of server restart if let Some(window) = monitoring_app.get_webview_window("main") { - let _ = window.emit("server:restarted", status); + let _ = window.emit("server:restarted", &status); } + + // Show notification + let _ = monitoring_state.notification_manager.notify_server_status(true, status.port).await; } Err(e) => { tracing::error!("Failed to restart server: {}", e); + let _ = monitoring_state.notification_manager.notify_error( + "Server Restart Failed", + &format!("Failed to restart server: {}", e) + ).await; } } } @@ -436,11 +656,18 @@ async fn start_server_with_monitoring(app_handle: AppHandle) { // Notify frontend of server restart if let Some(window) = monitoring_app.get_webview_window("main") { - let _ = window.emit("server:restarted", status); + let _ = window.emit("server:restarted", &status); } + + // Show notification + let _ = monitoring_state.notification_manager.notify_server_status(true, status.port).await; } Err(e) => { tracing::error!("Failed to start server: {}", e); + let _ = monitoring_state.notification_manager.notify_error( + "Server Start Failed", + &format!("Failed to start server: {}", e) + ).await; } } } @@ -501,9 +728,9 @@ async fn start_server_internal(state: &AppState) -> Result // Start HTTP server with auth if configured let mut http_server = if settings.dashboard.enable_password && !settings.dashboard.password.is_empty() { let auth_config = crate::auth::AuthConfig::new(true, Some(settings.dashboard.password)); - HttpServer::with_auth(state.terminal_manager.clone(), auth_config) + HttpServer::with_auth(state.terminal_manager.clone(), state.session_monitor.clone(), auth_config) } else { - HttpServer::new(state.terminal_manager.clone()) + HttpServer::new(state.terminal_manager.clone(), state.session_monitor.clone()) }; // Start server with appropriate access mode diff --git a/tauri/src-tauri/src/network_utils.rs b/tauri/src-tauri/src/network_utils.rs new file mode 100644 index 00000000..b9e30daa --- /dev/null +++ b/tauri/src-tauri/src/network_utils.rs @@ -0,0 +1,289 @@ +use serde::{Serialize, Deserialize}; +use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; +use tracing::error; + +/// Network interface information +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct NetworkInterface { + pub name: String, + pub addresses: Vec, + pub is_up: bool, + pub is_loopback: bool, +} + +/// IP address with type information +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct IpAddress { + pub address: String, + pub is_ipv4: bool, + pub is_ipv6: bool, + pub is_private: bool, +} + +/// Network utilities +pub struct NetworkUtils; + +impl NetworkUtils { + /// Get the primary local IP address + pub fn get_local_ip_address() -> Option { + // Try to get network interfaces + let interfaces = Self::get_all_interfaces(); + + // First, try to find a private network address (192.168.x.x, 10.x.x.x, 172.16-31.x.x) + for interface in &interfaces { + if interface.is_loopback || !interface.is_up { + continue; + } + + for addr in &interface.addresses { + if addr.is_ipv4 && addr.is_private { + return Some(addr.address.clone()); + } + } + } + + // If no private address found, return any non-loopback IPv4 + for interface in &interfaces { + if interface.is_loopback || !interface.is_up { + continue; + } + + for addr in &interface.addresses { + if addr.is_ipv4 { + return Some(addr.address.clone()); + } + } + } + + None + } + + /// Get all IP addresses + pub fn get_all_ip_addresses() -> Vec { + let interfaces = Self::get_all_interfaces(); + let mut addresses = Vec::new(); + + for interface in interfaces { + if interface.is_loopback { + continue; + } + + for addr in interface.addresses { + addresses.push(addr.address); + } + } + + addresses + } + + /// Get all network interfaces + pub fn get_all_interfaces() -> Vec { + #[cfg(unix)] + { + Self::get_interfaces_unix() + } + + #[cfg(windows)] + { + Self::get_interfaces_windows() + } + + #[cfg(not(any(unix, windows)))] + { + Vec::new() + } + } + + #[cfg(unix)] + fn get_interfaces_unix() -> Vec { + use nix::ifaddrs::getifaddrs; + + let mut interfaces = std::collections::HashMap::new(); + + match getifaddrs() { + Ok(addrs) => { + for ifaddr in addrs { + let name = ifaddr.interface_name.clone(); + let flags = ifaddr.flags; + + let interface = interfaces.entry(name.clone()).or_insert_with(|| NetworkInterface { + name, + addresses: Vec::new(), + is_up: flags.contains(nix::net::if_::InterfaceFlags::IFF_UP), + is_loopback: flags.contains(nix::net::if_::InterfaceFlags::IFF_LOOPBACK), + }); + + if let Some(address) = ifaddr.address { + if let Some(sockaddr) = address.as_sockaddr_in() { + let ip = IpAddr::V4(Ipv4Addr::from(sockaddr.ip())); + interface.addresses.push(IpAddress { + address: ip.to_string(), + is_ipv4: true, + is_ipv6: false, + is_private: Self::is_private_ip(&ip), + }); + } else if let Some(sockaddr) = address.as_sockaddr_in6() { + let ip = IpAddr::V6(sockaddr.ip()); + interface.addresses.push(IpAddress { + address: ip.to_string(), + is_ipv4: false, + is_ipv6: true, + is_private: Self::is_private_ip(&ip), + }); + } + } + } + } + Err(e) => { + error!("Failed to get network interfaces: {}", e); + } + } + + interfaces.into_values().collect() + } + + #[cfg(windows)] + fn get_interfaces_windows() -> Vec { + use ipconfig::get_adapters; + + let mut interfaces = Vec::new(); + + match get_adapters() { + Ok(adapters) => { + for adapter in adapters { + let mut addresses = Vec::new(); + + // Get IPv4 addresses + for addr in adapter.ipv4_addresses() { + addresses.push(IpAddress { + address: addr.to_string(), + is_ipv4: true, + is_ipv6: false, + is_private: Self::is_private_ipv4(addr), + }); + } + + // Get IPv6 addresses + for addr in adapter.ipv6_addresses() { + addresses.push(IpAddress { + address: addr.to_string(), + is_ipv4: false, + is_ipv6: true, + is_private: Self::is_private_ipv6(addr), + }); + } + + interfaces.push(NetworkInterface { + name: adapter.friendly_name().to_string(), + addresses, + is_up: adapter.oper_status() == ipconfig::OperStatus::IfOperStatusUp, + is_loopback: adapter.if_type() == ipconfig::IfType::SoftwareLoopback, + }); + } + } + Err(e) => { + error!("Failed to get network interfaces: {}", e); + } + } + + interfaces + } + + /// Check if an IP address is private + fn is_private_ip(ip: &IpAddr) -> bool { + match ip { + IpAddr::V4(ipv4) => Self::is_private_ipv4(ipv4), + IpAddr::V6(ipv6) => Self::is_private_ipv6(ipv6), + } + } + + /// Check if an IPv4 address is private + fn is_private_ipv4(ip: &Ipv4Addr) -> bool { + let octets = ip.octets(); + + // 10.0.0.0/8 + if octets[0] == 10 { + return true; + } + + // 172.16.0.0/12 + if octets[0] == 172 && (octets[1] >= 16 && octets[1] <= 31) { + return true; + } + + // 192.168.0.0/16 + if octets[0] == 192 && octets[1] == 168 { + return true; + } + + false + } + + /// Check if an IPv6 address is private + fn is_private_ipv6(ip: &Ipv6Addr) -> bool { + // Check for link-local addresses (fe80::/10) + let segments = ip.segments(); + if segments[0] & 0xffc0 == 0xfe80 { + return true; + } + + // Check for unique local addresses (fc00::/7) + if segments[0] & 0xfe00 == 0xfc00 { + return true; + } + + false + } + + /// Get hostname + pub fn get_hostname() -> Option { + hostname::get() + .ok() + .and_then(|name| name.into_string().ok()) + } + + /// Test network connectivity to a host + pub async fn test_connectivity(host: &str, port: u16) -> bool { + use tokio::net::TcpStream; + use tokio::time::timeout; + use std::time::Duration; + + let addr = format!("{}:{}", host, port); + match timeout(Duration::from_secs(3), TcpStream::connect(&addr)).await { + Ok(Ok(_)) => true, + _ => false, + } + } + + /// Get network statistics + pub fn get_network_stats() -> NetworkStats { + NetworkStats { + hostname: Self::get_hostname(), + primary_ip: Self::get_local_ip_address(), + all_ips: Self::get_all_ip_addresses(), + interface_count: Self::get_all_interfaces().len(), + } + } +} + +/// Network statistics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct NetworkStats { + pub hostname: Option, + pub primary_ip: Option, + pub all_ips: Vec, + pub interface_count: usize, +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_private_ipv4() { + assert!(NetworkUtils::is_private_ipv4(&"10.0.0.1".parse().unwrap())); + assert!(NetworkUtils::is_private_ipv4(&"172.16.0.1".parse().unwrap())); + assert!(NetworkUtils::is_private_ipv4(&"192.168.1.1".parse().unwrap())); + assert!(!NetworkUtils::is_private_ipv4(&"8.8.8.8".parse().unwrap())); + } +} \ No newline at end of file diff --git a/tauri/src-tauri/src/notification_manager.rs b/tauri/src-tauri/src/notification_manager.rs new file mode 100644 index 00000000..21971d79 --- /dev/null +++ b/tauri/src-tauri/src/notification_manager.rs @@ -0,0 +1,383 @@ +use serde::{Serialize, Deserialize}; +use tauri::{AppHandle, Emitter}; +use tauri_plugin_notification::NotificationExt; +use std::sync::Arc; +use tokio::sync::RwLock; +use std::collections::HashMap; +use chrono::{DateTime, Utc}; + +/// Notification type enumeration +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub enum NotificationType { + Info, + Success, + Warning, + Error, + ServerStatus, + UpdateAvailable, + PermissionRequired, + SessionEvent, +} + +/// Notification priority levels +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] +pub enum NotificationPriority { + Low, + Normal, + High, + Critical, +} + +/// Notification structure +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Notification { + pub id: String, + pub notification_type: NotificationType, + pub priority: NotificationPriority, + pub title: String, + pub body: String, + pub timestamp: DateTime, + pub read: bool, + pub actions: Vec, + pub metadata: HashMap, +} + +/// Notification action +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct NotificationAction { + pub id: String, + pub label: String, + pub action_type: String, +} + +/// Notification settings +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct NotificationSettings { + pub enabled: bool, + pub show_in_system: bool, + pub play_sound: bool, + pub enabled_types: HashMap, +} + +impl Default for NotificationSettings { + fn default() -> Self { + let mut enabled_types = HashMap::new(); + enabled_types.insert(NotificationType::Info, true); + enabled_types.insert(NotificationType::Success, true); + enabled_types.insert(NotificationType::Warning, true); + enabled_types.insert(NotificationType::Error, true); + enabled_types.insert(NotificationType::ServerStatus, true); + enabled_types.insert(NotificationType::UpdateAvailable, true); + enabled_types.insert(NotificationType::PermissionRequired, true); + enabled_types.insert(NotificationType::SessionEvent, false); + + Self { + enabled: true, + show_in_system: true, + play_sound: true, + enabled_types, + } + } +} + +/// Notification manager +pub struct NotificationManager { + app_handle: Arc>>, + notifications: Arc>>, + settings: Arc>, + notification_history: Arc>>, + max_history_size: usize, +} + +impl NotificationManager { + /// Create a new notification manager + pub fn new() -> Self { + Self { + app_handle: Arc::new(RwLock::new(None)), + notifications: Arc::new(RwLock::new(HashMap::new())), + settings: Arc::new(RwLock::new(NotificationSettings::default())), + notification_history: Arc::new(RwLock::new(Vec::new())), + max_history_size: 100, + } + } + + /// Set the app handle + pub async fn set_app_handle(&self, app_handle: AppHandle) { + *self.app_handle.write().await = Some(app_handle); + } + + /// Update notification settings + pub async fn update_settings(&self, settings: NotificationSettings) { + *self.settings.write().await = settings; + } + + /// Get notification settings + pub async fn get_settings(&self) -> NotificationSettings { + self.settings.read().await.clone() + } + + /// Show a notification + pub async fn show_notification( + &self, + notification_type: NotificationType, + priority: NotificationPriority, + title: String, + body: String, + actions: Vec, + metadata: HashMap, + ) -> Result { + let settings = self.settings.read().await; + + // Check if notifications are enabled + if !settings.enabled { + return Ok("notifications_disabled".to_string()); + } + + // Check if this notification type is enabled + if let Some(&enabled) = settings.enabled_types.get(¬ification_type) { + if !enabled { + return Ok("notification_type_disabled".to_string()); + } + } + + let notification_id = uuid::Uuid::new_v4().to_string(); + let notification = Notification { + id: notification_id.clone(), + notification_type, + priority, + title: title.clone(), + body: body.clone(), + timestamp: Utc::now(), + read: false, + actions, + metadata, + }; + + // Store notification + self.notifications.write().await.insert(notification_id.clone(), notification.clone()); + + // Add to history + let mut history = self.notification_history.write().await; + history.push(notification.clone()); + + // Trim history if it exceeds max size + if history.len() > self.max_history_size { + let drain_count = history.len() - self.max_history_size; + history.drain(0..drain_count); + } + + // Show system notification if enabled + if settings.show_in_system { + match self.show_system_notification(&title, &body, notification_type).await { + Ok(_) => {}, + Err(e) => { + tracing::error!("Failed to show system notification: {}", e); + } + } + } + + // Emit notification event to frontend + if let Some(app_handle) = self.app_handle.read().await.as_ref() { + app_handle.emit("notification:new", ¬ification) + .map_err(|e| format!("Failed to emit notification event: {}", e))?; + } + + Ok(notification_id) + } + + /// Show a system notification using Tauri's notification plugin + async fn show_system_notification( + &self, + title: &str, + body: &str, + notification_type: NotificationType, + ) -> Result<(), String> { + let app_handle_guard = self.app_handle.read().await; + let app_handle = app_handle_guard.as_ref() + .ok_or_else(|| "App handle not set".to_string())?; + + let mut builder = app_handle.notification() + .builder() + .title(title) + .body(body); + + // Set icon based on notification type + let icon = match notification_type { + NotificationType::Success => Some("✅"), + NotificationType::Warning => Some("⚠️"), + NotificationType::Error => Some("❌"), + NotificationType::UpdateAvailable => Some("🔄"), + NotificationType::PermissionRequired => Some("🔐"), + NotificationType::ServerStatus => Some("🖥️"), + NotificationType::SessionEvent => Some("💻"), + NotificationType::Info => Some("ℹ️"), + }; + + if let Some(icon_str) = icon { + builder = builder.icon(icon_str); + } + + builder.show() + .map_err(|e| format!("Failed to show notification: {}", e))?; + + Ok(()) + } + + /// Mark notification as read + pub async fn mark_as_read(&self, notification_id: &str) -> Result<(), String> { + let mut notifications = self.notifications.write().await; + if let Some(notification) = notifications.get_mut(notification_id) { + notification.read = true; + + // Update history + let mut history = self.notification_history.write().await; + if let Some(hist_notification) = history.iter_mut().find(|n| n.id == notification_id) { + hist_notification.read = true; + } + + Ok(()) + } else { + Err("Notification not found".to_string()) + } + } + + /// Mark all notifications as read + pub async fn mark_all_as_read(&self) -> Result<(), String> { + let mut notifications = self.notifications.write().await; + for notification in notifications.values_mut() { + notification.read = true; + } + + let mut history = self.notification_history.write().await; + for notification in history.iter_mut() { + notification.read = true; + } + + Ok(()) + } + + /// Get all notifications + pub async fn get_notifications(&self) -> Vec { + self.notifications.read().await.values().cloned().collect() + } + + /// Get unread notification count + pub async fn get_unread_count(&self) -> usize { + self.notifications.read().await + .values() + .filter(|n| !n.read) + .count() + } + + /// Get notification history + pub async fn get_history(&self, limit: Option) -> Vec { + let history = self.notification_history.read().await; + match limit { + Some(l) => history.iter().rev().take(l).cloned().collect(), + None => history.clone(), + } + } + + /// Clear notification + pub async fn clear_notification(&self, notification_id: &str) -> Result<(), String> { + self.notifications.write().await.remove(notification_id); + Ok(()) + } + + /// Clear all notifications + pub async fn clear_all_notifications(&self) -> Result<(), String> { + self.notifications.write().await.clear(); + Ok(()) + } + + /// Show server status notification + pub async fn notify_server_status(&self, running: bool, port: u16) -> Result { + let (title, body) = if running { + ( + "Server Started".to_string(), + format!("VibeTunnel server is now running on port {}", port), + ) + } else { + ( + "Server Stopped".to_string(), + "VibeTunnel server has been stopped".to_string(), + ) + }; + + self.show_notification( + NotificationType::ServerStatus, + NotificationPriority::Normal, + title, + body, + vec![], + HashMap::new(), + ).await + } + + /// Show update available notification + pub async fn notify_update_available(&self, version: &str, download_url: &str) -> Result { + let mut metadata = HashMap::new(); + metadata.insert("version".to_string(), serde_json::Value::String(version.to_string())); + metadata.insert("download_url".to_string(), serde_json::Value::String(download_url.to_string())); + + self.show_notification( + NotificationType::UpdateAvailable, + NotificationPriority::High, + "Update Available".to_string(), + format!("VibeTunnel {} is now available. Click to download.", version), + vec![ + NotificationAction { + id: "download".to_string(), + label: "Download".to_string(), + action_type: "open_url".to_string(), + } + ], + metadata, + ).await + } + + /// Show permission required notification + pub async fn notify_permission_required(&self, permission: &str, reason: &str) -> Result { + let mut metadata = HashMap::new(); + metadata.insert("permission".to_string(), serde_json::Value::String(permission.to_string())); + + self.show_notification( + NotificationType::PermissionRequired, + NotificationPriority::High, + "Permission Required".to_string(), + format!("{} permission is required: {}", permission, reason), + vec![ + NotificationAction { + id: "grant".to_string(), + label: "Grant Permission".to_string(), + action_type: "request_permission".to_string(), + } + ], + metadata, + ).await + } + + /// Show error notification + pub async fn notify_error(&self, title: &str, error_message: &str) -> Result { + self.show_notification( + NotificationType::Error, + NotificationPriority::High, + title.to_string(), + error_message.to_string(), + vec![], + HashMap::new(), + ).await + } + + /// Show success notification + pub async fn notify_success(&self, title: &str, message: &str) -> Result { + self.show_notification( + NotificationType::Success, + NotificationPriority::Normal, + title.to_string(), + message.to_string(), + vec![], + HashMap::new(), + ).await + } +} \ No newline at end of file diff --git a/tauri/src-tauri/src/permissions.rs b/tauri/src-tauri/src/permissions.rs new file mode 100644 index 00000000..4063380f --- /dev/null +++ b/tauri/src-tauri/src/permissions.rs @@ -0,0 +1,529 @@ +use serde::{Serialize, Deserialize}; +use std::sync::Arc; +use tokio::sync::RwLock; +use std::collections::HashMap; +use chrono::{DateTime, Utc}; +use tauri::AppHandle; + +/// Permission type enumeration +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub enum PermissionType { + ScreenRecording, + Accessibility, + NetworkAccess, + FileSystemFull, + FileSystemRestricted, + TerminalAccess, + NotificationAccess, + CameraAccess, + MicrophoneAccess, + AutoStart, +} + +/// Permission status +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] +pub enum PermissionStatus { + Granted, + Denied, + NotDetermined, + Restricted, + NotApplicable, +} + +/// Permission information +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PermissionInfo { + pub permission_type: PermissionType, + pub status: PermissionStatus, + pub required: bool, + pub platform_specific: bool, + pub description: String, + pub last_checked: Option>, + pub request_count: u32, +} + +/// Permission request result +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PermissionRequestResult { + pub permission_type: PermissionType, + pub status: PermissionStatus, + pub message: Option, + pub requires_restart: bool, + pub requires_system_settings: bool, +} + +/// Platform-specific permission settings +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PlatformPermissions { + pub macos: HashMap, + pub windows: HashMap, + pub linux: HashMap, +} + +/// Permissions manager +pub struct PermissionsManager { + permissions: Arc>>, + app_handle: Arc>>, + notification_manager: Option>, +} + +impl PermissionsManager { + /// Create a new permissions manager + pub fn new() -> Self { + let manager = Self { + permissions: Arc::new(RwLock::new(HashMap::new())), + app_handle: Arc::new(RwLock::new(None)), + notification_manager: None, + }; + + // Initialize default permissions + tokio::spawn({ + let permissions = manager.permissions.clone(); + async move { + let default_permissions = Self::initialize_permissions(); + *permissions.write().await = default_permissions; + } + }); + + manager + } + + /// Set the app handle + pub async fn set_app_handle(&self, app_handle: AppHandle) { + *self.app_handle.write().await = Some(app_handle); + } + + /// Set the notification manager + pub fn set_notification_manager(&mut self, notification_manager: Arc) { + self.notification_manager = Some(notification_manager); + } + + /// Initialize default permissions based on platform + fn initialize_permissions() -> HashMap { + let mut permissions = HashMap::new(); + + // Get current platform + let platform = std::env::consts::OS; + + match platform { + "macos" => { + permissions.insert(PermissionType::ScreenRecording, PermissionInfo { + permission_type: PermissionType::ScreenRecording, + status: PermissionStatus::NotDetermined, + required: false, + platform_specific: true, + description: "Required for recording terminal sessions with system UI".to_string(), + last_checked: None, + request_count: 0, + }); + + permissions.insert(PermissionType::Accessibility, PermissionInfo { + permission_type: PermissionType::Accessibility, + status: PermissionStatus::NotDetermined, + required: false, + platform_specific: true, + description: "Required for advanced terminal integration features".to_string(), + last_checked: None, + request_count: 0, + }); + + permissions.insert(PermissionType::NotificationAccess, PermissionInfo { + permission_type: PermissionType::NotificationAccess, + status: PermissionStatus::NotDetermined, + required: false, + platform_specific: true, + description: "Required to show system notifications".to_string(), + last_checked: None, + request_count: 0, + }); + } + "windows" => { + permissions.insert(PermissionType::TerminalAccess, PermissionInfo { + permission_type: PermissionType::TerminalAccess, + status: PermissionStatus::NotDetermined, + required: true, + platform_specific: true, + description: "Required to create and manage terminal sessions".to_string(), + last_checked: None, + request_count: 0, + }); + + permissions.insert(PermissionType::AutoStart, PermissionInfo { + permission_type: PermissionType::AutoStart, + status: PermissionStatus::NotDetermined, + required: false, + platform_specific: true, + description: "Required to start VibeTunnel with Windows".to_string(), + last_checked: None, + request_count: 0, + }); + } + "linux" => { + permissions.insert(PermissionType::FileSystemFull, PermissionInfo { + permission_type: PermissionType::FileSystemFull, + status: PermissionStatus::Granted, + required: true, + platform_specific: false, + description: "Required for saving recordings and configurations".to_string(), + last_checked: None, + request_count: 0, + }); + } + _ => {} + } + + // Add common permissions + permissions.insert(PermissionType::NetworkAccess, PermissionInfo { + permission_type: PermissionType::NetworkAccess, + status: PermissionStatus::Granted, + required: true, + platform_specific: false, + description: "Required for web server and remote access features".to_string(), + last_checked: None, + request_count: 0, + }); + + permissions.insert(PermissionType::FileSystemRestricted, PermissionInfo { + permission_type: PermissionType::FileSystemRestricted, + status: PermissionStatus::Granted, + required: true, + platform_specific: false, + description: "Required for basic application functionality".to_string(), + last_checked: None, + request_count: 0, + }); + + permissions + } + + /// Check all permissions + pub async fn check_all_permissions(&self) -> Vec { + let mut permissions = self.permissions.write().await; + + for (permission_type, info) in permissions.iter_mut() { + info.status = self.check_permission_internal(*permission_type).await; + info.last_checked = Some(Utc::now()); + } + + permissions.values().cloned().collect() + } + + /// Check specific permission + pub async fn check_permission(&self, permission_type: PermissionType) -> PermissionStatus { + let status = self.check_permission_internal(permission_type).await; + + // Update stored status + if let Some(info) = self.permissions.write().await.get_mut(&permission_type) { + info.status = status; + info.last_checked = Some(Utc::now()); + } + + status + } + + /// Internal permission checking logic + async fn check_permission_internal(&self, permission_type: PermissionType) -> PermissionStatus { + let platform = std::env::consts::OS; + + match (platform, permission_type) { + #[cfg(target_os = "macos")] + ("macos", PermissionType::ScreenRecording) => { + self.check_screen_recording_permission_macos().await + } + #[cfg(target_os = "macos")] + ("macos", PermissionType::Accessibility) => { + self.check_accessibility_permission_macos().await + } + #[cfg(target_os = "macos")] + ("macos", PermissionType::NotificationAccess) => { + self.check_notification_permission_macos().await + } + #[cfg(target_os = "windows")] + ("windows", PermissionType::TerminalAccess) => { + self.check_terminal_permission_windows().await + } + #[cfg(target_os = "windows")] + ("windows", PermissionType::AutoStart) => { + self.check_auto_start_permission_windows().await + } + _ => PermissionStatus::NotApplicable, + } + } + + /// Request permission + pub async fn request_permission(&self, permission_type: PermissionType) -> Result { + // Update request count + if let Some(info) = self.permissions.write().await.get_mut(&permission_type) { + info.request_count += 1; + } + + let platform = std::env::consts::OS; + + match (platform, permission_type) { + #[cfg(target_os = "macos")] + ("macos", PermissionType::ScreenRecording) => { + self.request_screen_recording_permission_macos().await + } + #[cfg(target_os = "macos")] + ("macos", PermissionType::Accessibility) => { + self.request_accessibility_permission_macos().await + } + #[cfg(target_os = "macos")] + ("macos", PermissionType::NotificationAccess) => { + self.request_notification_permission_macos().await + } + _ => Ok(PermissionRequestResult { + permission_type, + status: PermissionStatus::NotApplicable, + message: Some("Permission not applicable on this platform".to_string()), + requires_restart: false, + requires_system_settings: false, + }), + } + } + + /// Get permission info + pub async fn get_permission_info(&self, permission_type: PermissionType) -> Option { + self.permissions.read().await.get(&permission_type).cloned() + } + + /// Get all permissions + pub async fn get_all_permissions(&self) -> Vec { + self.permissions.read().await.values().cloned().collect() + } + + /// Get required permissions + pub async fn get_required_permissions(&self) -> Vec { + self.permissions.read().await + .values() + .filter(|info| info.required) + .cloned() + .collect() + } + + /// Get missing required permissions + pub async fn get_missing_required_permissions(&self) -> Vec { + self.permissions.read().await + .values() + .filter(|info| info.required && info.status != PermissionStatus::Granted) + .cloned() + .collect() + } + + /// Check if all required permissions are granted + pub async fn all_required_permissions_granted(&self) -> bool { + !self.permissions.read().await + .values() + .any(|info| info.required && info.status != PermissionStatus::Granted) + } + + /// Open system settings for permission + pub async fn open_system_settings(&self, permission_type: PermissionType) -> Result<(), String> { + let platform = std::env::consts::OS; + + match (platform, permission_type) { + #[cfg(target_os = "macos")] + ("macos", PermissionType::ScreenRecording) => { + self.open_screen_recording_settings_macos().await + } + #[cfg(target_os = "macos")] + ("macos", PermissionType::Accessibility) => { + self.open_accessibility_settings_macos().await + } + #[cfg(target_os = "macos")] + ("macos", PermissionType::NotificationAccess) => { + self.open_notification_settings_macos().await + } + #[cfg(target_os = "windows")] + ("windows", PermissionType::AutoStart) => { + self.open_startup_settings_windows().await + } + _ => Err("No system settings available for this permission".to_string()), + } + } + + // Platform-specific implementations + #[cfg(target_os = "macos")] + async fn check_screen_recording_permission_macos(&self) -> PermissionStatus { + // Use CGDisplayStream API to check screen recording permission + use std::process::Command; + + let output = Command::new("osascript") + .arg("-e") + .arg("tell application \"System Events\" to get properties") + .output(); + + match output { + Ok(output) if output.status.success() => PermissionStatus::Granted, + _ => PermissionStatus::NotDetermined, + } + } + + #[cfg(target_os = "macos")] + async fn request_screen_recording_permission_macos(&self) -> Result { + // Show notification about needing to grant permission + if let Some(notification_manager) = &self.notification_manager { + let _ = notification_manager.notify_permission_required( + "Screen Recording", + "VibeTunnel needs screen recording permission to capture terminal sessions" + ).await; + } + + // Open system preferences + let _ = self.open_screen_recording_settings_macos().await; + + Ok(PermissionRequestResult { + permission_type: PermissionType::ScreenRecording, + status: PermissionStatus::NotDetermined, + message: Some("Please grant screen recording permission in System Settings".to_string()), + requires_restart: true, + requires_system_settings: true, + }) + } + + #[cfg(target_os = "macos")] + async fn open_screen_recording_settings_macos(&self) -> Result<(), String> { + use std::process::Command; + + Command::new("open") + .arg("x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture") + .spawn() + .map_err(|e| format!("Failed to open system preferences: {}", e))?; + + Ok(()) + } + + #[cfg(target_os = "macos")] + async fn check_accessibility_permission_macos(&self) -> PermissionStatus { + use std::process::Command; + + let output = Command::new("osascript") + .arg("-e") + .arg("tell application \"System Events\" to get UI elements enabled") + .output(); + + match output { + Ok(output) if output.status.success() => { + let result = String::from_utf8_lossy(&output.stdout); + if result.trim() == "true" { + PermissionStatus::Granted + } else { + PermissionStatus::Denied + } + } + _ => PermissionStatus::NotDetermined, + } + } + + #[cfg(target_os = "macos")] + async fn request_accessibility_permission_macos(&self) -> Result { + let _ = self.open_accessibility_settings_macos().await; + + Ok(PermissionRequestResult { + permission_type: PermissionType::Accessibility, + status: PermissionStatus::NotDetermined, + message: Some("Please grant accessibility permission in System Settings".to_string()), + requires_restart: false, + requires_system_settings: true, + }) + } + + #[cfg(target_os = "macos")] + async fn open_accessibility_settings_macos(&self) -> Result<(), String> { + use std::process::Command; + + Command::new("open") + .arg("x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility") + .spawn() + .map_err(|e| format!("Failed to open system preferences: {}", e))?; + + Ok(()) + } + + #[cfg(target_os = "macos")] + async fn check_notification_permission_macos(&self) -> PermissionStatus { + // For now, assume granted as Tauri handles this + PermissionStatus::Granted + } + + #[cfg(target_os = "macos")] + async fn request_notification_permission_macos(&self) -> Result { + Ok(PermissionRequestResult { + permission_type: PermissionType::NotificationAccess, + status: PermissionStatus::Granted, + message: Some("Notification permission is handled by the system".to_string()), + requires_restart: false, + requires_system_settings: false, + }) + } + + #[cfg(target_os = "macos")] + async fn open_notification_settings_macos(&self) -> Result<(), String> { + use std::process::Command; + + Command::new("open") + .arg("x-apple.systempreferences:com.apple.preference.notifications") + .spawn() + .map_err(|e| format!("Failed to open system preferences: {}", e))?; + + Ok(()) + } + + #[cfg(target_os = "windows")] + async fn check_terminal_permission_windows(&self) -> PermissionStatus { + // On Windows, terminal access is generally granted + PermissionStatus::Granted + } + + #[cfg(target_os = "windows")] + async fn check_auto_start_permission_windows(&self) -> PermissionStatus { + // Check if auto-start is configured + use crate::auto_launch; + + match auto_launch::get_auto_launch().await { + Ok(enabled) => { + if enabled { + PermissionStatus::Granted + } else { + PermissionStatus::Denied + } + } + Err(_) => PermissionStatus::NotDetermined, + } + } + + #[cfg(target_os = "windows")] + async fn open_startup_settings_windows(&self) -> Result<(), String> { + use std::process::Command; + + Command::new("cmd") + .args(&["/c", "start", "ms-settings:startupapps"]) + .spawn() + .map_err(|e| format!("Failed to open startup settings: {}", e))?; + + Ok(()) + } + + /// Show permission required notification + pub async fn notify_permission_required(&self, permission_info: &PermissionInfo) -> Result<(), String> { + if let Some(notification_manager) = &self.notification_manager { + notification_manager.notify_permission_required( + &format!("{:?}", permission_info.permission_type), + &permission_info.description + ).await?; + } + + Ok(()) + } +} + +/// Permission statistics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PermissionStats { + pub total_permissions: usize, + pub granted_permissions: usize, + pub denied_permissions: usize, + pub required_permissions: usize, + pub missing_required: usize, + pub platform: String, +} \ No newline at end of file diff --git a/tauri/src-tauri/src/port_conflict.rs b/tauri/src-tauri/src/port_conflict.rs new file mode 100644 index 00000000..98332aee --- /dev/null +++ b/tauri/src-tauri/src/port_conflict.rs @@ -0,0 +1,470 @@ +use std::process::Command; +use std::net::TcpListener; +use serde::{Serialize, Deserialize}; +use tracing::{info, error}; + +/// Information about a process using a port +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ProcessDetails { + pub pid: u32, + pub name: String, + pub path: Option, + pub parent_pid: Option, +} + +impl ProcessDetails { + /// Check if this is a VibeTunnel process + pub fn is_vibetunnel(&self) -> bool { + if let Some(path) = &self.path { + return path.contains("vibetunnel") || path.contains("VibeTunnel"); + } + self.name.contains("vibetunnel") || self.name.contains("VibeTunnel") + } + + /// Check if this is one of our managed servers + pub fn is_managed_server(&self) -> bool { + self.name == "vibetunnel" || + self.name.contains("node") && self.path.as_ref().map(|p| p.contains("VibeTunnel")).unwrap_or(false) + } +} + +/// Information about a port conflict +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PortConflict { + pub port: u16, + pub process: ProcessDetails, + pub root_process: Option, + pub suggested_action: ConflictAction, + pub alternative_ports: Vec, +} + +/// Suggested action for resolving a port conflict +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum ConflictAction { + KillOurInstance { pid: u32, process_name: String }, + SuggestAlternativePort, + ReportExternalApp { name: String }, +} + +/// Port conflict resolver +pub struct PortConflictResolver; + +impl PortConflictResolver { + /// Check if a port is available + pub async fn is_port_available(port: u16) -> bool { + TcpListener::bind(format!("127.0.0.1:{}", port)).is_ok() + } + + /// Detect what process is using a port + pub async fn detect_conflict(port: u16) -> Option { + // First check if port is actually in use + if Self::is_port_available(port).await { + return None; + } + + // Platform-specific conflict detection + #[cfg(target_os = "macos")] + return Self::detect_conflict_macos(port).await; + + #[cfg(target_os = "linux")] + return Self::detect_conflict_linux(port).await; + + #[cfg(target_os = "windows")] + return Self::detect_conflict_windows(port).await; + } + + #[cfg(target_os = "macos")] + async fn detect_conflict_macos(port: u16) -> Option { + // Use lsof to find process using the port + let output = Command::new("/usr/sbin/lsof") + .args(&["-i", &format!(":{}", port), "-n", "-P", "-F"]) + .output() + .ok()?; + + if !output.status.success() { + return None; + } + + let stdout = String::from_utf8_lossy(&output.stdout); + let process_info = Self::parse_lsof_output(&stdout)?; + + // Get root process + let root_process = Self::find_root_process(&process_info).await; + + // Find alternative ports + let alternatives = Self::find_available_ports(port, 3).await; + + // Determine action + let action = Self::determine_action(&process_info, &root_process); + + Some(PortConflict { + port, + process: process_info, + root_process, + suggested_action: action, + alternative_ports: alternatives, + }) + } + + #[cfg(target_os = "linux")] + async fn detect_conflict_linux(port: u16) -> Option { + // Try lsof first + if let Ok(output) = Command::new("lsof") + .args(&["-i", &format!(":{}", port), "-n", "-P", "-F"]) + .output() + { + if output.status.success() { + let stdout = String::from_utf8_lossy(&output.stdout); + if let Some(process_info) = Self::parse_lsof_output(&stdout) { + let root_process = Self::find_root_process(&process_info).await; + let alternatives = Self::find_available_ports(port, 3).await; + let action = Self::determine_action(&process_info, &root_process); + + return Some(PortConflict { + port, + process: process_info, + root_process, + suggested_action: action, + alternative_ports: alternatives, + }); + } + } + } + + // Fallback to netstat + if let Ok(output) = Command::new("netstat") + .args(&["-tulpn"]) + .output() + { + let stdout = String::from_utf8_lossy(&output.stdout); + // Parse netstat output (simplified) + for line in stdout.lines() { + if line.contains(&format!(":{}", port)) && line.contains("LISTEN") { + // Extract PID from line (format: "tcp ... LISTEN 1234/process") + if let Some(pid_part) = line.split_whitespace().last() { + if let Some(pid_str) = pid_part.split('/').next() { + if let Ok(pid) = pid_str.parse::() { + let name = pid_part.split('/').nth(1).unwrap_or("unknown").to_string(); + let process_info = ProcessDetails { + pid, + name, + path: None, + parent_pid: None, + }; + + let alternatives = Self::find_available_ports(port, 3).await; + let action = Self::determine_action(&process_info, &None); + + return Some(PortConflict { + port, + process: process_info, + root_process: None, + suggested_action: action, + alternative_ports: alternatives, + }); + } + } + } + } + } + } + + None + } + + #[cfg(target_os = "windows")] + async fn detect_conflict_windows(port: u16) -> Option { + // Use netstat to find process using the port + let output = Command::new("netstat") + .args(&["-ano", "-p", "tcp"]) + .output() + .ok()?; + + let stdout = String::from_utf8_lossy(&output.stdout); + + // Parse netstat output to find the PID + for line in stdout.lines() { + if line.contains(&format!(":{}", port)) && line.contains("LISTENING") { + // Extract PID from the last column + if let Some(pid_str) = line.split_whitespace().last() { + if let Ok(pid) = pid_str.parse::() { + // Get process name using tasklist + if let Ok(tasklist_output) = Command::new("tasklist") + .args(&["/FI", &format!("PID eq {}", pid), "/FO", "CSV", "/NH"]) + .output() + { + let tasklist_stdout = String::from_utf8_lossy(&tasklist_output.stdout); + if let Some(line) = tasklist_stdout.lines().next() { + let parts: Vec<&str> = line.split(',').collect(); + if parts.len() > 0 { + let name = parts[0].trim_matches('"').to_string(); + let process_info = ProcessDetails { + pid, + name, + path: None, + parent_pid: None, + }; + + let alternatives = Self::find_available_ports(port, 3).await; + let action = Self::determine_action(&process_info, &None); + + return Some(PortConflict { + port, + process: process_info, + root_process: None, + suggested_action: action, + alternative_ports: alternatives, + }); + } + } + } + } + } + } + } + + None + } + + /// Parse lsof output + fn parse_lsof_output(output: &str) -> Option { + let mut pid: Option = None; + let mut name: Option = None; + let mut ppid: Option = None; + + // Parse lsof field output format + for line in output.lines() { + if line.starts_with('p') { + pid = line[1..].parse().ok(); + } else if line.starts_with('c') { + name = Some(line[1..].to_string()); + } else if line.starts_with('R') { + ppid = line[1..].parse().ok(); + } + } + + if let (Some(pid), Some(name)) = (pid, name) { + // Get additional process info + let path = Self::get_process_path(pid); + + Some(ProcessDetails { + pid, + name, + path, + parent_pid: ppid, + }) + } else { + None + } + } + + /// Get process path + fn get_process_path(pid: u32) -> Option { + #[cfg(unix)] + { + if let Ok(output) = Command::new("ps") + .args(&["-p", &pid.to_string(), "-o", "comm="]) + .output() + { + let path = String::from_utf8_lossy(&output.stdout) + .trim() + .to_string(); + if !path.is_empty() { + return Some(path); + } + } + } + + None + } + + /// Find root process + async fn find_root_process(process: &ProcessDetails) -> Option { + let mut current = process.clone(); + let mut visited = std::collections::HashSet::new(); + + while let Some(parent_pid) = current.parent_pid { + if parent_pid <= 1 || visited.contains(&parent_pid) { + break; + } + visited.insert(current.pid); + + // Get parent process info + if let Some(parent_info) = Self::get_process_info(parent_pid).await { + // If parent is VibeTunnel, it's our root + if parent_info.is_vibetunnel() { + return Some(parent_info); + } + current = parent_info; + } else { + break; + } + } + + None + } + + /// Get process info by PID + async fn get_process_info(pid: u32) -> Option { + #[cfg(unix)] + { + if let Ok(output) = Command::new("ps") + .args(&["-p", &pid.to_string(), "-o", "pid=,ppid=,comm="]) + .output() + { + let stdout = String::from_utf8_lossy(&output.stdout); + let parts: Vec<&str> = stdout.trim().split_whitespace().collect(); + + if parts.len() >= 3 { + let pid = parts[0].parse().ok()?; + let ppid = parts[1].parse().ok(); + let name = parts[2..].join(" "); + let path = Self::get_process_path(pid); + + return Some(ProcessDetails { + pid, + name, + path, + parent_pid: ppid, + }); + } + } + } + + #[cfg(windows)] + { + // Windows implementation would use WMI or similar + // For now, return None + } + + None + } + + /// Find available ports near a given port + async fn find_available_ports(near_port: u16, count: usize) -> Vec { + let mut available_ports = Vec::new(); + let start = near_port.saturating_sub(10).max(1024); + let end = near_port.saturating_add(100).min(65535); + + for port in start..=end { + if port != near_port && Self::is_port_available(port).await { + available_ports.push(port); + if available_ports.len() >= count { + break; + } + } + } + + available_ports + } + + /// Determine action for conflict resolution + fn determine_action(process: &ProcessDetails, root_process: &Option) -> ConflictAction { + // If it's our managed server, kill it + if process.is_managed_server() { + return ConflictAction::KillOurInstance { + pid: process.pid, + process_name: process.name.clone(), + }; + } + + // If root process is VibeTunnel, kill the whole app + if let Some(root) = root_process { + if root.is_vibetunnel() { + return ConflictAction::KillOurInstance { + pid: root.pid, + process_name: root.name.clone(), + }; + } + } + + // If the process itself is VibeTunnel + if process.is_vibetunnel() { + return ConflictAction::KillOurInstance { + pid: process.pid, + process_name: process.name.clone(), + }; + } + + // Otherwise, it's an external app + ConflictAction::ReportExternalApp { + name: process.name.clone(), + } + } + + /// Resolve a port conflict + pub async fn resolve_conflict(conflict: &PortConflict) -> Result<(), String> { + match &conflict.suggested_action { + ConflictAction::KillOurInstance { pid, process_name } => { + info!("Killing conflicting process: {} (PID: {})", process_name, pid); + + #[cfg(unix)] + { + let output = Command::new("kill") + .args(&["-9", &pid.to_string()]) + .output() + .map_err(|e| format!("Failed to execute kill command: {}", e))?; + + if !output.status.success() { + return Err(format!("Failed to kill process {}", pid)); + } + } + + #[cfg(windows)] + { + let output = Command::new("taskkill") + .args(&["/F", "/PID", &pid.to_string()]) + .output() + .map_err(|e| format!("Failed to execute taskkill command: {}", e))?; + + if !output.status.success() { + return Err(format!("Failed to kill process {}", pid)); + } + } + + // Wait for port to be released + tokio::time::sleep(tokio::time::Duration::from_millis(500)).await; + Ok(()) + } + ConflictAction::SuggestAlternativePort | ConflictAction::ReportExternalApp { .. } => { + // These require user action + Err("This conflict requires user action to resolve".to_string()) + } + } + } + + /// Force kill a process + pub async fn force_kill_process(conflict: &PortConflict) -> Result<(), String> { + info!("Force killing process: {} (PID: {})", conflict.process.name, conflict.process.pid); + + #[cfg(unix)] + { + let output = Command::new("kill") + .args(&["-9", &conflict.process.pid.to_string()]) + .output() + .map_err(|e| format!("Failed to execute kill command: {}", e))?; + + if !output.status.success() { + error!("Failed to kill process with regular permissions"); + return Err(format!("Failed to kill process {}", conflict.process.pid)); + } + } + + #[cfg(windows)] + { + let output = Command::new("taskkill") + .args(&["/F", "/PID", &conflict.process.pid.to_string()]) + .output() + .map_err(|e| format!("Failed to execute taskkill command: {}", e))?; + + if !output.status.success() { + return Err(format!("Failed to kill process {}", conflict.process.pid)); + } + } + + // Wait for port to be released + tokio::time::sleep(tokio::time::Duration::from_millis(500)).await; + Ok(()) + } +} \ No newline at end of file diff --git a/tauri/src-tauri/src/server.rs b/tauri/src-tauri/src/server.rs index 3622c4a5..503f258d 100644 --- a/tauri/src-tauri/src/server.rs +++ b/tauri/src-tauri/src/server.rs @@ -23,17 +23,20 @@ use std::fs; use crate::terminal::TerminalManager; use crate::auth::{AuthConfig, auth_middleware, check_auth, login}; +use crate::session_monitor::SessionMonitor; // Combined app state for Axum #[derive(Clone)] struct AppState { terminal_manager: Arc, auth_config: Arc, + session_monitor: Arc, } pub struct HttpServer { terminal_manager: Arc, auth_config: Arc, + session_monitor: Arc, port: u16, shutdown_tx: Option>, handle: Option>, @@ -97,20 +100,22 @@ impl HttpServer { self.port } - pub fn new(terminal_manager: Arc) -> Self { + pub fn new(terminal_manager: Arc, session_monitor: Arc) -> Self { Self { terminal_manager, auth_config: Arc::new(AuthConfig::new(false, None)), + session_monitor, port: 0, shutdown_tx: None, handle: None, } } - pub fn with_auth(terminal_manager: Arc, auth_config: AuthConfig) -> Self { + pub fn with_auth(terminal_manager: Arc, session_monitor: Arc, auth_config: AuthConfig) -> Self { Self { terminal_manager, auth_config: Arc::new(auth_config), + session_monitor, port: 0, shutdown_tx: None, handle: None, @@ -203,6 +208,7 @@ impl HttpServer { let app_state = AppState { terminal_manager: self.terminal_manager.clone(), auth_config: self.auth_config.clone(), + session_monitor: self.session_monitor.clone(), }; // Don't serve static files in Tauri - the frontend is served by Tauri itself @@ -223,8 +229,16 @@ impl HttpServer { .route("/api/sessions/:id/input", post(send_input)) .route("/api/sessions/:id/stream", get(terminal_stream)) .route("/api/sessions/:id/snapshot", get(get_snapshot)) + .route("/api/sessions/events", get(session_events_stream)) .route("/api/ws/:id", get(terminal_websocket)) .route("/api/fs/browse", get(browse_directory)) + .route("/api/fs/info", get(crate::fs_api::get_file_info)) + .route("/api/fs/read", get(crate::fs_api::read_file)) + .route("/api/fs/write", post(crate::fs_api::write_file)) + .route("/api/fs/delete", delete(crate::fs_api::delete_file)) + .route("/api/fs/move", post(crate::fs_api::move_file)) + .route("/api/fs/copy", post(crate::fs_api::copy_file)) + .route("/api/fs/search", get(crate::fs_api::search_files)) .route("/api/mkdir", post(create_directory)) .route("/api/cleanup-exited", post(cleanup_exited)) .layer(middleware::from_fn_with_state( @@ -456,7 +470,7 @@ async fn terminal_stream( // Poll for terminal output let mut poll_interval = interval(Duration::from_millis(10)); - let mut exit_sent = false; + let exit_sent = false; loop { poll_interval.tick().await; @@ -469,7 +483,7 @@ async fn terminal_stream( yield Ok(Event::default() .event("data") .data(exit_event)); - exit_sent = true; + let _ = exit_sent; // Prevent duplicate exit events break; } @@ -495,7 +509,6 @@ async fn terminal_stream( yield Ok(Event::default() .event("data") .data(exit_event)); - exit_sent = true; } break; } @@ -506,6 +519,26 @@ async fn terminal_stream( Ok(Sse::new(stream).keep_alive(KeepAlive::default())) } +// Session monitoring SSE endpoint +async fn session_events_stream( + AxumState(state): AxumState, +) -> Result>>, StatusCode> { + // Clone the session monitor Arc to avoid lifetime issues + let session_monitor = state.session_monitor.clone(); + + // Start monitoring if not already started + session_monitor.start_monitoring().await; + + // Create SSE stream from session monitor + let stream = session_monitor.create_sse_stream() + .map(|data| { + data.map(|json| Event::default().data(json)) + .map_err(|_| unreachable!()) + }); + + Ok(Sse::new(stream).keep_alive(KeepAlive::default())) +} + // File system endpoints async fn browse_directory( Query(params): Query, diff --git a/tauri/src-tauri/src/session_monitor.rs b/tauri/src-tauri/src/session_monitor.rs new file mode 100644 index 00000000..7a853dc5 --- /dev/null +++ b/tauri/src-tauri/src/session_monitor.rs @@ -0,0 +1,267 @@ +use std::collections::HashMap; +use std::sync::Arc; +use tokio::sync::{RwLock, mpsc}; +use tokio::time::{interval, Duration}; +use chrono::Utc; +use serde::{Serialize, Deserialize}; +use serde_json; +use uuid::Uuid; + +/// Information about a terminal session +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SessionInfo { + pub id: String, + pub name: String, + pub pid: u32, + pub rows: u16, + pub cols: u16, + pub created_at: String, + pub last_activity: String, + pub is_active: bool, + pub client_count: usize, +} + +/// Session state change event +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum SessionEvent { + SessionCreated { + session: SessionInfo, + }, + SessionUpdated { + session: SessionInfo, + }, + SessionClosed { + id: String, + }, + SessionActivity { + id: String, + timestamp: String, + }, +} + +/// Session monitoring service +pub struct SessionMonitor { + sessions: Arc>>, + event_subscribers: Arc>>>, + terminal_manager: Arc, +} + +impl SessionMonitor { + pub fn new(terminal_manager: Arc) -> Self { + Self { + sessions: Arc::new(RwLock::new(HashMap::new())), + event_subscribers: Arc::new(RwLock::new(HashMap::new())), + terminal_manager, + } + } + + /// Start monitoring sessions + pub async fn start_monitoring(&self) { + let sessions = self.sessions.clone(); + let subscribers = self.event_subscribers.clone(); + let terminal_manager = self.terminal_manager.clone(); + + tokio::spawn(async move { + let mut monitor_interval = interval(Duration::from_secs(5)); + + loop { + monitor_interval.tick().await; + + // Get current sessions from terminal manager + let current_sessions = terminal_manager.list_sessions().await; + let mut sessions_map = sessions.write().await; + let mut updated_sessions = HashMap::new(); + + // Check for new or updated sessions + for session in current_sessions { + let session_info = SessionInfo { + id: session.id.clone(), + name: session.name.clone(), + pid: session.pid, + rows: session.rows, + cols: session.cols, + created_at: session.created_at.clone(), + last_activity: Utc::now().to_rfc3339(), + is_active: true, + client_count: 0, // TODO: Track actual client count + }; + + // Check if this is a new session + if !sessions_map.contains_key(&session.id) { + // Broadcast session created event + Self::broadcast_event( + &subscribers, + SessionEvent::SessionCreated { + session: session_info.clone() + } + ).await; + } else { + // Check if session was updated + if let Some(existing) = sessions_map.get(&session.id) { + if existing.rows != session_info.rows || + existing.cols != session_info.cols { + // Broadcast session updated event + Self::broadcast_event( + &subscribers, + SessionEvent::SessionUpdated { + session: session_info.clone() + } + ).await; + } + } + } + + updated_sessions.insert(session.id.clone(), session_info); + } + + // Check for closed sessions + let closed_sessions: Vec = sessions_map.keys() + .filter(|id| !updated_sessions.contains_key(*id)) + .cloned() + .collect(); + + for session_id in closed_sessions { + // Broadcast session closed event + Self::broadcast_event( + &subscribers, + SessionEvent::SessionClosed { + id: session_id.clone() + } + ).await; + } + + // Update the sessions map + *sessions_map = updated_sessions; + } + }); + } + + /// Subscribe to session events + pub async fn subscribe(&self) -> mpsc::UnboundedReceiver { + let (tx, rx) = mpsc::unbounded_channel(); + let subscriber_id = Uuid::new_v4().to_string(); + + self.event_subscribers.write().await.insert(subscriber_id, tx); + + rx + } + + /// Unsubscribe from session events + pub async fn unsubscribe(&self, subscriber_id: &str) { + self.event_subscribers.write().await.remove(subscriber_id); + } + + /// Get current session count + pub async fn get_session_count(&self) -> usize { + self.sessions.read().await.len() + } + + /// Get all sessions + pub async fn get_sessions(&self) -> Vec { + self.sessions.read().await.values().cloned().collect() + } + + /// Get a specific session + pub async fn get_session(&self, id: &str) -> Option { + self.sessions.read().await.get(id).cloned() + } + + /// Notify activity for a session + pub async fn notify_activity(&self, session_id: &str) { + if let Some(session) = self.sessions.write().await.get_mut(session_id) { + session.last_activity = Utc::now().to_rfc3339(); + + // Broadcast activity event + Self::broadcast_event( + &self.event_subscribers, + SessionEvent::SessionActivity { + id: session_id.to_string(), + timestamp: session.last_activity.clone(), + } + ).await; + } + } + + /// Broadcast an event to all subscribers + async fn broadcast_event( + subscribers: &Arc>>>, + event: SessionEvent, + ) { + let subscribers_read = subscribers.read().await; + let mut dead_subscribers = Vec::new(); + + for (id, tx) in subscribers_read.iter() { + if tx.send(event.clone()).is_err() { + dead_subscribers.push(id.clone()); + } + } + + // Remove dead subscribers + if !dead_subscribers.is_empty() { + drop(subscribers_read); + let mut subscribers_write = subscribers.write().await; + for id in dead_subscribers { + subscribers_write.remove(&id); + } + } + } + + /// Create an SSE stream for session events + pub fn create_sse_stream(self: Arc) -> impl futures::Stream> + Send + 'static { + async_stream::stream! { + // Subscribe to events + let (tx, mut rx) = mpsc::unbounded_channel(); + let subscriber_id = Uuid::new_v4().to_string(); + self.event_subscribers.write().await.insert(subscriber_id.clone(), tx); + + // Send initial sessions + let session_list = self.sessions.read().await.values().cloned().collect::>(); + let initial_event = serde_json::json!({ + "type": "initial", + "sessions": session_list, + "count": session_list.len() + }); + + yield Ok(format!("data: {}\n\n", initial_event)); + + // Send events as they come + while let Some(event) = rx.recv().await { + if let Ok(json) = serde_json::to_string(&event) { + yield Ok(format!("data: {}\n\n", json)); + } + } + + // Clean up subscriber on drop + self.event_subscribers.write().await.remove(&subscriber_id); + } + } +} + +/// Session statistics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SessionStats { + pub total_sessions: usize, + pub active_sessions: usize, + pub total_clients: usize, + pub uptime_seconds: u64, + pub sessions_created_today: usize, +} + +impl SessionMonitor { + /// Get session statistics + pub async fn get_stats(&self) -> SessionStats { + let sessions = self.sessions.read().await; + let active_sessions = sessions.values().filter(|s| s.is_active).count(); + let total_clients = sessions.values().map(|s| s.client_count).sum(); + + // TODO: Track more detailed statistics + SessionStats { + total_sessions: sessions.len(), + active_sessions, + total_clients, + uptime_seconds: 0, // TODO: Track uptime + sessions_created_today: 0, // TODO: Track daily stats + } + } +} \ No newline at end of file diff --git a/tauri/src-tauri/src/settings.rs b/tauri/src-tauri/src/settings.rs index ef0c6cae..b0ed52fd 100644 --- a/tauri/src-tauri/src/settings.rs +++ b/tauri/src-tauri/src/settings.rs @@ -3,6 +3,7 @@ use std::path::PathBuf; use directories::ProjectDirs; use tauri::{Manager, State}; use crate::state::AppState; +use std::collections::HashMap; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct GeneralSettings { @@ -10,6 +11,10 @@ pub struct GeneralSettings { pub show_dock_icon: bool, pub default_terminal: String, pub default_shell: String, + pub show_welcome_on_startup: Option, + pub theme: Option, + pub language: Option, + pub check_updates_automatically: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] @@ -19,6 +24,10 @@ pub struct DashboardSettings { pub password: String, pub access_mode: String, pub auto_cleanup: bool, + pub session_limit: Option, + pub idle_timeout_minutes: Option, + pub enable_cors: Option, + pub allowed_origins: Option>, } #[derive(Debug, Serialize, Deserialize, Clone)] @@ -28,6 +37,135 @@ pub struct AdvancedSettings { pub log_level: String, pub session_timeout: u32, pub ngrok_auth_token: Option, + pub ngrok_region: Option, + pub ngrok_subdomain: Option, + pub enable_telemetry: Option, + pub experimental_features: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct RecordingSettings { + pub enabled: bool, + pub output_directory: Option, + pub format: String, + pub include_timing: bool, + pub compress_output: bool, + pub max_file_size_mb: Option, + pub auto_save: bool, + pub filename_template: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct TTYForwardSettings { + pub enabled: bool, + pub default_port: u16, + pub bind_address: String, + pub max_connections: u32, + pub buffer_size: u32, + pub keep_alive: bool, + pub authentication: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct MonitoringSettings { + pub enabled: bool, + pub collect_metrics: bool, + pub metric_interval_seconds: u32, + pub max_history_size: u32, + pub alert_on_high_cpu: bool, + pub alert_on_high_memory: bool, + pub cpu_threshold_percent: Option, + pub memory_threshold_percent: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct NetworkSettings { + pub preferred_interface: Option, + pub enable_ipv6: bool, + pub dns_servers: Option>, + pub proxy_settings: Option, + pub connection_timeout_seconds: u32, + pub retry_attempts: u32, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct ProxySettings { + pub enabled: bool, + pub proxy_type: String, + pub host: String, + pub port: u16, + pub username: Option, + pub password: Option, + pub bypass_list: Option>, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct PortSettings { + pub auto_resolve_conflicts: bool, + pub preferred_port_range_start: u16, + pub preferred_port_range_end: u16, + pub excluded_ports: Option>, + pub conflict_resolution_strategy: String, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct NotificationSettings { + pub enabled: bool, + pub show_in_system: bool, + pub play_sound: bool, + pub notification_types: HashMap, + pub do_not_disturb_enabled: Option, + pub do_not_disturb_start: Option, + pub do_not_disturb_end: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct TerminalIntegrationSettings { + pub enabled_terminals: HashMap, + pub terminal_configs: HashMap, + pub default_terminal_override: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct TerminalConfig { + pub path: Option, + pub args: Option>, + pub env: Option>, + pub working_directory: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct UpdateSettings { + pub channel: String, + pub check_frequency: String, + pub auto_download: bool, + pub auto_install: bool, + pub show_release_notes: bool, + pub include_pre_releases: bool, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct SecuritySettings { + pub enable_encryption: bool, + pub encryption_algorithm: Option, + pub require_authentication: bool, + pub session_token_expiry_hours: Option, + pub allowed_ip_addresses: Option>, + pub blocked_ip_addresses: Option>, + pub rate_limiting_enabled: bool, + pub rate_limit_requests_per_minute: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct DebugSettings { + pub enable_debug_menu: bool, + pub show_performance_stats: bool, + pub enable_verbose_logging: bool, + pub log_to_file: bool, + pub log_file_path: Option, + pub max_log_file_size_mb: Option, + pub enable_dev_tools: bool, + pub show_internal_errors: bool, } #[derive(Debug, Serialize, Deserialize, Clone)] @@ -35,16 +173,47 @@ pub struct Settings { pub general: GeneralSettings, pub dashboard: DashboardSettings, pub advanced: AdvancedSettings, + pub recording: Option, + pub tty_forward: Option, + pub monitoring: Option, + pub network: Option, + pub port: Option, + pub notifications: Option, + pub terminal_integrations: Option, + pub updates: Option, + pub security: Option, + pub debug: Option, } impl Default for Settings { fn default() -> Self { + let mut default_notification_types = HashMap::new(); + default_notification_types.insert("info".to_string(), true); + default_notification_types.insert("success".to_string(), true); + default_notification_types.insert("warning".to_string(), true); + default_notification_types.insert("error".to_string(), true); + default_notification_types.insert("server_status".to_string(), true); + default_notification_types.insert("update_available".to_string(), true); + + let mut enabled_terminals = HashMap::new(); + enabled_terminals.insert("Terminal".to_string(), true); + enabled_terminals.insert("iTerm2".to_string(), true); + enabled_terminals.insert("Hyper".to_string(), true); + enabled_terminals.insert("Alacritty".to_string(), true); + enabled_terminals.insert("Warp".to_string(), true); + enabled_terminals.insert("Ghostty".to_string(), false); + enabled_terminals.insert("WezTerm".to_string(), false); + Self { general: GeneralSettings { launch_at_login: false, show_dock_icon: true, default_terminal: "system".to_string(), default_shell: "default".to_string(), + show_welcome_on_startup: Some(true), + theme: Some("auto".to_string()), + language: Some("en".to_string()), + check_updates_automatically: Some(true), }, dashboard: DashboardSettings { server_port: 4020, @@ -52,6 +221,10 @@ impl Default for Settings { password: String::new(), access_mode: "localhost".to_string(), auto_cleanup: true, + session_limit: Some(10), + idle_timeout_minutes: Some(30), + enable_cors: Some(true), + allowed_origins: Some(vec!["*".to_string()]), }, advanced: AdvancedSettings { server_mode: "rust".to_string(), @@ -59,7 +232,97 @@ impl Default for Settings { log_level: "info".to_string(), session_timeout: 0, ngrok_auth_token: None, + ngrok_region: Some("us".to_string()), + ngrok_subdomain: None, + enable_telemetry: Some(false), + experimental_features: Some(false), }, + recording: Some(RecordingSettings { + enabled: true, + output_directory: None, + format: "asciinema".to_string(), + include_timing: true, + compress_output: false, + max_file_size_mb: Some(100), + auto_save: false, + filename_template: Some("vibetunnel_%Y%m%d_%H%M%S".to_string()), + }), + tty_forward: Some(TTYForwardSettings { + enabled: false, + default_port: 8022, + bind_address: "127.0.0.1".to_string(), + max_connections: 5, + buffer_size: 4096, + keep_alive: true, + authentication: None, + }), + monitoring: Some(MonitoringSettings { + enabled: true, + collect_metrics: true, + metric_interval_seconds: 5, + max_history_size: 1000, + alert_on_high_cpu: false, + alert_on_high_memory: false, + cpu_threshold_percent: Some(80), + memory_threshold_percent: Some(80), + }), + network: Some(NetworkSettings { + preferred_interface: None, + enable_ipv6: true, + dns_servers: None, + proxy_settings: None, + connection_timeout_seconds: 30, + retry_attempts: 3, + }), + port: Some(PortSettings { + auto_resolve_conflicts: true, + preferred_port_range_start: 4000, + preferred_port_range_end: 5000, + excluded_ports: None, + conflict_resolution_strategy: "increment".to_string(), + }), + notifications: Some(NotificationSettings { + enabled: true, + show_in_system: true, + play_sound: true, + notification_types: default_notification_types, + do_not_disturb_enabled: Some(false), + do_not_disturb_start: None, + do_not_disturb_end: None, + }), + terminal_integrations: Some(TerminalIntegrationSettings { + enabled_terminals, + terminal_configs: HashMap::new(), + default_terminal_override: None, + }), + updates: Some(UpdateSettings { + channel: "stable".to_string(), + check_frequency: "weekly".to_string(), + auto_download: false, + auto_install: false, + show_release_notes: true, + include_pre_releases: false, + }), + security: Some(SecuritySettings { + enable_encryption: false, + encryption_algorithm: Some("aes-256-gcm".to_string()), + require_authentication: false, + session_token_expiry_hours: Some(24), + allowed_ip_addresses: None, + blocked_ip_addresses: None, + rate_limiting_enabled: false, + rate_limit_requests_per_minute: Some(60), + }), + debug: Some(DebugSettings { + enable_debug_menu: false, + show_performance_stats: false, + enable_verbose_logging: false, + log_to_file: false, + log_file_path: None, + max_log_file_size_mb: Some(50), + enable_dev_tools: false, + show_internal_errors: false, + }), } } } diff --git a/tauri/src-tauri/src/state.rs b/tauri/src-tauri/src/state.rs index 05a388e5..5930447b 100644 --- a/tauri/src-tauri/src/state.rs +++ b/tauri/src-tauri/src/state.rs @@ -4,6 +4,19 @@ use std::sync::atomic::AtomicBool; use crate::terminal::TerminalManager; use crate::server::HttpServer; use crate::ngrok::NgrokManager; +use crate::cast::CastManager; +use crate::tty_forward::TTYForwardManager; +use crate::session_monitor::SessionMonitor; +use crate::notification_manager::NotificationManager; +use crate::welcome::WelcomeManager; +use crate::permissions::PermissionsManager; +use crate::updater::UpdateManager; +use crate::backend_manager::BackendManager; +use crate::debug_features::DebugFeaturesManager; +use crate::api_testing::APITestingManager; +use crate::auth_cache::AuthCacheManager; +use crate::terminal_integrations::TerminalIntegrationsManager; +use crate::terminal_spawn_service::TerminalSpawnService; #[derive(Clone)] pub struct AppState { @@ -12,16 +25,78 @@ pub struct AppState { pub ngrok_manager: Arc, pub server_monitoring: Arc, pub server_target_port: Arc>>, + pub cast_manager: Arc, + pub tty_forward_manager: Arc, + pub session_monitor: Arc, + pub notification_manager: Arc, + pub welcome_manager: Arc, + pub permissions_manager: Arc, + pub update_manager: Arc, + pub backend_manager: Arc, + pub debug_features_manager: Arc, + pub api_testing_manager: Arc, + pub auth_cache_manager: Arc, + pub terminal_integrations_manager: Arc, + pub terminal_spawn_service: Arc, } impl AppState { pub fn new() -> Self { + let mut terminal_manager = TerminalManager::new(); + let cast_manager = Arc::new(CastManager::new()); + + // Connect terminal manager to cast manager + terminal_manager.set_cast_manager(cast_manager.clone()); + + let terminal_manager = Arc::new(terminal_manager); + let session_monitor = Arc::new(SessionMonitor::new(terminal_manager.clone())); + let notification_manager = Arc::new(NotificationManager::new()); + let mut permissions_manager = PermissionsManager::new(); + permissions_manager.set_notification_manager(notification_manager.clone()); + + let current_version = env!("CARGO_PKG_VERSION").to_string(); + let mut update_manager = UpdateManager::new(current_version); + update_manager.set_notification_manager(notification_manager.clone()); + + let mut backend_manager = BackendManager::new(); + backend_manager.set_notification_manager(notification_manager.clone()); + + let mut debug_features_manager = DebugFeaturesManager::new(); + debug_features_manager.set_notification_manager(notification_manager.clone()); + + let mut api_testing_manager = APITestingManager::new(); + api_testing_manager.set_notification_manager(notification_manager.clone()); + + let mut auth_cache_manager = AuthCacheManager::new(); + auth_cache_manager.set_notification_manager(notification_manager.clone()); + + let mut terminal_integrations_manager = TerminalIntegrationsManager::new(); + terminal_integrations_manager.set_notification_manager(notification_manager.clone()); + + let terminal_integrations_manager = Arc::new(terminal_integrations_manager); + let terminal_spawn_service = Arc::new(TerminalSpawnService::new( + terminal_integrations_manager.clone() + )); + Self { - terminal_manager: Arc::new(TerminalManager::new()), + terminal_manager, http_server: Arc::new(RwLock::new(None)), ngrok_manager: Arc::new(NgrokManager::new()), server_monitoring: Arc::new(AtomicBool::new(true)), server_target_port: Arc::new(RwLock::new(None)), + cast_manager, + tty_forward_manager: Arc::new(TTYForwardManager::new()), + session_monitor, + notification_manager, + welcome_manager: Arc::new(WelcomeManager::new()), + permissions_manager: Arc::new(permissions_manager), + update_manager: Arc::new(update_manager), + backend_manager: Arc::new(backend_manager), + debug_features_manager: Arc::new(debug_features_manager), + api_testing_manager: Arc::new(api_testing_manager), + auth_cache_manager: Arc::new(auth_cache_manager), + terminal_integrations_manager, + terminal_spawn_service, } } } \ No newline at end of file diff --git a/tauri/src-tauri/src/terminal.rs b/tauri/src-tauri/src/terminal.rs index 58e491cc..87235d68 100644 --- a/tauri/src-tauri/src/terminal.rs +++ b/tauri/src-tauri/src/terminal.rs @@ -7,10 +7,12 @@ use bytes::Bytes; use uuid::Uuid; use chrono::Utc; use tracing::{info, error, debug}; +use crate::cast::CastManager; #[derive(Clone)] pub struct TerminalManager { sessions: Arc>>>>, + cast_manager: Option>, } pub struct TerminalSession { @@ -33,9 +35,14 @@ impl TerminalManager { pub fn new() -> Self { Self { sessions: Arc::new(RwLock::new(HashMap::new())), + cast_manager: None, } } + pub fn set_cast_manager(&mut self, cast_manager: Arc) { + self.cast_manager = Some(cast_manager); + } + pub async fn create_session( &self, name: String, @@ -107,6 +114,8 @@ impl TerminalManager { // Start reader thread let output_tx_clone = output_tx.clone(); + let cast_manager_clone = self.cast_manager.clone(); + let session_id_clone = id.clone(); let reader_thread = std::thread::spawn(move || { let mut reader = reader; let mut buffer = [0u8; 4096]; @@ -119,6 +128,17 @@ impl TerminalManager { } Ok(n) => { let data = Bytes::copy_from_slice(&buffer[..n]); + + // Record output to cast file if recording + if let Some(cast_manager) = &cast_manager_clone { + let cm = cast_manager.clone(); + let sid = session_id_clone.clone(); + let data_clone = data.clone(); + tokio::spawn(async move { + let _ = cm.add_output(&sid, &data_clone).await; + }); + } + if output_tx_clone.send(data).is_err() { debug!("Output channel closed"); break; @@ -201,6 +221,11 @@ impl TerminalManager { let mut sessions = self.sessions.write().await; if let Some(session_arc) = sessions.remove(id) { + // Stop recording if active + if let Some(cast_manager) = &self.cast_manager { + let _ = cast_manager.remove_recorder(id).await; + } + // Session will be dropped when it goes out of scope drop(session_arc); @@ -228,6 +253,14 @@ impl TerminalManager { session.rows = rows; session.cols = cols; + // Update recorder dimensions if recording + if let Some(cast_manager) = &self.cast_manager { + if let Some(recorder) = cast_manager.get_recorder(id).await { + let mut rec = recorder.lock().await; + rec.resize(cols, rows).await; + } + } + debug!("Resized terminal {} to {}x{}", id, cols, rows); Ok(()) } else { @@ -239,6 +272,11 @@ impl TerminalManager { if let Some(session_arc) = self.get_session(id).await { let mut session = session_arc.write().await; + // Record input to cast file if recording + if let Some(cast_manager) = &self.cast_manager { + let _ = cast_manager.add_input(id, data).await; + } + session.writer .write_all(data) .map_err(|e| format!("Failed to write to PTY: {}", e))?; diff --git a/tauri/src-tauri/src/terminal_integrations.rs b/tauri/src-tauri/src/terminal_integrations.rs new file mode 100644 index 00000000..a8eb1bf6 --- /dev/null +++ b/tauri/src-tauri/src/terminal_integrations.rs @@ -0,0 +1,678 @@ +use serde::{Serialize, Deserialize}; +use std::sync::Arc; +use tokio::sync::RwLock; +use std::collections::HashMap; +use std::path::PathBuf; +use std::process::Command; + +/// Terminal emulator type +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub enum TerminalEmulator { + SystemDefault, + Terminal, // macOS Terminal.app + ITerm2, // iTerm2 + Hyper, // Hyper + Alacritty, // Alacritty + Kitty, // Kitty + WezTerm, // WezTerm + Ghostty, // Ghostty + WindowsTerminal, // Windows Terminal + ConEmu, // ConEmu + Cmder, // Cmder + Gnome, // GNOME Terminal + Konsole, // KDE Konsole + Xterm, // XTerm + Custom, // Custom terminal +} + +impl TerminalEmulator { + pub fn display_name(&self) -> &str { + match self { + TerminalEmulator::SystemDefault => "System Default", + TerminalEmulator::Terminal => "Terminal", + TerminalEmulator::ITerm2 => "iTerm2", + TerminalEmulator::Hyper => "Hyper", + TerminalEmulator::Alacritty => "Alacritty", + TerminalEmulator::Kitty => "Kitty", + TerminalEmulator::WezTerm => "WezTerm", + TerminalEmulator::Ghostty => "Ghostty", + TerminalEmulator::WindowsTerminal => "Windows Terminal", + TerminalEmulator::ConEmu => "ConEmu", + TerminalEmulator::Cmder => "Cmder", + TerminalEmulator::Gnome => "GNOME Terminal", + TerminalEmulator::Konsole => "Konsole", + TerminalEmulator::Xterm => "XTerm", + TerminalEmulator::Custom => "Custom", + } + } +} + +/// Terminal integration configuration +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TerminalConfig { + pub emulator: TerminalEmulator, + pub name: String, + pub executable_path: PathBuf, + pub args_template: Vec, + pub env_vars: HashMap, + pub features: TerminalFeatures, + pub platform: Vec, // ["macos", "windows", "linux"] +} + +/// Terminal features +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TerminalFeatures { + pub supports_tabs: bool, + pub supports_splits: bool, + pub supports_profiles: bool, + pub supports_themes: bool, + pub supports_scripting: bool, + pub supports_url_scheme: bool, + pub supports_remote_control: bool, +} + +/// Terminal launch options +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TerminalLaunchOptions { + pub working_directory: Option, + pub command: Option, + pub args: Vec, + pub env_vars: HashMap, + pub title: Option, + pub profile: Option, + pub tab: bool, + pub split: Option, + pub window_size: Option<(u32, u32)>, +} + +/// Split direction +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +pub enum SplitDirection { + Horizontal, + Vertical, +} + +/// Terminal integration info +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TerminalIntegrationInfo { + pub emulator: TerminalEmulator, + pub installed: bool, + pub version: Option, + pub path: Option, + pub is_default: bool, + pub config: Option, +} + +/// Terminal URL scheme +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TerminalURLScheme { + pub scheme: String, + pub supports_ssh: bool, + pub supports_local: bool, + pub template: String, +} + +/// Terminal integrations manager +pub struct TerminalIntegrationsManager { + configs: Arc>>, + detected_terminals: Arc>>, + default_terminal: Arc>, + url_schemes: Arc>>, + notification_manager: Option>, +} + +impl TerminalIntegrationsManager { + /// Create a new terminal integrations manager + pub fn new() -> Self { + let manager = Self { + configs: Arc::new(RwLock::new(HashMap::new())), + detected_terminals: Arc::new(RwLock::new(HashMap::new())), + default_terminal: Arc::new(RwLock::new(TerminalEmulator::SystemDefault)), + url_schemes: Arc::new(RwLock::new(HashMap::new())), + notification_manager: None, + }; + + // Initialize default configurations + tokio::spawn({ + let configs = manager.configs.clone(); + let url_schemes = manager.url_schemes.clone(); + async move { + let default_configs = Self::initialize_default_configs(); + *configs.write().await = default_configs; + + let default_schemes = Self::initialize_url_schemes(); + *url_schemes.write().await = default_schemes; + } + }); + + manager + } + + /// Set the notification manager + pub fn set_notification_manager(&mut self, notification_manager: Arc) { + self.notification_manager = Some(notification_manager); + } + + /// Initialize default terminal configurations + fn initialize_default_configs() -> HashMap { + let mut configs = HashMap::new(); + + // WezTerm configuration + configs.insert(TerminalEmulator::WezTerm, TerminalConfig { + emulator: TerminalEmulator::WezTerm, + name: "WezTerm".to_string(), + executable_path: PathBuf::from("/Applications/WezTerm.app/Contents/MacOS/wezterm"), + args_template: vec![ + "start".to_string(), + "--cwd".to_string(), + "{working_directory}".to_string(), + "--".to_string(), + "{command}".to_string(), + "{args}".to_string(), + ], + env_vars: HashMap::new(), + features: TerminalFeatures { + supports_tabs: true, + supports_splits: true, + supports_profiles: true, + supports_themes: true, + supports_scripting: true, + supports_url_scheme: false, + supports_remote_control: true, + }, + platform: vec!["macos".to_string(), "windows".to_string(), "linux".to_string()], + }); + + // Ghostty configuration + configs.insert(TerminalEmulator::Ghostty, TerminalConfig { + emulator: TerminalEmulator::Ghostty, + name: "Ghostty".to_string(), + executable_path: PathBuf::from("/Applications/Ghostty.app/Contents/MacOS/ghostty"), + args_template: vec![ + "--working-directory".to_string(), + "{working_directory}".to_string(), + "--command".to_string(), + "{command}".to_string(), + "{args}".to_string(), + ], + env_vars: HashMap::new(), + features: TerminalFeatures { + supports_tabs: true, + supports_splits: true, + supports_profiles: true, + supports_themes: true, + supports_scripting: false, + supports_url_scheme: false, + supports_remote_control: false, + }, + platform: vec!["macos".to_string()], + }); + + // iTerm2 configuration + configs.insert(TerminalEmulator::ITerm2, TerminalConfig { + emulator: TerminalEmulator::ITerm2, + name: "iTerm2".to_string(), + executable_path: PathBuf::from("/Applications/iTerm.app/Contents/MacOS/iTerm2"), + args_template: vec![], + env_vars: HashMap::new(), + features: TerminalFeatures { + supports_tabs: true, + supports_splits: true, + supports_profiles: true, + supports_themes: true, + supports_scripting: true, + supports_url_scheme: true, + supports_remote_control: true, + }, + platform: vec!["macos".to_string()], + }); + + // Alacritty configuration + configs.insert(TerminalEmulator::Alacritty, TerminalConfig { + emulator: TerminalEmulator::Alacritty, + name: "Alacritty".to_string(), + executable_path: PathBuf::from("/Applications/Alacritty.app/Contents/MacOS/alacritty"), + args_template: vec![ + "--working-directory".to_string(), + "{working_directory}".to_string(), + "-e".to_string(), + "{command}".to_string(), + "{args}".to_string(), + ], + env_vars: HashMap::new(), + features: TerminalFeatures { + supports_tabs: false, + supports_splits: false, + supports_profiles: true, + supports_themes: true, + supports_scripting: false, + supports_url_scheme: false, + supports_remote_control: false, + }, + platform: vec!["macos".to_string(), "windows".to_string(), "linux".to_string()], + }); + + // Kitty configuration + configs.insert(TerminalEmulator::Kitty, TerminalConfig { + emulator: TerminalEmulator::Kitty, + name: "Kitty".to_string(), + executable_path: PathBuf::from("/Applications/kitty.app/Contents/MacOS/kitty"), + args_template: vec![ + "--directory".to_string(), + "{working_directory}".to_string(), + "{command}".to_string(), + "{args}".to_string(), + ], + env_vars: HashMap::new(), + features: TerminalFeatures { + supports_tabs: true, + supports_splits: true, + supports_profiles: true, + supports_themes: true, + supports_scripting: true, + supports_url_scheme: false, + supports_remote_control: true, + }, + platform: vec!["macos".to_string(), "linux".to_string()], + }); + + configs + } + + /// Initialize URL schemes + fn initialize_url_schemes() -> HashMap { + let mut schemes = HashMap::new(); + + schemes.insert(TerminalEmulator::ITerm2, TerminalURLScheme { + scheme: "iterm2".to_string(), + supports_ssh: true, + supports_local: true, + template: "iterm2://ssh/{user}@{host}:{port}".to_string(), + }); + + schemes + } + + /// Detect installed terminals + pub async fn detect_terminals(&self) -> Vec { + let mut detected = Vec::new(); + let configs = self.configs.read().await; + + for (emulator, config) in configs.iter() { + let info = self.check_terminal_installation(emulator, config).await; + if info.installed { + detected.push(info.clone()); + self.detected_terminals.write().await.insert(*emulator, info); + } + } + + // Check system default + let default_info = self.detect_system_default().await; + detected.insert(0, default_info); + + detected + } + + /// Check if a specific terminal is installed + async fn check_terminal_installation(&self, emulator: &TerminalEmulator, config: &TerminalConfig) -> TerminalIntegrationInfo { + let installed = config.executable_path.exists(); + let version = if installed { + self.get_terminal_version(emulator, &config.executable_path).await + } else { + None + }; + + TerminalIntegrationInfo { + emulator: *emulator, + installed, + version, + path: if installed { Some(config.executable_path.clone()) } else { None }, + is_default: false, + config: if installed { Some(config.clone()) } else { None }, + } + } + + /// Get terminal version + async fn get_terminal_version(&self, emulator: &TerminalEmulator, path: &PathBuf) -> Option { + match emulator { + TerminalEmulator::WezTerm => { + Command::new(path) + .arg("--version") + .output() + .ok() + .and_then(|output| String::from_utf8(output.stdout).ok()) + .map(|v| v.trim().to_string()) + } + TerminalEmulator::Alacritty => { + Command::new(path) + .arg("--version") + .output() + .ok() + .and_then(|output| String::from_utf8(output.stdout).ok()) + .map(|v| v.trim().to_string()) + } + _ => None, + } + } + + /// Detect system default terminal + async fn detect_system_default(&self) -> TerminalIntegrationInfo { + #[cfg(target_os = "macos")] + { + TerminalIntegrationInfo { + emulator: TerminalEmulator::Terminal, + installed: true, + version: None, + path: Some(PathBuf::from("/System/Applications/Utilities/Terminal.app")), + is_default: true, + config: None, + } + } + + #[cfg(target_os = "windows")] + { + TerminalIntegrationInfo { + emulator: TerminalEmulator::WindowsTerminal, + installed: true, + version: None, + path: None, + is_default: true, + config: None, + } + } + + #[cfg(target_os = "linux")] + { + TerminalIntegrationInfo { + emulator: TerminalEmulator::Gnome, + installed: true, + version: None, + path: None, + is_default: true, + config: None, + } + } + } + + /// Get default terminal + pub async fn get_default_terminal(&self) -> TerminalEmulator { + *self.default_terminal.read().await + } + + /// Set default terminal + pub async fn set_default_terminal(&self, emulator: TerminalEmulator) -> Result<(), String> { + // Check if terminal is installed + let detected = self.detected_terminals.read().await; + if emulator != TerminalEmulator::SystemDefault && !detected.contains_key(&emulator) { + return Err("Terminal not installed".to_string()); + } + + *self.default_terminal.write().await = emulator; + + // Notify user + if let Some(notification_manager) = &self.notification_manager { + let _ = notification_manager.notify_success( + "Default Terminal Changed", + &format!("Default terminal set to {}", emulator.display_name()) + ).await; + } + + Ok(()) + } + + /// Launch terminal + pub async fn launch_terminal( + &self, + emulator: Option, + options: TerminalLaunchOptions, + ) -> Result<(), String> { + let emulator = emulator.unwrap_or(*self.default_terminal.read().await); + + match emulator { + TerminalEmulator::SystemDefault => self.launch_system_terminal(options).await, + _ => self.launch_specific_terminal(emulator, options).await, + } + } + + /// Launch system terminal + async fn launch_system_terminal(&self, options: TerminalLaunchOptions) -> Result<(), String> { + #[cfg(target_os = "macos")] + { + self.launch_macos_terminal(options).await + } + + #[cfg(target_os = "windows")] + { + self.launch_windows_terminal(options).await + } + + #[cfg(target_os = "linux")] + { + self.launch_linux_terminal(options).await + } + } + + /// Launch specific terminal + async fn launch_specific_terminal( + &self, + emulator: TerminalEmulator, + options: TerminalLaunchOptions, + ) -> Result<(), String> { + let configs = self.configs.read().await; + let config = configs.get(&emulator) + .ok_or_else(|| "Terminal configuration not found".to_string())?; + + let mut command = Command::new(&config.executable_path); + + // Build command arguments + for arg_template in &config.args_template { + let arg = self.replace_template_variables(arg_template, &options); + if !arg.is_empty() { + command.arg(arg); + } + } + + // Set environment variables + for (key, value) in &config.env_vars { + command.env(key, value); + } + for (key, value) in &options.env_vars { + command.env(key, value); + } + + // Set working directory + if let Some(cwd) = &options.working_directory { + command.current_dir(cwd); + } + + // Launch terminal + command.spawn() + .map_err(|e| format!("Failed to launch terminal: {}", e))?; + + Ok(()) + } + + /// Launch macOS terminal + #[cfg(target_os = "macos")] + async fn launch_macos_terminal(&self, options: TerminalLaunchOptions) -> Result<(), String> { + use std::process::Command; + + let mut script = String::from("tell application \"Terminal\"\n"); + script.push_str(" activate\n"); + + if options.tab { + script.push_str(" tell application \"System Events\" to keystroke \"t\" using command down\n"); + } + + if let Some(cwd) = options.working_directory { + script.push_str(&format!(" do script \"cd '{}'\" in front window\n", cwd.display())); + } + + if let Some(command) = options.command { + let full_command = if options.args.is_empty() { + command + } else { + format!("{} {}", command, options.args.join(" ")) + }; + script.push_str(&format!(" do script \"{}\" in front window\n", full_command)); + } + + script.push_str("end tell\n"); + + Command::new("osascript") + .arg("-e") + .arg(script) + .spawn() + .map_err(|e| format!("Failed to launch Terminal: {}", e))?; + + Ok(()) + } + + /// Launch Windows terminal + #[cfg(target_os = "windows")] + async fn launch_windows_terminal(&self, options: TerminalLaunchOptions) -> Result<(), String> { + use std::process::Command; + + let mut command = Command::new("wt.exe"); + + if let Some(cwd) = options.working_directory { + command.args(&["-d", cwd.to_str().unwrap_or(".")]); + } + + if options.tab { + command.arg("new-tab"); + } + + if let Some(cmd) = options.command { + command.args(&["--", &cmd]); + for arg in options.args { + command.arg(arg); + } + } + + command.spawn() + .map_err(|e| format!("Failed to launch Windows Terminal: {}", e))?; + + Ok(()) + } + + /// Launch Linux terminal + #[cfg(target_os = "linux")] + async fn launch_linux_terminal(&self, options: TerminalLaunchOptions) -> Result<(), String> { + use std::process::Command; + + // Try common terminal emulators + let terminals = ["gnome-terminal", "konsole", "xfce4-terminal", "xterm"]; + + for terminal in &terminals { + if let Ok(output) = Command::new("which").arg(terminal).output() { + if output.status.success() { + let mut command = Command::new(terminal); + + if let Some(cwd) = &options.working_directory { + match *terminal { + "gnome-terminal" => { + command.arg("--working-directory").arg(cwd); + } + "konsole" => { + command.arg("--workdir").arg(cwd); + } + _ => {} + } + } + + if let Some(cmd) = &options.command { + match *terminal { + "gnome-terminal" => { + command.arg("--").arg(cmd); + } + "konsole" => { + command.arg("-e").arg(cmd); + } + _ => { + command.arg("-e").arg(cmd); + } + } + for arg in &options.args { + command.arg(arg); + } + } + + return command.spawn() + .map_err(|e| format!("Failed to launch terminal: {}", e)) + .map(|_| ()); + } + } + } + + Err("No suitable terminal emulator found".to_string()) + } + + /// Create SSH URL + pub async fn create_ssh_url( + &self, + emulator: TerminalEmulator, + user: &str, + host: &str, + port: u16, + ) -> Option { + let schemes = self.url_schemes.read().await; + schemes.get(&emulator).map(|scheme| { + scheme.template + .replace("{user}", user) + .replace("{host}", host) + .replace("{port}", &port.to_string()) + }) + } + + /// Get terminal configuration + pub async fn get_terminal_config(&self, emulator: TerminalEmulator) -> Option { + self.configs.read().await.get(&emulator).cloned() + } + + /// Update terminal configuration + pub async fn update_terminal_config(&self, config: TerminalConfig) { + self.configs.write().await.insert(config.emulator, config); + } + + /// List detected terminals + pub async fn list_detected_terminals(&self) -> Vec { + self.detected_terminals.read().await.values().cloned().collect() + } + + // Helper methods + fn replace_template_variables(&self, template: &str, options: &TerminalLaunchOptions) -> String { + let mut result = template.to_string(); + + if let Some(cwd) = &options.working_directory { + result = result.replace("{working_directory}", cwd.to_str().unwrap_or("")); + } + + if let Some(command) = &options.command { + result = result.replace("{command}", command); + } + + result = result.replace("{args}", &options.args.join(" ")); + + if let Some(title) = &options.title { + result = result.replace("{title}", title); + } + + // Remove empty placeholders + result = result.replace("{working_directory}", ""); + result = result.replace("{command}", ""); + result = result.replace("{args}", ""); + result = result.replace("{title}", ""); + + result.trim().to_string() + } +} + +/// Terminal integration statistics +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TerminalIntegrationStats { + pub total_terminals: usize, + pub installed_terminals: usize, + pub default_terminal: TerminalEmulator, + pub terminals_by_platform: HashMap>, +} \ No newline at end of file diff --git a/tauri/src-tauri/src/terminal_spawn_service.rs b/tauri/src-tauri/src/terminal_spawn_service.rs new file mode 100644 index 00000000..a489d091 --- /dev/null +++ b/tauri/src-tauri/src/terminal_spawn_service.rs @@ -0,0 +1,182 @@ +use tokio::sync::{mpsc, Mutex}; +use std::sync::Arc; +use serde::{Deserialize, Serialize}; +use tauri::Manager; + +/// Request to spawn a terminal +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TerminalSpawnRequest { + pub session_id: String, + pub terminal_type: Option, + pub command: Option, + pub working_directory: Option, + pub environment: Option>, +} + +/// Response from terminal spawn +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TerminalSpawnResponse { + pub success: bool, + pub error: Option, + pub terminal_pid: Option, +} + +/// Terminal Spawn Service - manages background terminal spawning +pub struct TerminalSpawnService { + request_tx: mpsc::Sender, + terminal_integrations_manager: Arc, +} + +impl TerminalSpawnService { + pub fn new( + terminal_integrations_manager: Arc, + ) -> Self { + let (tx, mut rx) = mpsc::channel::(100); + + let manager_clone = terminal_integrations_manager.clone(); + + // Spawn background worker to handle terminal spawn requests + tokio::spawn(async move { + while let Some(request) = rx.recv().await { + let manager = manager_clone.clone(); + tokio::spawn(async move { + let _ = Self::handle_spawn_request(request, manager).await; + }); + } + }); + + Self { + request_tx: tx, + terminal_integrations_manager, + } + } + + /// Queue a terminal spawn request + pub async fn spawn_terminal(&self, request: TerminalSpawnRequest) -> Result<(), String> { + self.request_tx.send(request).await + .map_err(|e| format!("Failed to queue terminal spawn: {}", e)) + } + + /// Handle a spawn request + async fn handle_spawn_request( + request: TerminalSpawnRequest, + terminal_integrations_manager: Arc, + ) -> Result { + // Determine which terminal to use + let terminal_type = if let Some(terminal) = &request.terminal_type { + // Parse terminal type + match terminal.as_str() { + "Terminal" => crate::terminal_integrations::TerminalEmulator::Terminal, + "iTerm2" => crate::terminal_integrations::TerminalEmulator::ITerm2, + "Hyper" => crate::terminal_integrations::TerminalEmulator::Hyper, + "Alacritty" => crate::terminal_integrations::TerminalEmulator::Alacritty, + "Warp" => crate::terminal_integrations::TerminalEmulator::Warp, + "Kitty" => crate::terminal_integrations::TerminalEmulator::Kitty, + "WezTerm" => crate::terminal_integrations::TerminalEmulator::WezTerm, + "Ghostty" => crate::terminal_integrations::TerminalEmulator::Ghostty, + _ => terminal_integrations_manager.get_default_terminal().await, + } + } else { + terminal_integrations_manager.get_default_terminal().await + }; + + // Build launch options + let mut launch_options = crate::terminal_integrations::TerminalLaunchOptions { + command: request.command, + working_directory: request.working_directory, + environment: request.environment, + title: Some(format!("VibeTunnel Session {}", request.session_id)), + wait_for_exit: Some(false), + new_window: Some(true), + tab_mode: Some(false), + profile: None, + }; + + // If no command specified, create a VibeTunnel session command + if launch_options.command.is_none() { + // Get server status to build the correct URL + let port = 4020; // Default port, should get from settings + launch_options.command = Some(format!("vt connect localhost:{}/{}", port, request.session_id)); + } + + // Launch the terminal + match terminal_integrations_manager.launch_terminal(Some(terminal_type), launch_options).await { + Ok(_) => Ok(TerminalSpawnResponse { + success: true, + error: None, + terminal_pid: None, // We don't track PIDs in the current implementation + }), + Err(e) => Ok(TerminalSpawnResponse { + success: false, + error: Some(e), + terminal_pid: None, + }), + } + } + + /// Spawn terminal for a specific session + pub async fn spawn_terminal_for_session( + &self, + session_id: String, + terminal_type: Option, + ) -> Result<(), String> { + let request = TerminalSpawnRequest { + session_id, + terminal_type, + command: None, + working_directory: None, + environment: None, + }; + + self.spawn_terminal(request).await + } + + /// Spawn terminal with custom command + pub async fn spawn_terminal_with_command( + &self, + command: String, + working_directory: Option, + terminal_type: Option, + ) -> Result<(), String> { + let request = TerminalSpawnRequest { + session_id: uuid::Uuid::new_v4().to_string(), + terminal_type, + command: Some(command), + working_directory, + environment: None, + }; + + self.spawn_terminal(request).await + } +} + +// Commands for Tauri +#[tauri::command] +pub async fn spawn_terminal_for_session( + session_id: String, + terminal_type: Option, + state: tauri::State<'_, crate::state::AppState>, +) -> Result<(), String> { + let spawn_service = &state.terminal_spawn_service; + spawn_service.spawn_terminal_for_session(session_id, terminal_type).await +} + +#[tauri::command] +pub async fn spawn_terminal_with_command( + command: String, + working_directory: Option, + terminal_type: Option, + state: tauri::State<'_, crate::state::AppState>, +) -> Result<(), String> { + let spawn_service = &state.terminal_spawn_service; + spawn_service.spawn_terminal_with_command(command, working_directory, terminal_type).await +} + +#[tauri::command] +pub async fn spawn_custom_terminal( + request: TerminalSpawnRequest, + state: tauri::State<'_, crate::state::AppState>, +) -> Result<(), String> { + let spawn_service = &state.terminal_spawn_service; + spawn_service.spawn_terminal(request).await +} \ No newline at end of file diff --git a/tauri/src-tauri/src/tty_forward.rs b/tauri/src-tauri/src/tty_forward.rs new file mode 100644 index 00000000..fbef241f --- /dev/null +++ b/tauri/src-tauri/src/tty_forward.rs @@ -0,0 +1,377 @@ +use std::collections::HashMap; +use std::sync::Arc; +use tokio::sync::{mpsc, RwLock, oneshot}; +use std::io::{Read, Write}; +use tokio::net::{TcpListener, TcpStream}; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use portable_pty::{CommandBuilder, PtySize, native_pty_system}; +use uuid::Uuid; +use tracing::{info, error}; +use bytes::Bytes; + +/// Represents a forwarded TTY session +pub struct ForwardedSession { + pub id: String, + pub local_port: u16, + pub remote_host: String, + pub remote_port: u16, + pub connected: bool, + pub client_count: usize, +} + +/// Manages TTY forwarding sessions +pub struct TTYForwardManager { + sessions: Arc>>, + listeners: Arc>>>, +} + +impl TTYForwardManager { + pub fn new() -> Self { + Self { + sessions: Arc::new(RwLock::new(HashMap::new())), + listeners: Arc::new(RwLock::new(HashMap::new())), + } + } + + /// Start a TTY forwarding session + pub async fn start_forward( + &self, + local_port: u16, + remote_host: String, + remote_port: u16, + shell: Option, + ) -> Result { + let id = Uuid::new_v4().to_string(); + + // Create TCP listener + let listener = TcpListener::bind(format!("127.0.0.1:{}", local_port)) + .await + .map_err(|e| format!("Failed to bind to port {}: {}", local_port, e))?; + + let actual_port = listener.local_addr() + .map_err(|e| format!("Failed to get local address: {}", e))? + .port(); + + // Create session + let session = ForwardedSession { + id: id.clone(), + local_port: actual_port, + remote_host: remote_host.clone(), + remote_port, + connected: false, + client_count: 0, + }; + + // Store session + self.sessions.write().await.insert(id.clone(), session); + + // Create shutdown channel + let (shutdown_tx, shutdown_rx) = oneshot::channel(); + self.listeners.write().await.insert(id.clone(), shutdown_tx); + + // Start listening for connections + let sessions = self.sessions.clone(); + let session_id = id.clone(); + let shell = shell.unwrap_or_else(|| { + std::env::var("SHELL").unwrap_or_else(|_| { + if cfg!(target_os = "windows") { + "cmd.exe".to_string() + } else { + "/bin/bash".to_string() + } + }) + }); + + tokio::spawn(async move { + Self::accept_connections( + listener, + sessions, + session_id, + remote_host, + remote_port, + shell, + shutdown_rx, + ).await; + }); + + info!("Started TTY forward on port {} (ID: {})", actual_port, id); + Ok(id) + } + + /// Accept incoming connections and forward them + async fn accept_connections( + listener: TcpListener, + sessions: Arc>>, + session_id: String, + _remote_host: String, + _remote_port: u16, + shell: String, + mut shutdown_rx: oneshot::Receiver<()>, + ) { + loop { + tokio::select! { + accept_result = listener.accept() => { + match accept_result { + Ok((stream, addr)) => { + info!("New TTY forward connection from {}", addr); + + // Update client count + if let Some(session) = sessions.write().await.get_mut(&session_id) { + session.client_count += 1; + session.connected = true; + } + + // Handle the connection + let sessions_clone = sessions.clone(); + let session_id_clone = session_id.clone(); + let shell_clone = shell.clone(); + + tokio::spawn(async move { + if let Err(e) = Self::handle_client( + stream, + sessions_clone.clone(), + session_id_clone.clone(), + shell_clone, + ).await { + error!("Error handling TTY forward client: {}", e); + } + + // Decrease client count + if let Some(session) = sessions_clone.write().await.get_mut(&session_id_clone) { + session.client_count = session.client_count.saturating_sub(1); + if session.client_count == 0 { + session.connected = false; + } + } + }); + } + Err(e) => { + error!("Failed to accept connection: {}", e); + } + } + } + _ = &mut shutdown_rx => { + info!("Shutting down TTY forward listener for session {}", session_id); + break; + } + } + } + } + + /// Handle a single client connection + async fn handle_client( + stream: TcpStream, + _sessions: Arc>>, + _session_id: String, + shell: String, + ) -> Result<(), String> { + // Set up PTY + let pty_system = native_pty_system(); + let pty_pair = pty_system + .openpty(PtySize { + rows: 24, + cols: 80, + pixel_width: 0, + pixel_height: 0, + }) + .map_err(|e| format!("Failed to open PTY: {}", e))?; + + // Spawn shell + let cmd = CommandBuilder::new(&shell); + let child = pty_pair + .slave + .spawn_command(cmd) + .map_err(|e| format!("Failed to spawn shell: {}", e))?; + + // Get reader and writer + let mut reader = pty_pair + .master + .try_clone_reader() + .map_err(|e| format!("Failed to clone reader: {}", e))?; + + let mut writer = pty_pair + .master + .take_writer() + .map_err(|e| format!("Failed to take writer: {}", e))?; + + // Create channels for bidirectional communication + let (tx_to_pty, mut rx_from_tcp) = mpsc::unbounded_channel::(); + let (tx_to_tcp, mut rx_from_pty) = mpsc::unbounded_channel::(); + + // Split the TCP stream + let (mut tcp_reader, mut tcp_writer) = stream.into_split(); + + // Task 1: Read from TCP and write to PTY + let tcp_to_pty = tokio::spawn(async move { + let mut tcp_buf = [0u8; 4096]; + loop { + match tcp_reader.read(&mut tcp_buf).await { + Ok(0) => break, // Connection closed + Ok(n) => { + let data = Bytes::copy_from_slice(&tcp_buf[..n]); + if tx_to_pty.send(data).is_err() { + break; + } + } + Err(e) => { + error!("Error reading from TCP: {}", e); + break; + } + } + } + }); + + // Task 2: Read from PTY and write to TCP + let pty_to_tcp = tokio::spawn(async move { + while let Some(data) = rx_from_pty.recv().await { + if tcp_writer.write_all(&data).await.is_err() { + break; + } + if tcp_writer.flush().await.is_err() { + break; + } + } + }); + + // Task 3: PTY reader thread + let reader_handle = std::thread::spawn(move || { + let mut buffer = [0u8; 4096]; + loop { + match reader.read(&mut buffer) { + Ok(0) => break, + Ok(n) => { + let data = Bytes::copy_from_slice(&buffer[..n]); + // Since we're in a thread, we can't use blocking_send on unbounded channel + // We'll use a different approach + if tx_to_tcp.send(data).is_err() { + break; + } + } + Err(e) => { + error!("Error reading from PTY: {}", e); + break; + } + } + } + }); + + // Task 4: PTY writer thread + let writer_handle = std::thread::spawn(move || { + // Create a blocking runtime for the thread + let rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap(); + + rt.block_on(async { + while let Some(data) = rx_from_tcp.recv().await { + if writer.write_all(&data).is_err() { + break; + } + if writer.flush().is_err() { + break; + } + } + }); + }); + + // Wait for any task to complete + tokio::select! { + _ = tcp_to_pty => {}, + _ = pty_to_tcp => {}, + } + + // Clean up + drop(child); + let _ = reader_handle.join(); + let _ = writer_handle.join(); + + Ok(()) + } + + /// Stop a TTY forwarding session + pub async fn stop_forward(&self, id: &str) -> Result<(), String> { + // Remove session + self.sessions.write().await.remove(id); + + // Send shutdown signal + if let Some(shutdown_tx) = self.listeners.write().await.remove(id) { + let _ = shutdown_tx.send(()); + } + + info!("Stopped TTY forward session: {}", id); + Ok(()) + } + + /// List all active forwarding sessions + pub async fn list_forwards(&self) -> Vec { + self.sessions.read().await + .values() + .map(|s| ForwardedSession { + id: s.id.clone(), + local_port: s.local_port, + remote_host: s.remote_host.clone(), + remote_port: s.remote_port, + connected: s.connected, + client_count: s.client_count, + }) + .collect() + } + + /// Get a specific forwarding session + pub async fn get_forward(&self, id: &str) -> Option { + self.sessions.read().await.get(id).map(|s| ForwardedSession { + id: s.id.clone(), + local_port: s.local_port, + remote_host: s.remote_host.clone(), + remote_port: s.remote_port, + connected: s.connected, + client_count: s.client_count, + }) + } +} + +/// HTTP endpoint handler for terminal spawn requests +pub async fn handle_terminal_spawn( + port: u16, + _shell: Option, +) -> Result<(), String> { + // Listen for HTTP requests on the specified port + let listener = TcpListener::bind(format!("127.0.0.1:{}", port)) + .await + .map_err(|e| format!("Failed to bind spawn listener: {}", e))?; + + info!("Terminal spawn service listening on port {}", port); + + loop { + let (stream, addr) = listener.accept() + .await + .map_err(|e| format!("Failed to accept spawn connection: {}", e))?; + + info!("Terminal spawn request from {}", addr); + + // Handle the spawn request + tokio::spawn(async move { + if let Err(e) = handle_spawn_request(stream, None).await { + error!("Error handling spawn request: {}", e); + } + }); + } +} + +/// Handle a single terminal spawn request +async fn handle_spawn_request( + mut stream: TcpStream, + _shell: Option, +) -> Result<(), String> { + // Simple HTTP response + let response = b"HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nTerminal spawned\r\n"; + stream.write_all(response) + .await + .map_err(|e| format!("Failed to write response: {}", e))?; + + // TODO: Implement actual terminal spawning logic + // This would integrate with the system's terminal emulator + + Ok(()) +} \ No newline at end of file diff --git a/tauri/src-tauri/src/updater.rs b/tauri/src-tauri/src/updater.rs new file mode 100644 index 00000000..623acb82 --- /dev/null +++ b/tauri/src-tauri/src/updater.rs @@ -0,0 +1,523 @@ +use serde::{Serialize, Deserialize}; +use std::sync::Arc; +use tokio::sync::RwLock; +use chrono::{DateTime, Utc, TimeZone}; +use tauri::{AppHandle, Emitter}; +use tauri_plugin_updater::UpdaterExt; + +/// Update channel type +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +pub enum UpdateChannel { + Stable, + Beta, + Nightly, + Custom, +} + +impl UpdateChannel { + pub fn as_str(&self) -> &str { + match self { + UpdateChannel::Stable => "stable", + UpdateChannel::Beta => "beta", + UpdateChannel::Nightly => "nightly", + UpdateChannel::Custom => "custom", + } + } + + pub fn from_str(s: &str) -> Self { + match s.to_lowercase().as_str() { + "stable" => UpdateChannel::Stable, + "beta" => UpdateChannel::Beta, + "nightly" => UpdateChannel::Nightly, + _ => UpdateChannel::Custom, + } + } +} + +/// Update status +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] +pub enum UpdateStatus { + Idle, + Checking, + Available, + Downloading, + Ready, + Installing, + Error, + NoUpdate, +} + +/// Update information +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateInfo { + pub version: String, + pub notes: String, + pub pub_date: Option>, + pub download_size: Option, + pub signature: Option, + pub download_url: String, + pub channel: UpdateChannel, +} + +/// Update progress +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateProgress { + pub downloaded: u64, + pub total: u64, + pub percentage: f32, + pub bytes_per_second: Option, + pub eta_seconds: Option, +} + +/// Update settings +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdaterSettings { + pub channel: UpdateChannel, + pub check_on_startup: bool, + pub check_interval_hours: u32, + pub auto_download: bool, + pub auto_install: bool, + pub show_release_notes: bool, + pub include_pre_releases: bool, + pub custom_endpoint: Option, + pub proxy: Option, +} + +impl Default for UpdaterSettings { + fn default() -> Self { + Self { + channel: UpdateChannel::Stable, + check_on_startup: true, + check_interval_hours: 24, + auto_download: false, + auto_install: false, + show_release_notes: true, + include_pre_releases: false, + custom_endpoint: None, + proxy: None, + } + } +} + +/// Update manager state +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateState { + pub status: UpdateStatus, + pub current_version: String, + pub available_update: Option, + pub progress: Option, + pub last_check: Option>, + pub last_error: Option, + pub update_history: Vec, +} + +/// Update history entry +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateHistoryEntry { + pub version: String, + pub from_version: String, + pub channel: UpdateChannel, + pub installed_at: DateTime, + pub success: bool, + pub notes: Option, +} + +/// Update manager +pub struct UpdateManager { + app_handle: Arc>>, + settings: Arc>, + state: Arc>, + notification_manager: Option>, +} + +impl UpdateManager { + /// Create a new update manager + pub fn new(current_version: String) -> Self { + Self { + app_handle: Arc::new(RwLock::new(None)), + settings: Arc::new(RwLock::new(UpdaterSettings::default())), + state: Arc::new(RwLock::new(UpdateState { + status: UpdateStatus::Idle, + current_version, + available_update: None, + progress: None, + last_check: None, + last_error: None, + update_history: Vec::new(), + })), + notification_manager: None, + } + } + + /// Set the app handle + pub async fn set_app_handle(&self, app_handle: AppHandle) { + *self.app_handle.write().await = Some(app_handle); + } + + /// Set the notification manager + pub fn set_notification_manager(&mut self, notification_manager: Arc) { + self.notification_manager = Some(notification_manager); + } + + /// Load settings from configuration + pub async fn load_settings(&self) -> Result<(), String> { + if let Ok(settings) = crate::settings::Settings::load() { + if let Some(update_settings) = settings.updates { + let mut updater_settings = self.settings.write().await; + updater_settings.channel = UpdateChannel::from_str(&update_settings.channel); + updater_settings.check_on_startup = true; + updater_settings.check_interval_hours = match update_settings.check_frequency.as_str() { + "daily" => 24, + "weekly" => 168, + "monthly" => 720, + _ => 24, + }; + updater_settings.auto_download = update_settings.auto_download; + updater_settings.auto_install = update_settings.auto_install; + updater_settings.show_release_notes = update_settings.show_release_notes; + updater_settings.include_pre_releases = update_settings.include_pre_releases; + } + } + Ok(()) + } + + /// Get update settings + pub async fn get_settings(&self) -> UpdaterSettings { + self.settings.read().await.clone() + } + + /// Update settings + pub async fn update_settings(&self, settings: UpdaterSettings) -> Result<(), String> { + *self.settings.write().await = settings.clone(); + + // Save to persistent settings + if let Ok(mut app_settings) = crate::settings::Settings::load() { + app_settings.updates = Some(crate::settings::UpdateSettings { + channel: settings.channel.as_str().to_string(), + check_frequency: match settings.check_interval_hours { + 1..=23 => "daily".to_string(), + 24..=167 => "daily".to_string(), + 168..=719 => "weekly".to_string(), + _ => "monthly".to_string(), + }, + auto_download: settings.auto_download, + auto_install: settings.auto_install, + show_release_notes: settings.show_release_notes, + include_pre_releases: settings.include_pre_releases, + }); + app_settings.save()?; + } + + Ok(()) + } + + /// Get current update state + pub async fn get_state(&self) -> UpdateState { + self.state.read().await.clone() + } + + /// Check for updates + pub async fn check_for_updates(&self) -> Result, String> { + // Update status + { + let mut state = self.state.write().await; + state.status = UpdateStatus::Checking; + state.last_error = None; + } + + // Emit checking event + self.emit_update_event("checking", None).await; + + let app_handle_guard = self.app_handle.read().await; + let app_handle = app_handle_guard.as_ref() + .ok_or_else(|| "App handle not set".to_string())?; + + // Get the updater instance + let updater = app_handle.updater_builder(); + + // Configure updater based on settings + let settings = self.settings.read().await; + + // Build updater with channel-specific endpoint + let updater_result = match settings.channel { + UpdateChannel::Stable => updater.endpoints(vec![ + "https://releases.vibetunnel.com/stable/{{target}}/{{arch}}/{{current_version}}".parse().unwrap() + ]), + UpdateChannel::Beta => updater.endpoints(vec![ + "https://releases.vibetunnel.com/beta/{{target}}/{{arch}}/{{current_version}}".parse().unwrap() + ]), + UpdateChannel::Nightly => updater.endpoints(vec![ + "https://releases.vibetunnel.com/nightly/{{target}}/{{arch}}/{{current_version}}".parse().unwrap() + ]), + UpdateChannel::Custom => { + if let Some(endpoint) = &settings.custom_endpoint { + match endpoint.parse() { + Ok(url) => updater.endpoints(vec![url]), + Err(_) => return Err("Invalid custom endpoint URL".to_string()), + } + } else { + return Err("Custom endpoint not configured".to_string()); + } + } + }; + + // Build and check + match updater_result { + Ok(updater_builder) => match updater_builder.build() { + Ok(updater) => { + match updater.check().await { + Ok(Some(update)) => { + let update_info = UpdateInfo { + version: update.version.clone(), + notes: update.body.clone().unwrap_or_default(), + pub_date: update.date.map(|d| Utc.timestamp_opt(d.unix_timestamp(), 0).single().unwrap_or(Utc::now())), + download_size: None, // TODO: Get from update + signature: None, + download_url: String::new(), // Will be set by updater + channel: settings.channel, + }; + + // Update state + { + let mut state = self.state.write().await; + state.status = UpdateStatus::Available; + state.available_update = Some(update_info.clone()); + state.last_check = Some(Utc::now()); + } + + // Emit available event + self.emit_update_event("available", Some(&update_info)).await; + + // Show notification + if let Some(notification_manager) = &self.notification_manager { + let _ = notification_manager.notify_update_available( + &update_info.version, + &update_info.download_url + ).await; + } + + // Auto-download if enabled + if settings.auto_download { + let _ = self.download_update().await; + } + + Ok(Some(update_info)) + } + Ok(None) => { + // No update available + let mut state = self.state.write().await; + state.status = UpdateStatus::NoUpdate; + state.last_check = Some(Utc::now()); + + self.emit_update_event("no-update", None).await; + + Ok(None) + } + Err(e) => { + let error_msg = format!("Failed to check for updates: {}", e); + + let mut state = self.state.write().await; + state.status = UpdateStatus::Error; + state.last_error = Some(error_msg.clone()); + state.last_check = Some(Utc::now()); + + self.emit_update_event("error", None).await; + + Err(error_msg) + } + } + } + Err(e) => { + let error_msg = format!("Failed to build updater: {}", e); + + let mut state = self.state.write().await; + state.status = UpdateStatus::Error; + state.last_error = Some(error_msg.clone()); + + Err(error_msg) + } + }, + Err(e) => { + let error_msg = format!("Failed to configure updater endpoints: {}", e); + + let mut state = self.state.write().await; + state.status = UpdateStatus::Error; + state.last_error = Some(error_msg.clone()); + + Err(error_msg) + } + } + } + + /// Download update + pub async fn download_update(&self) -> Result<(), String> { + let update_available = { + let state = self.state.read().await; + state.available_update.is_some() + }; + + if !update_available { + return Err("No update available to download".to_string()); + } + + // Update status + { + let mut state = self.state.write().await; + state.status = UpdateStatus::Downloading; + state.progress = Some(UpdateProgress { + downloaded: 0, + total: 0, + percentage: 0.0, + bytes_per_second: None, + eta_seconds: None, + }); + } + + self.emit_update_event("downloading", None).await; + + // TODO: Implement actual download with progress tracking + // For now, simulate download completion + tokio::time::sleep(tokio::time::Duration::from_secs(2)).await; + + // Update status to ready + { + let mut state = self.state.write().await; + state.status = UpdateStatus::Ready; + state.progress = None; + } + + self.emit_update_event("ready", None).await; + + // Auto-install if enabled + let settings = self.settings.read().await; + if settings.auto_install { + let _ = self.install_update().await; + } + + Ok(()) + } + + /// Install update + pub async fn install_update(&self) -> Result<(), String> { + let update_info = { + let state = self.state.read().await; + if state.status != UpdateStatus::Ready { + return Err("Update not ready for installation".to_string()); + } + state.available_update.clone() + }; + + let update_info = update_info.ok_or_else(|| "No update available".to_string())?; + + // Update status + { + let mut state = self.state.write().await; + state.status = UpdateStatus::Installing; + } + + self.emit_update_event("installing", None).await; + + // Add to history + { + let mut state = self.state.write().await; + let from_version = state.current_version.clone(); + state.update_history.push(UpdateHistoryEntry { + version: update_info.version.clone(), + from_version, + channel: update_info.channel, + installed_at: Utc::now(), + success: true, + notes: Some(update_info.notes.clone()), + }); + } + + // TODO: Implement actual installation + // For now, return success + + self.emit_update_event("installed", None).await; + + Ok(()) + } + + /// Cancel update + pub async fn cancel_update(&self) -> Result<(), String> { + let mut state = self.state.write().await; + + match state.status { + UpdateStatus::Downloading => { + // TODO: Cancel download + state.status = UpdateStatus::Available; + state.progress = None; + Ok(()) + } + _ => Err("No update in progress to cancel".to_string()), + } + } + + /// Switch update channel + pub async fn switch_channel(&self, channel: UpdateChannel) -> Result<(), String> { + let mut settings = self.settings.write().await; + settings.channel = channel; + drop(settings); + + // Save settings + self.update_settings(self.get_settings().await).await?; + + // Clear current update info when switching channels + let mut state = self.state.write().await; + state.available_update = None; + state.status = UpdateStatus::Idle; + + Ok(()) + } + + /// Get update history + pub async fn get_update_history(&self, limit: Option) -> Vec { + let state = self.state.read().await; + match limit { + Some(l) => state.update_history.iter().rev().take(l).cloned().collect(), + None => state.update_history.clone(), + } + } + + /// Start automatic update checking + pub async fn start_auto_check(self: Arc) { + let settings = self.settings.read().await; + if !settings.check_on_startup { + return; + } + + let check_interval = std::time::Duration::from_secs(settings.check_interval_hours as u64 * 3600); + drop(settings); + + tokio::spawn(async move { + loop { + let _ = self.check_for_updates().await; + tokio::time::sleep(check_interval).await; + } + }); + } + + /// Emit update event + async fn emit_update_event(&self, event_type: &str, update_info: Option<&UpdateInfo>) { + if let Some(app_handle) = self.app_handle.read().await.as_ref() { + let event_data = serde_json::json!({ + "type": event_type, + "update": update_info, + "state": self.get_state().await, + }); + + let _ = app_handle.emit("updater:event", event_data); + } + } +} + +/// Update check result +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateCheckResult { + pub available: bool, + pub current_version: String, + pub latest_version: Option, + pub channel: UpdateChannel, + pub checked_at: DateTime, +} \ No newline at end of file diff --git a/tauri/src-tauri/src/welcome.rs b/tauri/src-tauri/src/welcome.rs new file mode 100644 index 00000000..501cf6fb --- /dev/null +++ b/tauri/src-tauri/src/welcome.rs @@ -0,0 +1,459 @@ +use serde::{Serialize, Deserialize}; +use std::sync::Arc; +use tokio::sync::RwLock; +use std::collections::HashMap; +use chrono::{DateTime, Utc}; +use tauri::{AppHandle, Manager, Emitter}; + +/// Tutorial step structure +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TutorialStep { + pub id: String, + pub title: String, + pub description: String, + pub content: String, + pub action: Option, + pub completed: bool, + pub order: u32, +} + +/// Tutorial action that can be triggered +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TutorialAction { + pub action_type: String, + pub payload: HashMap, +} + +/// Welcome state tracking +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WelcomeState { + pub first_launch: bool, + pub tutorial_completed: bool, + pub tutorial_skipped: bool, + pub completed_steps: Vec, + pub last_seen_version: Option, + pub onboarding_date: Option>, +} + +impl Default for WelcomeState { + fn default() -> Self { + Self { + first_launch: true, + tutorial_completed: false, + tutorial_skipped: false, + completed_steps: Vec::new(), + last_seen_version: None, + onboarding_date: None, + } + } +} + +/// Tutorial category +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TutorialCategory { + pub id: String, + pub name: String, + pub description: String, + pub icon: String, + pub steps: Vec, +} + +/// Welcome manager +pub struct WelcomeManager { + state: Arc>, + tutorials: Arc>>, + app_handle: Arc>>, +} + +impl WelcomeManager { + /// Create a new welcome manager + pub fn new() -> Self { + let manager = Self { + state: Arc::new(RwLock::new(WelcomeState::default())), + tutorials: Arc::new(RwLock::new(Vec::new())), + app_handle: Arc::new(RwLock::new(None)), + }; + + // Initialize default tutorials + tokio::spawn({ + let tutorials = manager.tutorials.clone(); + async move { + let default_tutorials = Self::create_default_tutorials(); + *tutorials.write().await = default_tutorials; + } + }); + + manager + } + + /// Set the app handle + pub async fn set_app_handle(&self, app_handle: AppHandle) { + *self.app_handle.write().await = Some(app_handle); + } + + /// Load welcome state from storage + pub async fn load_state(&self) -> Result<(), String> { + // Try to load from settings or local storage + if let Ok(settings) = crate::settings::Settings::load() { + // Check if this is first launch based on settings + let mut state = self.state.write().await; + state.first_launch = settings.general.show_welcome_on_startup.unwrap_or(true); + + // Mark first launch as false for next time + if state.first_launch { + state.onboarding_date = Some(Utc::now()); + } + } + Ok(()) + } + + /// Save welcome state + pub async fn save_state(&self) -> Result<(), String> { + let state = self.state.read().await; + + // Update settings to reflect welcome state + if let Ok(mut settings) = crate::settings::Settings::load() { + settings.general.show_welcome_on_startup = Some(!state.tutorial_completed && !state.tutorial_skipped); + settings.save().map_err(|e| e.to_string())?; + } + + Ok(()) + } + + /// Check if should show welcome screen + pub async fn should_show_welcome(&self) -> bool { + let state = self.state.read().await; + state.first_launch && !state.tutorial_completed && !state.tutorial_skipped + } + + /// Get current welcome state + pub async fn get_state(&self) -> WelcomeState { + self.state.read().await.clone() + } + + /// Get all tutorial categories + pub async fn get_tutorials(&self) -> Vec { + self.tutorials.read().await.clone() + } + + /// Get specific tutorial category + pub async fn get_tutorial_category(&self, category_id: &str) -> Option { + self.tutorials.read().await + .iter() + .find(|c| c.id == category_id) + .cloned() + } + + /// Complete a tutorial step + pub async fn complete_step(&self, step_id: &str) -> Result<(), String> { + let mut state = self.state.write().await; + + if !state.completed_steps.contains(&step_id.to_string()) { + state.completed_steps.push(step_id.to_string()); + + // Check if all steps are completed + let tutorials = self.tutorials.read().await; + let total_steps: usize = tutorials.iter() + .map(|c| c.steps.len()) + .sum(); + + if state.completed_steps.len() >= total_steps { + state.tutorial_completed = true; + } + + // Save state + drop(state); + drop(tutorials); + self.save_state().await?; + + // Emit progress event + if let Some(app_handle) = self.app_handle.read().await.as_ref() { + let _ = app_handle.emit("tutorial:step_completed", step_id); + } + } + + Ok(()) + } + + /// Skip tutorial + pub async fn skip_tutorial(&self) -> Result<(), String> { + let mut state = self.state.write().await; + state.tutorial_skipped = true; + state.first_launch = false; + drop(state); + + self.save_state().await?; + + Ok(()) + } + + /// Reset tutorial progress + pub async fn reset_tutorial(&self) -> Result<(), String> { + let mut state = self.state.write().await; + state.completed_steps.clear(); + state.tutorial_completed = false; + state.tutorial_skipped = false; + drop(state); + + self.save_state().await?; + + Ok(()) + } + + /// Show welcome window + pub async fn show_welcome_window(&self) -> Result<(), String> { + if let Some(app_handle) = self.app_handle.read().await.as_ref() { + // Check if welcome window already exists + if let Some(window) = app_handle.get_webview_window("welcome") { + window.show().map_err(|e| e.to_string())?; + window.set_focus().map_err(|e| e.to_string())?; + } else { + // Create new welcome window + tauri::WebviewWindowBuilder::new( + app_handle, + "welcome", + tauri::WebviewUrl::App("welcome.html".into()) + ) + .title("Welcome to VibeTunnel") + .inner_size(800.0, 600.0) + .center() + .resizable(false) + .build() + .map_err(|e| e.to_string())?; + } + } else { + return Err("App handle not set".to_string()); + } + + Ok(()) + } + + /// Create default tutorial content + fn create_default_tutorials() -> Vec { + vec![ + TutorialCategory { + id: "getting_started".to_string(), + name: "Getting Started".to_string(), + description: "Learn the basics of VibeTunnel".to_string(), + icon: "🚀".to_string(), + steps: vec![ + TutorialStep { + id: "welcome".to_string(), + title: "Welcome to VibeTunnel".to_string(), + description: "Your powerful terminal session manager".to_string(), + content: r#"VibeTunnel lets you create, manage, and share terminal sessions with ease. + +Key features: +• Create multiple terminal sessions +• Share sessions via web interface +• Record terminal sessions +• Secure remote access with ngrok +• Cross-platform support"#.to_string(), + action: None, + completed: false, + order: 1, + }, + TutorialStep { + id: "create_session".to_string(), + title: "Creating Your First Session".to_string(), + description: "Learn how to create a terminal session".to_string(), + content: r#"To create a new terminal session: + +1. Click the "New Terminal" button +2. Choose your preferred shell +3. Set the session name (optional) +4. Click "Create" + +Your session will appear in the sidebar."#.to_string(), + action: Some(TutorialAction { + action_type: "create_terminal".to_string(), + payload: HashMap::new(), + }), + completed: false, + order: 2, + }, + TutorialStep { + id: "start_server".to_string(), + title: "Starting the Web Server".to_string(), + description: "Share your sessions via web interface".to_string(), + content: r#"The web server lets you access your terminals from any browser: + +1. Click "Start Server" in the toolbar +2. Choose your access mode: + • Localhost - Access only from this machine + • Network - Access from your local network + • Ngrok - Access from anywhere (requires auth token) +3. Share the URL with others or access it yourself"#.to_string(), + action: Some(TutorialAction { + action_type: "start_server".to_string(), + payload: HashMap::new(), + }), + completed: false, + order: 3, + }, + ], + }, + TutorialCategory { + id: "advanced_features".to_string(), + name: "Advanced Features".to_string(), + description: "Discover powerful features".to_string(), + icon: "⚡".to_string(), + steps: vec![ + TutorialStep { + id: "recording".to_string(), + title: "Recording Sessions".to_string(), + description: "Record and replay terminal sessions".to_string(), + content: r#"Record your terminal sessions in Asciinema format: + +1. Right-click on a session +2. Select "Start Recording" +3. Perform your terminal tasks +4. Stop recording when done +5. Save or share the recording + +Recordings can be played back later or shared with others."#.to_string(), + action: None, + completed: false, + order: 1, + }, + TutorialStep { + id: "port_forwarding".to_string(), + title: "TTY Forwarding".to_string(), + description: "Forward terminal sessions over TCP".to_string(), + content: r#"TTY forwarding allows remote terminal access: + +1. Go to Settings > Advanced +2. Enable TTY Forwarding +3. Configure the local port +4. Connect using: telnet localhost + +This is useful for accessing terminals from other applications."#.to_string(), + action: None, + completed: false, + order: 2, + }, + TutorialStep { + id: "cli_tool".to_string(), + title: "Command Line Interface".to_string(), + description: "Use VibeTunnel from the terminal".to_string(), + content: r#"Install the CLI tool for quick access: + +1. Go to Settings > Advanced +2. Click "Install CLI Tool" +3. Open a new terminal +4. Run: vt --help + +Common commands: +• vt new - Create new session +• vt list - List sessions +• vt attach - Attach to session"#.to_string(), + action: Some(TutorialAction { + action_type: "install_cli".to_string(), + payload: HashMap::new(), + }), + completed: false, + order: 3, + }, + ], + }, + TutorialCategory { + id: "security".to_string(), + name: "Security & Settings".to_string(), + description: "Configure security and preferences".to_string(), + icon: "🔒".to_string(), + steps: vec![ + TutorialStep { + id: "password_protection".to_string(), + title: "Password Protection".to_string(), + description: "Secure your web interface".to_string(), + content: r#"Protect your sessions with a password: + +1. Go to Settings > Dashboard +2. Enable "Password Protection" +3. Set a strong password +4. Save settings + +Anyone accessing the web interface will need this password."#.to_string(), + action: Some(TutorialAction { + action_type: "open_settings".to_string(), + payload: HashMap::new(), + }), + completed: false, + order: 1, + }, + TutorialStep { + id: "auto_launch".to_string(), + title: "Auto Launch".to_string(), + description: "Start VibeTunnel with your system".to_string(), + content: r#"Configure VibeTunnel to start automatically: + +1. Go to Settings > General +2. Enable "Launch at startup" +3. Choose startup behavior: + • Start minimized + • Show dock icon + • Auto-start server + +VibeTunnel will be ready whenever you need it."#.to_string(), + action: None, + completed: false, + order: 2, + }, + ], + }, + ] + } + + /// Get tutorial progress + pub async fn get_progress(&self) -> TutorialProgress { + let state = self.state.read().await; + let tutorials = self.tutorials.read().await; + + let total_steps: usize = tutorials.iter() + .map(|c| c.steps.len()) + .sum(); + + let completed_steps = state.completed_steps.len(); + let percentage = if total_steps > 0 { + (completed_steps as f32 / total_steps as f32 * 100.0) as u32 + } else { + 0 + }; + + TutorialProgress { + total_steps, + completed_steps, + percentage, + categories: tutorials.iter().map(|category| { + let category_completed = category.steps.iter() + .filter(|s| state.completed_steps.contains(&s.id)) + .count(); + + CategoryProgress { + category_id: category.id.clone(), + category_name: category.name.clone(), + total_steps: category.steps.len(), + completed_steps: category_completed, + } + }).collect(), + } + } +} + +/// Tutorial progress tracking +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TutorialProgress { + pub total_steps: usize, + pub completed_steps: usize, + pub percentage: u32, + pub categories: Vec, +} + +/// Category progress +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct CategoryProgress { + pub category_id: String, + pub category_name: String, + pub total_steps: usize, + pub completed_steps: usize, +} \ No newline at end of file diff --git a/tauri/src-tauri/tauri.conf.json b/tauri/src-tauri/tauri.conf.json index ef03de4e..5cf5096b 100644 --- a/tauri/src-tauri/tauri.conf.json +++ b/tauri/src-tauri/tauri.conf.json @@ -5,7 +5,7 @@ "build": { "beforeDevCommand": "", "beforeBuildCommand": "", - "frontendDist": "../dist" + "frontendDist": "../public" }, "app": { "windows": [{ @@ -39,7 +39,7 @@ "icons/menu-bar-icon@2x.png", "icons/tray-icon.png", "icons/tray-icon@2x.png", - "../public/**" + "public/**" ], "macOS": { "frameworks": [],