summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
index ec91ec1..f979e2e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -34,15 +34,22 @@ struct Args {
/// variable.
#[arg(long = "secret")]
client_secret: Option<String>,
+
/// Scopes that must be present for the request to succeed.
#[arg(long = "scope")]
scope: Vec<String>,
/// The URL of the Authorization endpoint.
- auth_url: Url,
+ /// This may also be provided through the OAUTH2_AUTHORIZATION_URL
+ /// environment variable.
+ #[arg(long = "authorization-url")]
+ auth_url: Option<Url>,
/// The URL of the token introspection endpoint.
- introspection_url: Url,
+ /// This may also be provided through the OAUTH2_INTROSPECTION_URL
+ /// environment variable.
+ #[arg(long = "introspection-url")]
+ introspection_url: Option<Url>,
/// The command to run if authorized.
command: String,
@@ -81,13 +88,33 @@ fn handle_request() -> Result<Response<Option<String>>, Error> {
.or_else(|| env::var("OAUTH2_CLIENT_SECRET").ok())
.map(ClientSecret::new);
+ let auth_url = args
+ .auth_url
+ .or_else(|| {
+ env::var("OAUTH2_AUTHORIZATION_URL")
+ .ok()
+ .and_then(|url| url.parse().ok())
+ })
+ .map(AuthUrl::from_url)
+ .expect("Missing required argument --authorization-url");
+
+ let introspection_url = args
+ .introspection_url
+ .or_else(|| {
+ env::var("OAUTH2_INTROSPECTION_URL")
+ .ok()
+ .and_then(|url| url.parse().ok())
+ })
+ .map(IntrospectionUrl::from_url)
+ .expect("Missing required argument --introspection-url");
+
let client = Client::new(
client_id,
client_secret,
- AuthUrl::from_url(args.auth_url),
+ auth_url,
None,
)
- .set_introspection_uri(IntrospectionUrl::from_url(args.introspection_url));
+ .set_introspection_uri(introspection_url);
let access_token = env::var("HTTP_AUTHORIZATION")
.ok()