[package]
name = "ssh-commander-core"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
description = "Async Rust domain layer for SSH, SFTP, FTP/FTPS, PostgreSQL, and connection management — the engine behind midnight-ssh."
documentation = "https://docs.rs/ssh-commander-core"
readme = "../../README.md"
keywords = ["ssh", "sftp", "ftp", "postgres", "tunnel"]
categories = ["network-programming", "database", "asynchronous", "authentication"]
[features]
default = ["ssh", "sftp", "ftp", "desktop", "tools", "postgres"]
ssh = ["dep:russh", "dep:russh-sftp"]
sftp = ["ssh"]
ftp = ["dep:suppaftp", "dep:async-std"]
desktop = []
tools = ["ssh"]
postgres = ["dep:ssh-commander-pg"]
[dependencies]
ssh-commander-keychain = { path = "../keychain", version = "0.2.2" }
ssh-commander-pg = { path = "../pg", version = "0.2.2", optional = true }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["full"] }
async-trait = "0.1"
russh = { version = "0.61", optional = true }
russh-sftp = { version = "2", optional = true }
anyhow = "1"
thiserror = "2"
tracing = "0.1"
tokio-util = "0.7"
futures = "0.3"
suppaftp = { version = "6", features = ["async-native-tls"], optional = true }
async-std = { version = "1", optional = true }
dirs = "5"
rand = "0.8"
chrono = { version = "0.4", default-features = false, features = ["clock"] }
[dev-dependencies]
proptest = "1"
tempfile = "3"