| ... | @@ -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 | headers | 560 | 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 | } |