From 16ef1147fef04c9e526c1723941c958e1a674520 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Fri, 2 May 2025 08:56:51 +0200 Subject: [PATCH] Add support for statistics routes --- .../2025-03-17-173101_initial_structure/up.sql | 3 ++- .../src/controllers/tokens_controller.rs | 2 ++ moneymgr_backend/src/extractors/auth_extractor.rs | 3 ++- moneymgr_backend/src/models/tokens.rs | 2 ++ moneymgr_backend/src/schema.rs | 1 + moneymgr_backend/src/services/tokens_service.rs | 2 ++ moneymgr_web/src/api/TokensApi.ts | 2 ++ moneymgr_web/src/dialogs/CreateTokenDialog.tsx | 14 ++++++++++++++ moneymgr_web/src/routes/TokensRoute.tsx | 6 ++++++ 9 files changed, 33 insertions(+), 2 deletions(-) diff --git a/moneymgr_backend/migrations/2025-03-17-173101_initial_structure/up.sql b/moneymgr_backend/migrations/2025-03-17-173101_initial_structure/up.sql index f722c64..5c04ebd 100644 --- a/moneymgr_backend/migrations/2025-03-17-173101_initial_structure/up.sql +++ b/moneymgr_backend/migrations/2025-03-17-173101_initial_structure/up.sql @@ -22,7 +22,8 @@ CREATE TABLE tokens right_movement BOOLEAN NOT NULL DEFAULT false, right_inbox BOOLEAN NOT NULL DEFAULT false, right_file BOOLEAN NOT NULL DEFAULT false, - right_auth BOOLEAN NOT NULL DEFAULT false + right_auth BOOLEAN NOT NULL DEFAULT false, + right_stats BOOLEAN NOT NULL DEFAULT false ); CREATE TABLE files diff --git a/moneymgr_backend/src/controllers/tokens_controller.rs b/moneymgr_backend/src/controllers/tokens_controller.rs index 6c759b3..ba58355 100644 --- a/moneymgr_backend/src/controllers/tokens_controller.rs +++ b/moneymgr_backend/src/controllers/tokens_controller.rs @@ -17,6 +17,7 @@ pub struct CreateTokenBody { right_inbox: bool, right_file: bool, right_auth: bool, + right_stats: bool, } #[derive(serde::Serialize)] @@ -61,6 +62,7 @@ pub async fn create(auth: AuthExtractor, req: web::Json) -> Htt right_inbox: req.right_inbox, right_file: req.right_file, right_auth: req.right_auth, + right_stats: req.right_stats, }) .await?; diff --git a/moneymgr_backend/src/extractors/auth_extractor.rs b/moneymgr_backend/src/extractors/auth_extractor.rs index a164d40..a678858 100644 --- a/moneymgr_backend/src/extractors/auth_extractor.rs +++ b/moneymgr_backend/src/extractors/auth_extractor.rs @@ -145,7 +145,8 @@ impl FromRequest for AuthExtractor { || (uri.starts_with("/api/movement") && token.right_movement) || (uri.starts_with("/api/inbox") && token.right_inbox) || (uri.starts_with("/api/file") && token.right_file) - || (uri.starts_with("/api/auth/") && token.right_auth); + || (uri.starts_with("/api/auth/") && token.right_auth) + || (uri.starts_with("/api/stats") && token.right_stats); if !authorized { return Err(actix_web::error::ErrorBadRequest( diff --git a/moneymgr_backend/src/models/tokens.rs b/moneymgr_backend/src/models/tokens.rs index 9b69e9e..e0af53a 100644 --- a/moneymgr_backend/src/models/tokens.rs +++ b/moneymgr_backend/src/models/tokens.rs @@ -34,6 +34,7 @@ pub struct Token { pub right_inbox: bool, pub right_file: bool, pub right_auth: bool, + pub right_stats: bool, } impl Token { @@ -78,4 +79,5 @@ pub struct NewToken<'a> { pub right_inbox: bool, pub right_file: bool, pub right_auth: bool, + pub right_stats: bool, } diff --git a/moneymgr_backend/src/schema.rs b/moneymgr_backend/src/schema.rs index 27e1c47..308313e 100644 --- a/moneymgr_backend/src/schema.rs +++ b/moneymgr_backend/src/schema.rs @@ -75,6 +75,7 @@ diesel::table! { right_inbox -> Bool, right_file -> Bool, right_auth -> Bool, + right_stats -> Bool, } } diff --git a/moneymgr_backend/src/services/tokens_service.rs b/moneymgr_backend/src/services/tokens_service.rs index c39f26e..30d9fe6 100644 --- a/moneymgr_backend/src/services/tokens_service.rs +++ b/moneymgr_backend/src/services/tokens_service.rs @@ -19,6 +19,7 @@ pub struct NewTokenInfo { pub right_inbox: bool, pub right_file: bool, pub right_auth: bool, + pub right_stats: bool, } /// Create a new token @@ -39,6 +40,7 @@ pub async fn create(new_token: NewTokenInfo) -> anyhow::Result { right_movement: new_token.right_movement, right_inbox: new_token.right_inbox, right_file: new_token.right_file, + right_stats: new_token.right_stats, }; let res = diesel::insert_into(tokens::table) diff --git a/moneymgr_web/src/api/TokensApi.ts b/moneymgr_web/src/api/TokensApi.ts index 13d2af3..09766f4 100644 --- a/moneymgr_web/src/api/TokensApi.ts +++ b/moneymgr_web/src/api/TokensApi.ts @@ -14,6 +14,7 @@ export interface Token { right_inbox: boolean; right_file: boolean; right_auth: boolean; + right_stats: boolean; } export interface TokenWithSecret extends Token { @@ -30,6 +31,7 @@ export interface NewToken { right_inbox: boolean; right_file: boolean; right_auth: boolean; + right_stats: boolean; } export class TokensApi { diff --git a/moneymgr_web/src/dialogs/CreateTokenDialog.tsx b/moneymgr_web/src/dialogs/CreateTokenDialog.tsx index 0aa9790..38be4da 100644 --- a/moneymgr_web/src/dialogs/CreateTokenDialog.tsx +++ b/moneymgr_web/src/dialogs/CreateTokenDialog.tsx @@ -36,6 +36,7 @@ export function CreateTokenDialog(p: { right_auth: false, right_inbox: false, right_movement: false, + right_stats: false, }; const clearForm = () => { @@ -77,6 +78,7 @@ export function CreateTokenDialog(p: { right_file: true, right_auth: true, right_inbox: true, + right_stats: false, }); }; @@ -202,6 +204,18 @@ export function CreateTokenDialog(p: { }); }} /> +
+ { + setNewToken({ + ...newToken, + right_stats: v, + }); + }} + /> diff --git a/moneymgr_web/src/routes/TokensRoute.tsx b/moneymgr_web/src/routes/TokensRoute.tsx index f5f6482..314be08 100644 --- a/moneymgr_web/src/routes/TokensRoute.tsx +++ b/moneymgr_web/src/routes/TokensRoute.tsx @@ -191,6 +191,12 @@ function TokensRouteInner(p: { flex: 2, type: "boolean", }, + { + field: "right_stats", + headerName: "Stats", + flex: 2, + type: "boolean", + }, { field: "actions", type: "actions",