#![allow(unknown_lints)]
#![allow(clippy::style)]
#![allow(clippy::complexity)]
#![allow(clippy::large_enum_variant)]
#![allow(clippy::mutable_key_type)]
#![allow(clippy::stable_sort_primitive)]
#![allow(clippy::map_entry)]
#![allow(clippy::box_default)]
#![allow(clippy::drain_collect)]
#![warn(clippy::bool_comparison)]
#![warn(clippy::clone_on_ref_ptr)]
#![warn(clippy::no_effect)]
#![warn(clippy::unnecessary_unwrap)]
#![warn(clippy::dbg_macro)]
#![warn(clippy::todo)]
#![warn(clippy::wildcard_dependencies)]
#![warn(clippy::zero_prefixed_literal)]
#![warn(clippy::borrowed_box)]
#![warn(clippy::deref_addrof)]
#![warn(clippy::double_must_use)]
#![warn(clippy::double_parens)]
#![warn(clippy::extra_unused_lifetimes)]
#![warn(clippy::needless_borrow)]
#![warn(clippy::needless_question_mark)]
#![warn(clippy::needless_return)]
#![warn(clippy::redundant_pattern)]
#![warn(clippy::redundant_slicing)]
#![warn(clippy::redundant_static_lifetimes)]
#![warn(clippy::single_component_path_imports)]
#![warn(clippy::unnecessary_cast)]
#![warn(clippy::useless_asref)]
#![warn(clippy::useless_conversion)]
#![warn(clippy::builtin_type_shadow)]
#![warn(clippy::duplicate_underscore_argument)]
#![warn(clippy::double_neg)]
#![warn(clippy::unnecessary_mut_passed)]
#![warn(clippy::wildcard_in_or_patterns)]
#![warn(clippy::crosspointer_transmute)]
#![warn(clippy::excessive_precision)]
#![warn(clippy::overflow_check_conditional)]
#![warn(clippy::as_conversions)]
#![warn(clippy::match_overlapping_arm)]
#![warn(clippy::zero_divided_by_zero)]
#![warn(clippy::must_use_unit)]
#![warn(clippy::suspicious_assignment_formatting)]
#![warn(clippy::suspicious_else_formatting)]
#![warn(clippy::suspicious_unary_op_formatting)]
#![warn(clippy::mut_mutex_lock)]
#![warn(clippy::print_literal)]
#![warn(clippy::same_item_push)]
#![warn(clippy::useless_format)]
#![warn(clippy::write_literal)]
#![warn(clippy::redundant_closure)]
#![warn(clippy::redundant_closure_call)]
#![warn(clippy::unnecessary_lazy_evaluations)]
#![warn(clippy::partialeq_ne_impl)]
#![warn(clippy::redundant_field_names)]
#![warn(clippy::transmutes_expressible_as_ptr_casts)]
#![warn(clippy::unused_async)]
#![warn(clippy::disallowed_methods)]
#![warn(clippy::disallowed_macros)]
#![warn(clippy::disallowed_types)]
#![warn(clippy::from_over_into)]
mod app_password;
mod auth;
mod client;
mod error;
mod metrics;
use std::path::PathBuf;
pub use auth::{
Authentication, AuthenticationConfig, Claims, ExchangePasswordForTokenResponse,
ValidatedApiTokenResponse, REFRESH_SUFFIX,
};
pub use client::tokens::{ApiTokenArgs, ApiTokenResponse, RefreshToken};
pub use client::Client;
pub use error::Error;
use uuid::Uuid;
pub use crate::app_password::{AppPassword, AppPasswordParseError};
#[derive(Debug, Clone, clap::Parser)]
pub struct FronteggCliArgs {
#[clap(
long,
env = "FRONTEGG_TENANT",
requires_all = &["frontegg-api-token-url", "frontegg-admin-role"],
value_name = "UUID",
)]
frontegg_tenant: Option<Uuid>,
#[clap(long, env = "FRONTEGG_JWK", requires = "frontegg-tenant")]
frontegg_jwk: Option<String>,
#[clap(long, env = "FRONTEGG_JWK_FILE", requires = "frontegg-tenant")]
frontegg_jwk_file: Option<PathBuf>,
#[clap(long, env = "FRONTEGG_API_TOKEN_URL", requires = "frontegg-tenant")]
frontegg_api_token_url: Option<String>,
#[clap(long, env = "FRONTEGG_ADMIN_ROLE", requires = "frontegg-tenant")]
frontegg_admin_role: Option<String>,
}