mod config;
mod flow;
mod pkce;
mod provider;
mod redirect;
mod store;
mod token;
#[cfg(feature = "testing")]
pub mod testing;
pub use config::OAuthConfig;
pub use flow::{AuthorizationFlow, PendingAuthorization};
pub use pkce::Pkce;
pub use provider::AccessTokenProvider;
pub use redirect::{AuthorizationCode, RedirectListener};
pub use store::TokenStore;
pub use token::TokenSet;
pub(crate) fn random_token(bytes: usize) -> origin_domain::Result<String> {
use base64::Engine as _;
let mut buffer = vec![0u8; bytes];
getrandom::fill(&mut buffer).map_err(|error| {
origin_domain::AppError::internal(format!("no secure randomness available: {error}"))
})?;
Ok(base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(buffer))
}