diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 35 |
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() |