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

Function login_handler

chirpstack/src/api/oidc.rs:53–89  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

51}
52
53pub async fn login_handler() -> Response {
54 let client = match get_client().await {
55 Ok(v) => v,
56 Err(e) => {
57 error!(error = %e.full(), "Get OIDC client error");
58 return (StatusCode::INTERNAL_SERVER_ERROR, "Internal error").into_response();
59 }
60 };
61
62 let (pkce_challenge, pkce_verifier) = PkceCodeChallenge::new_random_sha256();
63
64 let conf = config::get();
65 let mut request = client.authorize_url(
66 AuthenticationFlow::<CoreResponseType>::AuthorizationCode,
67 CsrfToken::new_random,
68 Nonce::new_random,
69 );
70 for scope in &conf.user_authentication.openid_connect.scopes {
71 request = request.add_scope(Scope::new(scope.to_string()))
72 }
73
74 request = request.set_pkce_challenge(pkce_challenge);
75
76 let (auth_url, csrf_state, nonce) = request.url();
77
78 if let Err(e) = store_nonce(&csrf_state, &nonce).await {
79 error!(error = %e.full(), "Store nonce error");
80 return (StatusCode::INTERNAL_SERVER_ERROR, "Internal error").into_response();
81 }
82
83 if let Err(e) = store_verifier(&csrf_state, &pkce_verifier).await {
84 error!(error = %e.full(), "Store PKCE verifier error");
85 return (StatusCode::INTERNAL_SERVER_ERROR, "Internal error").into_response();
86 }
87
88 Redirect::temporary(auth_url.as_str()).into_response()
89}
90
91pub async fn callback_handler(args: Query<CallbackArgs>) -> Response {
92 let args: CallbackArgs = args.0;

Callers

nothing calls this directly

Calls 5

store_nonceFunction · 0.85
to_stringMethod · 0.80
get_clientFunction · 0.70
store_verifierFunction · 0.70
getFunction · 0.50

Tested by

no test coverage detected