From 6cdbc92ae3f6b8758eecd5fc8cfa2ccfb7934fa0 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Mon, 17 Jun 2024 18:32:33 -0400 Subject: [PATCH] tweak: add dry-run and tweak response for /share --- packages/backend/src/routers/share.js | 42 +++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/routers/share.js b/packages/backend/src/routers/share.js index 1906477a..c128d91f 100644 --- a/packages/backend/src/routers/share.js +++ b/packages/backend/src/routers/share.js @@ -180,7 +180,7 @@ const v0_2 = async (req, res) => { // === Request Values === - const mode = + const strict_mode = validate_mode.if(req.body.mode) ?? false; const req_recipients = validate_recipients.if(req.body.recipients) ?? []; @@ -191,6 +191,12 @@ const v0_2 = async (req, res) => { const recipients = []; const result = { + // Metadata + $: 'api:share', + $version: 'v0.0.0', + + // Results + status: null, recipients: Array(req_recipients.length).fill(null), paths: Array(req_paths.length).fill(null), } @@ -211,24 +217,30 @@ const v0_2 = async (req, res) => { for ( let i=0 ; i < result.recipients.length ; i++ ) { if ( ! result.recipients[i] ) continue; if ( result.recipients[i] instanceof APIError ) { + result.status = 'mixed'; result.recipients[i] = result.recipients[i].serialize(); } } for ( let i=0 ; i < result.paths.length ; i++ ) { if ( ! result.paths[i] ) continue; if ( result.paths[i] instanceof APIError ) { + result.status = 'mixed'; result.paths[i] = result.paths[i].serialize(); } } }; const strict_check = () =>{ - if ( mode !== 'strict' ) return; + if ( ! strict_mode ) return; + console.log('OK'); if ( result.recipients.some(v => v !== null) || result.paths.some(v => v !== null) ) { + console.log('DOESNT THIS??') serialize_result(); + result.status = 'aborted'; res.status(218).send(result); + console.log('HOWW???'); return true; } } @@ -397,8 +409,28 @@ const v0_2 = async (req, res) => { } fsitems_work.clear_invalid(); + + // Mark files as successful; further errors will be + // reported on recipients instead. + for ( const item of fsitems_work.list() ) { + result.paths[item.i] = + { $: 'api:status-report', status: 'success' }; + } if ( strict_check() ) return; + if ( req.body.dry_run ) { + // Mark everything left as successful + for ( const item of recipients_work.list() ) { + result.recipients[item.i] = + { $: 'api:status-report', status: 'success' }; + } + + result.status = 'success'; + result.dry_run = true; + serialize_result(); + res.send(result); + return; + } for ( const recipient_item of recipients_work.list() ) { if ( recipient_item.type !== 'username' ) continue; @@ -452,9 +484,13 @@ const v0_2 = async (req, res) => { (files.length === 1 ? 'file' : 'files') + ' ' + 'with you.', }); + + result.recipients[recipient_item.i] = + { $: 'api:status-report', statis: 'success' }; } - serialize_result(); + result.status = 'success'; + serialize_result(); // might change result.status to 'mixed' res.send(result); };