34 releases
| 0.0.45 | Mar 2, 2026 |
|---|---|
| 0.0.38 | Jun 13, 2025 |
| 0.0.35 | Feb 2, 2025 |
| 0.0.30 | Nov 17, 2024 |
| 0.0.13 | Nov 30, 2023 |
#8 in #product-os
Used in 13 crates
29KB
233 lines
Product OS : Configuration
Product OS : Configuration provides comprehensive configuration structures for Product OS Server, supporting network and security configuration, authentication (OAuth2/OIDC), data stores, browser automation, and more.
What is Product OS?
Product OS is a collection of packages that provide different tools and features that can work together to build products more easily for the Rust ecosystem.
Features
- Network Configuration: Host, port, TLS/SSL, compression settings
- Security: CSP (Content Security Policy), CSRF protection
- Authentication: OAuth2/OIDC provider configuration
- Data Stores: Key-value, queue, and relational store configuration
- Browser Automation: Browser and crawler configuration
- Network Proxy: Proxy with MITM capabilities
- VPN Integration: VPN configuration support
- No-std Support: Works in
no_stdenvironments with alloc
Installation
Add Product OS : Configuration to your Cargo.toml:
[dependencies]
product-os-configuration = { version = "0.0.40", features = ["config_file"] }
For no_std environments:
[dependencies]
product-os-configuration = { version = "0.0.40", default-features = false }
Quick Start
Creating a Default Configuration
use product_os_configuration::Configuration;
let config = Configuration::new();
assert_eq!(config.environment, "development");
Loading from File
use product_os_configuration::Configuration;
// Requires the "config_file" feature
let config = Configuration::from_file("config.json");
Feature Flags
default: Minimalno_stdsupportstd: Standard library supportconfig_file: Enable loading configuration from JSON filesfull: Enable all features
Configuration Sections
Network
use product_os_configuration::{Configuration, Network};
let config = Configuration::new();
let host = config.get_host();
let socket_addr = config.socket_address(Some(8080), false);
let is_secure = config.is_secure();
Data Stores
use product_os_configuration::Configuration;
let config = Configuration::new();
// Key-Value Store
let kv_enabled = config.get_store_key_value_enabled();
let kv_host = config.get_store_key_value_host();
let kv_port = config.get_store_key_value_port();
// Queue Store
let queue_enabled = config.get_store_queue_enabled();
// Relational Store
let rel_enabled = config.get_store_relational_enabled();
let db_name = config.get_store_relational_db_identifier();
Authentication
use product_os_configuration::Configuration;
let config = Configuration::new();
let client_id = config.get_authentication_client_id();
let client_secret = config.get_authentication_client_secret();
let scopes = config.get_authentication_scopes();
let oidc_providers = config.get_authentication_oidc_providers();
Compression
use product_os_configuration::Configuration;
let config = Configuration::new();
let gzip = config.is_compression_gzip();
let brotli = config.is_compression_brotli();
let deflate = config.is_compression_deflate();
JSON Configuration Example
{
"environment": "production",
"rootPath": "/api",
"network": {
"protocol": "https",
"secure": true,
"host": "localhost",
"port": 8443,
"listenAllInterfaces": false,
"allowInsecure": true,
"insecurePort": 8080,
"insecureUseDifferentPort": true,
"insecureForceSecure": true
},
"logging": {
"level": "INFO"
},
"compression": {
"enable": true,
"gzip": true,
"deflate": false,
"brotli": true
},
"store": {
"keyValue": {
"enabled": true,
"kind": "Redis",
"host": "localhost",
"port": 6379,
"secure": false,
"dbNumber": 0
}
}
}
Available Configuration Structures
Configuration- Main configuration containerNetwork- Network settingsLogging- Log level configurationCertificate- TLS certificate configurationCompression- Response compression settingsSecurity- Security settings (CSP, CSRF)Authentication- OAuth2/OIDC settingsKeyValueStore- Key-value store configurationQueueStore- Queue store configurationRelationalStore- Relational database configurationBrowser- Browser automation settingsCrawler- Web crawler settingsNetworkProxy- Proxy configurationVPN- VPN configuration
Testing
# Run all tests
cargo test --all-features
# Run with specific features
cargo test --features "config_file"
# Generate documentation
cargo doc --all-features --open
License
Contributing
Contributions are welcome! Please ensure:
- All tests pass:
cargo test --all-features - Code is formatted:
cargo fmt - No clippy warnings:
cargo clippy --all-features - Documentation is updated for public APIs
Minimum Supported Rust Version (MSRV)
Rust 1.69 or later.
Dependencies
~0.4–1.3MB
~27K SLoC