MCPcopy Create free account
hub / github.com/chirpstack/chirpstack / get_user

Function get_user

chirpstack/src/api/oidc.rs:97–129  ·  view source on GitHub ↗
(code: &str, state: &str)

Source from the content-addressed store, hash-verified

95}
96
97pub async fn get_user(code: &str, state: &str) -> Result<User> {
98 let state = CsrfToken::new(state.to_string());
99 let nonce = get_nonce(&state).await?;
100 let pkce_verifier = get_verifier(&state).await?;
101 let client = get_client().await?;
102
103 let http_client = reqwest::ClientBuilder::new()
104 .redirect(reqwest::redirect::Policy::none())
105 .build()?;
106
107 let token_response = client
108 .exchange_code(AuthorizationCode::new(code.to_string()))?
109 .set_pkce_verifier(pkce_verifier)
110 .request_async(&http_client)
111 .await?;
112
113 let id_token_verifier: CoreIdTokenVerifier = client.id_token_verifier();
114 let _id_token_claims: &CoreIdTokenClaims = token_response
115 .extra_fields()
116 .id_token()
117 .context("Server did not return an ID token")?
118 .claims(&id_token_verifier, &nonce)
119 .context("Failed to verify ID token")?;
120
121 let userinfo_claims: User = client
122 .user_info(token_response.access_token().to_owned(), None)
123 .context("No user info endpoint")?
124 .request_async(&http_client)
125 .await
126 .context("Failed requesting user info")?;
127
128 Ok(userinfo_claims)
129}
130
131async fn store_nonce(state: &CsrfToken, nonce: &Nonce) -> Result<()> {
132 trace!("Storing nonce");

Callers 3

open_id_connect_loginMethod · 0.70
o_auth2_loginMethod · 0.70
get_userMethod · 0.70

Calls 4

get_nonceFunction · 0.85
to_stringMethod · 0.80
get_verifierFunction · 0.70
get_clientFunction · 0.70

Tested by

no test coverage detected