From f4c4ad2e08a16f4d7691c25a8e7a6ecd205e3406 Mon Sep 17 00:00:00 2001 From: mia Date: Tue, 7 May 2024 12:57:19 -0700 Subject: refactor /scopes --- src/server/account.rs | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'src/server/account.rs') diff --git a/src/server/account.rs b/src/server/account.rs index b2c294f..8f9ae61 100644 --- a/src/server/account.rs +++ b/src/server/account.rs @@ -2,7 +2,7 @@ use std::time::SystemTime; use axum::{ body::Body, - extract::State, + extract::{Path, State}, http::{HeaderMap, StatusCode, Uri}, response::{IntoResponse, Response}, routing::get, @@ -18,7 +18,7 @@ use super::{account_auth, render_html, ApiState}; pub fn bind(app: Router) -> Router { app.route("/", get(get_panel)) - .route("/scopes", get(get_scopes)) + .route("/scopes/:token", get(get_scopes)) .route("/handoff", get(get_handoff)) } @@ -41,10 +41,30 @@ fn render_normal_panel(name: String) -> Response { } #[axum::debug_handler(state = ApiState)] -async fn get_scopes(jar: CookieJar, State(store): State) -> Result { - let name = account_auth(&jar, &store).await.prompt_login()?; - let account = store.get_account(&name).await.prompt_logout()?; - let body = account.scopes.join(" "); +async fn get_scopes( + Path(token): Path, + State(store): State, +) -> Result { + let error_response = || { + Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::empty()) + .unwrap() + }; + let mut parts = Vec::new(); + let (name, expires) = store.check_token(&token).await.ok_or_else(error_response)?; + parts.push( + expires + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs() + .to_string(), + ); + { + let account = store.get_account(&name).await.ok_or_else(error_response)?; + parts.extend(account.scopes.iter().cloned()); + }; + let body = parts.join("\n"); Ok(Response::builder() .status(StatusCode::OK) -- cgit 1.4.1