authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-10-05 11:56:01-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-10-05 15:36:02-07:00
log3bf9328875537be8dc3ab53792a4596b0ab4e1bf
tree9ddf0a44fd5130b12b7cae9b10dd5c829e34b7b6
parent3873b6a5bbe78baba32102186b613d984331144c
signature Signed by SSH key SHA256:52mNGHRsVFBDED9IAX5pe+LRWUefqTbxEReunq21QvU

Match the Astheno OAuth client token request format

Send Basic credentials alongside form credentials and the state field used by Astheno’s OAuth client library. Record only rejected code length and character shape for diagnosis. Assisted-by: gpt-6

1 files changed, 14 insertions(+), 2 deletions(-)

dashboard/src/guest.rs+14-2
...@@ -325,9 +325,12 @@ async fn exchange(...@@ -325,9 +325,12 @@ async fn exchange(
325 })?;325 })?;
326 return Ok((id.to_string(), login.to_owned()));326 return Ok((id.to_string(), login.to_owned()));
327 }327 }
328 let mut form = form.to_vec();
329 form.push(("state", "none"));
328 let token = json_bytes(330 let token = json_bytes(
329 &response_bytes(331 &response_bytes(
330 http.post(format!("{ASTHENO}/api/token"))332 http.post(format!("{ASTHENO}/api/token"))
333 .basic_auth(client, Some(secret))
331 .form(&form)334 .form(&form)
332 .send()335 .send()
333 .await?,336 .await?,
...@@ -557,8 +560,17 @@ async fn handle(app: &App, request: Request) -> Result<Response> {...@@ -557,8 +560,17 @@ async fn handle(app: &App, request: Request) -> Result<Response> {
557 headers560 headers
558 })561 })
559 .build()?;562 .build()?;
560 let (subject, name) =563 let (subject, name) = exchange(&http, provider, &client, &secret, code, &callback, &flow)
561 exchange(&http, provider, &client, &secret, code, &callback, &flow).await?;564 .await
565 .map_err(|error| {
566 eprintln!(
567 "guest rejected code: {provider} length {} whitespace {} dots {}",
568 code.len(),
569 code.bytes().any(|c| c.is_ascii_whitespace()),
570 code.bytes().filter(|c| *c == b'.').count()
571 );
572 error
573 })?;
562 let id = account(auth, provider, &subject, &name)?;574 let id = account(auth, provider, &subject, &name)?;
563 auth.create_session(&id, "dashboard", headers, None)575 auth.create_session(&id, "dashboard", headers, None)
564 }576 }