From 65dfd6c540545e435946e3583c2fa2c173193225 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Wed, 1 Jan 2025 20:26:03 +1300 Subject: [PATCH] send json body instead of multipart --- meshchat.py | 38 +++++-------------- .../interfaces/ImportInterfacesModal.vue | 16 ++++---- 2 files changed, 16 insertions(+), 38 deletions(-) diff --git a/meshchat.py b/meshchat.py index d4a1174..d43e812 100644 --- a/meshchat.py +++ b/meshchat.py @@ -616,16 +616,10 @@ class ReticulumMeshChat: @routes.post("/api/v1/reticulum/interfaces/import-preview") async def import_interfaces_preview(request): try: - reader = await request.multipart() - - field = await reader.next() - if field.name == 'config': - config_text = '' - while True: - chunk = await field.read_chunk() - if not chunk: - break - config_text += chunk.decode('utf-8') + + # get request data + data = await request.json() + config_text = data.get('config') interfaces = [] current_interface = None @@ -665,25 +659,11 @@ class ReticulumMeshChat: @routes.post("/api/v1/reticulum/interfaces/import") async def import_interfaces(request): try: - reader = await request.multipart() - config_text = None - selected_interfaces = None - - while True: - field = await reader.next() - if field is None: - break - - if field.name == 'config': - config_text = '' - while True: - chunk = await field.read_chunk() - if not chunk: - break - config_text += chunk.decode('utf-8') - elif field.name == 'selected_interfaces': - data = await field.read(decode=True) - selected_interfaces = json.loads(data) + + # get request data + data = await request.json() + config_text = data.get('config') + selected_interfaces = data.get('selected_interfaces') print(f"Selected interfaces: {selected_interfaces}") current_interface = None diff --git a/src/frontend/components/interfaces/ImportInterfacesModal.vue b/src/frontend/components/interfaces/ImportInterfacesModal.vue index 9003815..d913163 100644 --- a/src/frontend/components/interfaces/ImportInterfacesModal.vue +++ b/src/frontend/components/interfaces/ImportInterfacesModal.vue @@ -109,9 +109,9 @@ export default { try { // fetch preview of interfaces to import - const formData = new FormData(); - formData.append('config', file); - const response = await window.axios.post('/api/v1/reticulum/interfaces/import-preview', formData); + const response = await window.axios.post('/api/v1/reticulum/interfaces/import-preview', { + config: await file.text(), + }); // ensure there are some interfaces available to import if(!response.data.interfaces || response.data.interfaces.length === 0){ @@ -172,15 +172,13 @@ export default { return; } - // create form data to send to server - const formData = new FormData(); - formData.append('config', this.selectedFile); - formData.append('selected_interfaces', JSON.stringify(this.selectedInterfaces)); - try { // import interfaces - await window.axios.post('/api/v1/reticulum/interfaces/import', formData); + await window.axios.post('/api/v1/reticulum/interfaces/import', { + config: await this.selectedFile.text(), + selected_interfaces: this.selectedInterfaces, + }); // dismiss modal this.dismiss();