use simple_oauth::{SimpleOAuthClient, types::OAuthCredentials};
#[tokio::main]
pub async fn main() {
let callback_url = "http://myserver/auth/github/callback";
let oauth_client = SimpleOAuthClient::builder()
.provider(simple_oauth::common::GitHub)
.credentials(OAuthCredentials::new("client-id", "client-secret"))
.redirect_url(callback_url)
.http_client(&reqwest::Client::new()) .build()
.unwrap();
let auth_url = oauth_client
.authorize_url()
.scopes(&["read:user", "user:email"]) .build()
.unwrap();
let initial_state = auth_url.state;
let pkce_verifier = auth_url.pkce_verifier;
let code = "returned_code";
let state = "returned_state";
let token_response = oauth_client
.exchange_code()
.code(code) .state(state)
.initial_state(&initial_state) .pkce_verifier(pkce_verifier)
.build()
.await
.unwrap();
let user_info = oauth_client
.get_user_info(&token_response.access_token)
.await
.unwrap();
let _id = user_info.id;
let _name = user_info.name;
let _email = user_info.email;
let _new_token_response = oauth_client
.exchange_refresh_token()
.refresh_token(token_response.refresh_token.unwrap())
.build()
.await
.unwrap();
}