From d7929e7e9fee879a28871c2195620869db291441 Mon Sep 17 00:00:00 2001 From: HampusM Date: Mon, 5 Sep 2022 17:57:28 +0200 Subject: feat: add authentication --- examples/access_token/main.rs | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 examples/access_token/main.rs (limited to 'examples/access_token/main.rs') diff --git a/examples/access_token/main.rs b/examples/access_token/main.rs new file mode 100644 index 0000000..d9b4d79 --- /dev/null +++ b/examples/access_token/main.rs @@ -0,0 +1,52 @@ +use std::error::Error; + +use anyhow::Context; +use config::Config; +use deez::auth::{request_access_token, AuthPromptHandler}; +use serde::Deserialize; + +#[derive(Deserialize)] +struct Settings +{ + app_id: u32, + secret_key: String, + address: String, + port: u16, + uri_scheme: String, +} + +#[tokio::main] +async fn main() -> Result<(), Box> +{ + let settings = Config::builder() + .add_source(config::File::with_name("examples/access_token/Settings")) + .build() + .with_context(|| "Failed to read settings")? + .try_deserialize::() + .with_context(|| "Invalid settings")?; + + let auth_code_prompt_info = AuthPromptHandler::run( + settings.app_id, + settings.address, + settings.port, + settings.uri_scheme, + ) + .await?; + + println!("{}", auth_code_prompt_info.auth_prompt_url); + + let auth_code = auth_code_prompt_info.handler.await??; + + println!("Retrieved authentication code '{}'", auth_code); + + let access_token = + request_access_token(settings.app_id, settings.secret_key, auth_code).await?; + + println!( + "Retrieved access token '{}' which expires in {} seconds", + access_token.access_token, + access_token.expires.as_secs() + ); + + Ok(()) +} -- cgit v1.2.3-18-g5258