#product-os #browser-automation

no-std product-os-configuration

Product OS : Configuration provides traits, utilities, and conventions for structuring configuration across the Product OS suite of crates

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

GPL-3.0-only

29KB
233 lines

Product OS : Configuration

Crates.io Documentation License: GPL-3.0

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_std environments 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: Minimal no_std support
  • std: Standard library support
  • config_file: Enable loading configuration from JSON files
  • full: 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 container
  • Network - Network settings
  • Logging - Log level configuration
  • Certificate - TLS certificate configuration
  • Compression - Response compression settings
  • Security - Security settings (CSP, CSRF)
  • Authentication - OAuth2/OIDC settings
  • KeyValueStore - Key-value store configuration
  • QueueStore - Queue store configuration
  • RelationalStore - Relational database configuration
  • Browser - Browser automation settings
  • Crawler - Web crawler settings
  • NetworkProxy - Proxy configuration
  • VPN - 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

GNU GPLv3

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