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 5c04ebd..899fc77 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 @@ -23,7 +23,8 @@ CREATE TABLE tokens right_inbox BOOLEAN NOT NULL DEFAULT false, right_file BOOLEAN NOT NULL DEFAULT false, right_auth BOOLEAN NOT NULL DEFAULT false, - right_stats BOOLEAN NOT NULL DEFAULT false + right_stats BOOLEAN NOT NULL DEFAULT false, + right_backup 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 ba58355..28509ea 100644 --- a/moneymgr_backend/src/controllers/tokens_controller.rs +++ b/moneymgr_backend/src/controllers/tokens_controller.rs @@ -18,6 +18,7 @@ pub struct CreateTokenBody { right_file: bool, right_auth: bool, right_stats: bool, + right_backup: bool, } #[derive(serde::Serialize)] @@ -63,6 +64,7 @@ pub async fn create(auth: AuthExtractor, req: web::Json) -> Htt right_file: req.right_file, right_auth: req.right_auth, right_stats: req.right_stats, + right_backup: req.right_backup, }) .await?; diff --git a/moneymgr_backend/src/extractors/auth_extractor.rs b/moneymgr_backend/src/extractors/auth_extractor.rs index a678858..7470d61 100644 --- a/moneymgr_backend/src/extractors/auth_extractor.rs +++ b/moneymgr_backend/src/extractors/auth_extractor.rs @@ -146,7 +146,8 @@ impl FromRequest for AuthExtractor { || (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/stats") && token.right_stats); + || (uri.starts_with("/api/stats") && token.right_stats) + || (uri.starts_with("/api/backup") && token.right_backup); 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 e0af53a..134fe9b 100644 --- a/moneymgr_backend/src/models/tokens.rs +++ b/moneymgr_backend/src/models/tokens.rs @@ -35,6 +35,7 @@ pub struct Token { pub right_file: bool, pub right_auth: bool, pub right_stats: bool, + pub right_backup: bool, } impl Token { @@ -80,4 +81,5 @@ pub struct NewToken<'a> { pub right_file: bool, pub right_auth: bool, pub right_stats: bool, + pub right_backup: bool, } diff --git a/moneymgr_backend/src/schema.rs b/moneymgr_backend/src/schema.rs index 308313e..7507ec2 100644 --- a/moneymgr_backend/src/schema.rs +++ b/moneymgr_backend/src/schema.rs @@ -76,6 +76,7 @@ diesel::table! { right_file -> Bool, right_auth -> Bool, right_stats -> Bool, + right_backup -> Bool, } } diff --git a/moneymgr_backend/src/services/tokens_service.rs b/moneymgr_backend/src/services/tokens_service.rs index 30d9fe6..5674943 100644 --- a/moneymgr_backend/src/services/tokens_service.rs +++ b/moneymgr_backend/src/services/tokens_service.rs @@ -20,6 +20,7 @@ pub struct NewTokenInfo { pub right_file: bool, pub right_auth: bool, pub right_stats: bool, + pub right_backup: bool, } /// Create a new token @@ -41,6 +42,7 @@ pub async fn create(new_token: NewTokenInfo) -> anyhow::Result { right_inbox: new_token.right_inbox, right_file: new_token.right_file, right_stats: new_token.right_stats, + right_backup: new_token.right_backup, }; let res = diesel::insert_into(tokens::table) diff --git a/moneymgr_web/src/api/TokensApi.ts b/moneymgr_web/src/api/TokensApi.ts index 09766f4..d0b040b 100644 --- a/moneymgr_web/src/api/TokensApi.ts +++ b/moneymgr_web/src/api/TokensApi.ts @@ -32,6 +32,7 @@ export interface NewToken { right_file: boolean; right_auth: boolean; right_stats: boolean; + right_backup: boolean; } export class TokensApi { diff --git a/moneymgr_web/src/dialogs/CreateTokenDialog.tsx b/moneymgr_web/src/dialogs/CreateTokenDialog.tsx index 38be4da..2d5f88b 100644 --- a/moneymgr_web/src/dialogs/CreateTokenDialog.tsx +++ b/moneymgr_web/src/dialogs/CreateTokenDialog.tsx @@ -37,6 +37,7 @@ export function CreateTokenDialog(p: { right_inbox: false, right_movement: false, right_stats: false, + right_backup: false, }; const clearForm = () => { @@ -79,6 +80,7 @@ export function CreateTokenDialog(p: { right_auth: true, right_inbox: true, right_stats: false, + right_backup: false, }); }; @@ -216,6 +218,18 @@ export function CreateTokenDialog(p: { }); }} /> +
+ { + setNewToken({ + ...newToken, + right_backup: v, + }); + }} + /> diff --git a/moneymgr_web/src/routes/TokensRoute.tsx b/moneymgr_web/src/routes/TokensRoute.tsx index 314be08..32bed73 100644 --- a/moneymgr_web/src/routes/TokensRoute.tsx +++ b/moneymgr_web/src/routes/TokensRoute.tsx @@ -197,6 +197,12 @@ function TokensRouteInner(p: { flex: 2, type: "boolean", }, + { + field: "right_backup", + headerName: "Backup", + flex: 2, + type: "boolean", + }, { field: "actions", type: "actions",