#file: backend/modules/chat_server/Cargo.toml [package] name = "chat_server" version = "0.2.0" edition = "2021" authors = ["Veza Team "] description = "Serveur de chat WebSocket sécurisé et haute performance" repository = "https://github.com/veza/chat-server" license = "MIT" keywords = ["websocket", "chat", "real-time", "rust", "tokio"] categories = ["network-programming", "web-programming::websocket"] readme = "README.md" [lib] name = "chat_server" path = "src/lib.rs" [[bin]] name = "chat-server" path = "src/main.rs" # Les binaires de test sont dans le dossier target/debug et ne sont pas définis ici [dependencies] # ═══════════════════════════════════════════════════════════════════════ # RUNTIME ASYNCHRONE ET RÉSEAU # ═══════════════════════════════════════════════════════════════════════ tokio = { version = "1.35", features = [ "full", # Toutes les fonctionnalités "tracing", # Support tracing "signal", # Signaux système pour shutdown gracieux ] } tokio-tungstenite = "0.21" # WebSocket server/client tungstenite = "0.21" # Core WebSocket futures-util = "0.3" # Utilitaires futures hyper = { version = "1.0", features = ["full"] } # Client HTTP pour webhooks axum = { version = "0.8", features = ["macros", "ws"] } # Framework web moderne # ═══════════════════════════════════════════════════════════════════════ # BASE DE DONNÉES ET CACHE # ═══════════════════════════════════════════════════════════════════════ sqlx = { version = "0.8", features = [ "postgres", # Support PostgreSQL "runtime-tokio-rustls", # Runtime async avec TLS rustls "chrono", # Support des types de date "uuid", # Support UUID "json", # Support JSON/JSONB "migrate", # Migrations de base de données "macros", # Macros query! ] } redis = { version = "0.32", features = [ "tokio-comp", # Support Tokio "connection-manager", # Gestionnaire de connexions ], optional = true } lz4 = "1.24" # Compression pour message storage # ═══════════════════════════════════════════════════════════════════════ # SÉRIALISATION ET FORMATS # ═══════════════════════════════════════════════════════════════════════ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" toml = "0.9" # Configuration TOML rmp-serde = "1.1" # MessagePack pour cache efficace # ═══════════════════════════════════════════════════════════════════════ # AUTHENTIFICATION ET SÉCURITÉ # ═══════════════════════════════════════════════════════════════════════ jsonwebtoken = { version = "10", features = ["aws_lc_rs"] } # JWT tokens bcrypt = "0.17" # Hachage de mots de passe ring = "0.17" # Cryptographie (signatures, HMAC) argon2 = "0.5" # Hachage de mots de passe moderne (alternative à bcrypt) sha2 = "0.10" # Hachage SHA-2 totp-rs = { version = "5.4", features = ["qr"] } # TOTP 2FA qrcode = "0.14" # Génération QR codes pour 2FA # ═══════════════════════════════════════════════════════════════════════ # TYPES ET UTILITAIRES # ═══════════════════════════════════════════════════════════════════════ veza-common = { path = "../veza-common" } chrono = { version = "0.4", features = ["serde"] } uuid = { version = "1.6", features = ["v4", "serde"] } url = { version = "2.5", features = ["serde"] } # Parsing d'URLs percent-encoding = "2.3" # Encodage URL base64 = "0.21" # Encodage base64 hex = "0.4" # Encodage hexadécimal # ═══════════════════════════════════════════════════════════════════════ # VALIDATION ET NETTOYAGE # ═══════════════════════════════════════════════════════════════════════ regex = "1.10" # Expressions régulières validator = { version = "0.20", features = ["derive"] } # Validation des données ammonia = "3.3" # Nettoyage HTML/XSS linkify = "0.10" # Détection automatique de liens # ═══════════════════════════════════════════════════════════════════════ # GESTION D'ERREURS ET LOGGING # ═══════════════════════════════════════════════════════════════════════ thiserror = "2.0" # Macros d'erreurs anyhow = "1.0" # Gestion d'erreurs contextuelles async-trait = "0.1" # Async trait support tracing = "0.1" # Logging structuré tracing-subscriber = { version = "0.3", features = [ "env-filter", # Filtrage par variables d'env "fmt", # Formatage console "json", # Format JSON pour production "ansi", # Couleurs ANSI "chrono", # Timestamps ] } tracing-appender = "0.2" # Rotation des logs # ═══════════════════════════════════════════════════════════════════════ # CONFIGURATION ET ENVIRONNEMENT # ═══════════════════════════════════════════════════════════════════════ dotenvy = "0.15" # Variables d'environnement (.env) config = "0.15" # Configuration multi-sources clap = { version = "4.4", features = ["derive", "env"] } # CLI arguments # ═══════════════════════════════════════════════════════════════════════ # PERFORMANCE ET MONITORING # ═══════════════════════════════════════════════════════════════════════ metrics = { version = "0.22", optional = true } # Métriques de performance metrics-exporter-prometheus = { version = "0.13", optional = true } # Export Prometheus dashmap = "6.1" # HashMap concurrent parking_lot = "0.12" # Mutex plus performants rayon = "1.10" # Parallel processing pour batching bytes = "1.6" # Zero-copy message handling once_cell = "1.19" # Initialisation paresseuse thread-safe # ═══════════════════════════════════════════════════════════════════════ # FONCTIONNALITÉS AVANCÉES # ═══════════════════════════════════════════════════════════════════════ notify = "8.2" # Surveillance système de fichiers image = { version = "0.24", features = ["png", "jpeg", "webp"], optional = true } # Traitement d'images infer = { version = "0.15", optional = true } # Détection de type de fichier mime = "0.3" # Types MIME tempfile = { version = "3.8", optional = true } # Fichiers temporaires zip = { version = "8.1", optional = true } # Archives ZIP # ═══════════════════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════════════════ # gRPC ET COMMUNICATION INTER-SERVICES # ═══════════════════════════════════════════════════════════════════════ tonic = { version = "0.11", features = ["transport", "prost"] } prost = "0.12" prost-types = "0.14" tokio-stream = "0.1" # RabbitMQ client (ORIGIN Architecture - Event Bus) lapin = "2.3" # ═══════════════════════════════════════════════════════════════════════ # INTÉGRATIONS EXTERNES (OPTIONAL) # ═══════════════════════════════════════════════════════════════════════ lettre = { version = "0.11", features = ["tokio1-native-tls"], optional = true } # Envoi d'emails reqwest = { version = "0.11", features = ["json", "rustls-tls"], optional = true } # Client HTTP webhook = { version = "2.1", optional = true } # Webhooks sortants sysinfo = "0.37.2" [dev-dependencies] # ═══════════════════════════════════════════════════════════════════════ # DÉPENDANCES DE TEST ET DÉVELOPPEMENT # ═══════════════════════════════════════════════════════════════════════ tokio-test = "0.4" # Utilitaires de test async mockall = "0.12" # Mocking proptest = "1.4" # Property testing criterion = { version = "0.5", features = ["html_reports"] } # Benchmarks insta = "1.34" # Tests de snapshot test-log = "0.2" # Logging dans les tests pretty_assertions = "1.4" # Assertions plus lisibles [build-dependencies] tonic-build = "0.11" # Génération de code protobuf [features] # Fonctionnalités par défaut default = [ "redis-cache", "file-uploads", "webhooks", "metrics", "email" ] # Cache Redis (désactivable pour dev/test) redis-cache = ["dep:redis"] # Upload de fichiers avec validation file-uploads = ["dep:image", "dep:infer", "dep:tempfile", "dep:zip"] # Support des webhooks sortants webhooks = ["dep:reqwest", "dep:webhook"] # Métriques et monitoring metrics = ["dep:metrics", "dep:metrics-exporter-prometheus"] # Envoi d'emails email = ["dep:lettre"] # Mode de développement avec fonctionnalités de debug dev = ["tokio/test-util"] # Version sans dépendances optionnelles (pour déploiements légers) minimal = [] # Tests de base de données (nécessite une DB active) test-db = [] [profile.dev] # Configuration pour le développement opt-level = 0 # Pas d'optimisation pour compilation rapide debug = true # Symboles de debug complets split-debuginfo = "unpacked" # Debug info séparé (macOS/Linux) overflow-checks = true # Vérifications d'overflow lto = false # Pas de LTO pour compilation rapide [profile.release] # Configuration pour la production opt-level = 3 # Optimisation maximale debug = false # Pas de symboles de debug strip = true # Supprimer les symboles lto = "fat" # Link Time Optimization complète codegen-units = 1 # Compilation en une seule unité pour optimisation panic = "abort" # Abort au lieu d'unwind pour performance [profile.bench] # Configuration pour les benchmarks inherits = "release" debug = true # Conserver debug pour profiling # ═══════════════════════════════════════════════════════════════════════ # MÉTADONNÉES CARGO # ═══════════════════════════════════════════════════════════════════════ [package.metadata.docs.rs] # Configuration pour docs.rs all-features = true rustdoc-args = ["--cfg", "docsrs"] # Badges pour crates.io [badges] maintenance = { status = "actively-developed" } # Scripts personnalisés [package.metadata.scripts] # cargo run-script db-setup db-setup = "sqlx database create && sqlx migrate run" # cargo run-script test-all test-all = "cargo test --all-features --all-targets" # cargo run-script security-audit security-audit = "cargo audit"