Post ID token to Central

This commit is contained in:
Grant Limberg 2021-12-03 09:57:39 -08:00
commit 7a8c89be9d
No known key found for this signature in database
GPG key ID: 2BA62CCABBB4095A
4 changed files with 223 additions and 50 deletions

View file

@ -210,7 +210,7 @@ pub extern "C" fn zeroidc_get_url_param_value(param: *const c_char, path: *const
let url = "http://localhost:9993".to_string() + path;
let url = Url::parse(&url).unwrap();
let mut pairs = url.query_pairs();
let pairs = url.query_pairs();
for p in pairs {
if p.0 == param {
let s = CString::new(p.1.into_owned()).unwrap();

View file

@ -13,8 +13,10 @@ use openidconnect::reqwest::http_client;
use openidconnect::{AuthenticationFlow, PkceCodeVerifier, TokenResponse, OAuth2TokenResponse};
use openidconnect::{AuthorizationCode, ClientId, CsrfToken, IssuerUrl, Nonce, PkceCodeChallenge, RedirectUrl, RequestTokenError, Scope};
use reqwest::blocking::Client;
use url::Url;
use std::borrow::BorrowMut;
pub struct ZeroIDC {
inner: Arc<Mutex<Inner>>,
@ -159,7 +161,8 @@ impl ZeroIDC {
return Some(res);
},
Err(e) => {
println!("token response error");
println!("token response error: {}", e.to_string());
return None;
},
}
@ -167,11 +170,37 @@ impl ZeroIDC {
// TODO: do stuff with token response
if let Some(Some(tok)) = token_response {
let id_token = tok.id_token().unwrap();
println!("ID token: {}", id_token.to_string());
let split = auth_info.csrf_token.secret().split("_");
let split = split.collect::<Vec<&str>>();
let params = [("id_token", id_token.to_string()),("state", split[0].to_string())];
let client = reqwest::blocking::Client::new();
let res = client.post((*self.inner.lock().unwrap()).auth_endpoint.clone())
.form(&params)
.send();
match res {
Ok(res) => {
println!("hit url: {}", res.url().as_str());
println!("Status: {}", res.status());
},
Err(res) => {
println!("hit url: {}", res.url().unwrap().as_str());
println!("Status: {}", res.status().unwrap());
println!("Post error: {}", res.to_string());
}
}
let claims = (*self.inner.lock().unwrap()).oidc_client.as_ref().map(|c| {
});
let access_token = tok.access_token();
println!("Access Token: {}", access_token.secret());
let refresh_token = tok.refresh_token();
println!("Refresh Token: {}", refresh_token.unwrap().secret());
}
} else {
println!("No pkce verifier! Can't exchange tokens!!!");