[package] name = "reaction" version = "2.3.0" edition = "2024" authors = ["ppom "] license = "AGPL-3.0" description = "Scan logs and take action" readme = "README.md" homepage = "https://reaction.ppom.me" repository = "https://framagit.org/ppom/reaction" keywords = ["security", "sysadmin", "fail2ban", "logs", "monitoring"] build = "build.rs" default-run = "reaction" [package.metadata.deb] section = "net" extended-description = """A daemon that scans program outputs for repeated patterns, and takes action. A common usage is to scan ssh and webserver logs, and to ban hosts that cause multiple authentication errors. reaction aims at being a successor to fail2ban.""" maintainer-scripts = "packaging/" systemd-units = { enable = false } assets = [ # Executables [ "target/release/reaction", "/usr/bin/reaction", "755" ], [ "target/release/reaction-plugin-virtual", "/usr/bin/reaction-plugin-virtual", "755" ], # Man pages [ "target/release/reaction*.1", "/usr/share/man/man1/", "644" ], # Shell completions [ "target/release/reaction.bash", "/usr/share/bash-completion/completions/reaction", "644" ], [ "target/release/reaction.fish", "/usr/share/fish/completions/", "644" ], [ "target/release/_reaction", "/usr/share/zsh/vendor-completions/", "644" ], ] [dependencies] # Time types chrono.workspace = true # CLI parsing clap = { version = "4.5.4", features = ["derive"] } # Unix interfaces nix = { version = "0.29.0", features = ["signal"] } num_cpus = "1.16.0" # Regex matching regex = "1.10.4" # Configuration languages, ser/deserialisation serde.workspace = true serde_json.workspace = true serde_yaml = "0.9.34" jrsonnet-evaluator = "0.4.2" # Error macro thiserror.workspace = true # Async runtime & helpers futures = { workspace = true } tokio = { workspace = true, features = ["full", "tracing"] } tokio-util = { workspace = true, features = ["codec"] } # Async logging tracing.workspace = true tracing-subscriber = "0.3.18" # Database treedb.workspace = true # Reaction plugin system remoc.workspace = true reaction-plugin.workspace = true [build-dependencies] clap = { version = "4.5.4", features = ["derive"] } clap_complete = "4.5.2" clap_mangen = "0.2.24" regex = "1.10.4" tracing = "0.1.40" [dev-dependencies] rand = "0.8.5" treedb.workspace = true treedb.features = ["test"] tempfile.workspace = true assert_fs.workspace = true assert_cmd = "2.0.17" predicates = "3.1.3" [workspace] members = [ "crates/treedb", "plugins/reaction-plugin", "plugins/reaction-plugin-cluster", "plugins/reaction-plugin-ipset", "plugins/reaction-plugin-virtual" ] [workspace.dependencies] assert_fs = "1.1.3" chrono = { version = "0.4.38", features = ["std", "clock", "serde"] } futures = "0.3.30" remoc = { version = "0.18.3" } serde = { version = "1.0.203", features = ["derive"] } serde_json = { version = "1.0.117", features = ["arbitrary_precision"] } tempfile = "3.12.0" thiserror = "1.0.63" tokio = { version = "1.40.0" } tokio-util = { version = "0.7.12" } tracing = "0.1.40" reaction-plugin = { path = "plugins/reaction-plugin" } treedb = { path = "crates/treedb" }