ones-oidc 0.3.6

ONES OpenID Connect client for Rust
Documentation
//! ONES OpenID Connect client for Rust
//! 
//! This library provides authentication with ONES using OpenID Connect (OIDC) 
//! and Client Initiated Backchannel Authentication (CIBA).
//!
//! # Quick Start
//!
//! ```rust,no_run
//! use ones_oidc::{OpenIdconnectClient, OnesOidcConfig, load_device_config, read_private_key};
//! use openidconnect::{core::CoreProviderMetadata, reqwest::async_http_client};
//!
//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
//! // Load device configuration
//! let device_config = load_device_config("device_config.yml")?;
//! let private_key = read_private_key("private_key.pem")?;
//! 
//! // Get issuer URL and discover metadata
//! let issuer_url = device_config.get_issuer_url()?;
//! let provider_metadata = CoreProviderMetadata::discover_async(
//!     issuer_url.clone(),
//!     async_http_client,
//! ).await?;
//! 
//! // Create client with configuration
//! let config = OnesOidcConfig::default()
//!     .timeout(std::time::Duration::from_secs(10));
//!     
//! let client = OpenIdconnectClient::with_config(
//!     device_config.client_id,
//!     issuer_url,
//!     provider_metadata,
//!     private_key,
//!     config,
//! );
//! # Ok(())
//! # }
//! ```

// Private implementation modules
mod config;
mod device;
mod device_config;
mod errors;
mod http_client;
mod identifier;
mod oidc;
mod oidc_backend;
mod oidc_types;
mod utils;
mod well_known;

// Optional public modules for advanced usage
pub mod actions;

// === Core API ===

/// Main OIDC client for authentication operations
pub use oidc::OpenIdconnectClient;

/// Configuration for the OIDC client
pub use config::OnesOidcConfig;

/// Device configuration loading utilities
pub use device_config::{load_device_config, DeviceConfig};

/// Private key utilities
pub use utils::read_private_key;

// === Error Types ===

pub use errors::{DeviceError, OidcError, UtilsError, WellKnownApplicationsError};

// === Authentication Types ===

pub use oidc_types::{
    AuthenticatedEntity,
    AuthenticatedEntityKind,
    AuthenticationMethod,
    AuthenticationResult,
    LoginHint,
};

// === Identifier Types ===

pub use identifier::{IdentifierType, NewIdentifier};

// === Well-Known Application Discovery ===

pub use well_known::{
    get_applications_well_known, 
    get_well_known_application_by_client_identifier, 
    ApplicationType,
    ApplicationsWellKnown,
};

// === OIDC Backend Types (for advanced users) ===

pub use oidc_backend::{
    AuthRequestResource,
    CibaLoginRequestFrontend,
    CibaLoginRequestFrontendWithoutResource,
    CibaStatusRequestFrontend,
    QrStatusRequest,
    QrStatusRequestFrontend,
    RefreshTokenRequestFrontend,
};

// === Default Configuration Paths ===

/// Default path for device configuration file
pub const DEFAULT_DEVICE_CONFIG_PATH: &str = "/etc/px-device-identity/device.yml";

/// Default path for device private key file  
pub const DEFAULT_PRIVATE_KEY_PATH: &str = "/root/.local/share/px-device-identity/private.pem";

// === Re-exported OpenIDConnect Types ===

/// Re-exported types from the `openidconnect` crate for convenience
pub use openidconnect::{
    core::{CoreProviderMetadata, CoreTokenType},
    ClientId, 
    EmptyExtraTokenFields, 
    StandardTokenResponse, 
    IssuerUrl,
    AccessToken,
};