From 5c1204da762f438b2f37e00bf64a3231d3ccf35c Mon Sep 17 00:00:00 2001 From: Aryan Date: Thu, 13 Feb 2025 09:40:39 +0530 Subject: [PATCH 1/3] Fixes static url auth --- src/api/utils.js | 20 ++++++++++++++++++++ src/components/ChallCard.vue | 6 ++++-- src/views/AdminChallenge.vue | 5 +++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/api/utils.js b/src/api/utils.js index 1485832..ef482ab 100644 --- a/src/api/utils.js +++ b/src/api/utils.js @@ -1,3 +1,6 @@ +import {CONFIG }from '../config/config'; +import axiosInstance from './axiosInstance'; + export default { async saveAsFile(data, filename, filetype) { let blob = new Blob([data], { type: filetype }); @@ -23,5 +26,22 @@ export default { } return str; + }, + async downloadFileURL(name,asset,url) { + const fullUrl = `${url}api/info/download?challenge=${name}&asset=${asset}`; + + try { + const response = await axiosInstance({ + method: 'get', + url: fullUrl, + responseType: 'blob' + }); + + const downloadUrl = window.URL.createObjectURL(new Blob([response.data])); + return downloadUrl; + } catch (error) { + console.error('There has been a problem with your axios operation:', error); + } } }; + diff --git a/src/components/ChallCard.vue b/src/components/ChallCard.vue index afd1edc..0c8cd51 100644 --- a/src/components/ChallCard.vue +++ b/src/components/ChallCard.vue @@ -110,6 +110,7 @@ import FlagService from "../api/userAPI"; import Button from "@/components/Button.vue"; import HintsService from "../api/admin/hintsAPI"; +import Utils from "../api/utils"; import { CONFIG } from "@/config/config"; export default { @@ -265,8 +266,9 @@ export default { } }, getStaticUrl(name, asset) { - let url = CONFIG.staticRoot; - return `${url}api/info/download?challenge=${name}&asset=${asset}`; + const url = CONFIG.staticRoot; + const downloadUrl = Utils.downloadFileURL(name, asset, url); + return downloadUrl; }, getFileFromAsset(asset) { let paths = asset.split("/"); diff --git a/src/views/AdminChallenge.vue b/src/views/AdminChallenge.vue index aa7557a..361cab6 100644 --- a/src/views/AdminChallenge.vue +++ b/src/views/AdminChallenge.vue @@ -248,8 +248,9 @@ export default { return `${CONFIG.webRoot}:${port}`; }, getStaticUrl(name, asset) { - let url = CONFIG.staticRoot; - return `${url}api/info/download?challenge=${name}&asset=${asset}`; + const url = CONFIG.staticRoot; + const downloadUrl = Utils.downloadFileUrl(name, asset,url); + return downloadUrl; }, getFileFromAsset(asset) { let paths = asset.split("/"); From 918182928cb689ed9cff92b1a31fe3de04f4f63f Mon Sep 17 00:00:00 2001 From: sukhman Date: Thu, 13 Feb 2025 10:42:49 +0530 Subject: [PATCH 2/3] minor fix --- src/views/AdminChallenge.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/views/AdminChallenge.vue b/src/views/AdminChallenge.vue index 361cab6..aa92c31 100644 --- a/src/views/AdminChallenge.vue +++ b/src/views/AdminChallenge.vue @@ -199,6 +199,7 @@ import { play, purge, undeploy, edit } from "../constants/images"; import SpinLoader from "../components/spinLoader.vue"; import { CONFIG } from "@/config/config"; import EditChallModal from "../components/EditChallModal.vue"; +import Utils from "../api/utils" export default { components: { BarGraphVertical, AdminTable, SpinLoader, EditChallModal }, name: "AdminChallenge", From 7b02349ce1b7fe57a63c6a4210ff0019081b31c3 Mon Sep 17 00:00:00 2001 From: sukhman Date: Thu, 13 Feb 2025 10:51:46 +0530 Subject: [PATCH 3/3] minor fix --- src/api/utils.js | 33 ++++++++++++++++++++++----------- src/views/AdminChallenge.vue | 2 +- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/api/utils.js b/src/api/utils.js index ef482ab..f6c8ecb 100644 --- a/src/api/utils.js +++ b/src/api/utils.js @@ -27,21 +27,32 @@ export default { return str; }, - async downloadFileURL(name,asset,url) { +async downloadFileURL(name, asset, url) { const fullUrl = `${url}api/info/download?challenge=${name}&asset=${asset}`; try { - const response = await axiosInstance({ - method: 'get', - url: fullUrl, - responseType: 'blob' - }); - - const downloadUrl = window.URL.createObjectURL(new Blob([response.data])); - return downloadUrl; + const response = await axiosInstance({ + method: 'get', + url: fullUrl, + responseType: 'blob', // Ensure binary data is handled properly + }); + + const blob = new Blob([response.data]); + const downloadUrl = window.URL.createObjectURL(blob); + + // Create a link element and trigger the download + const link = document.createElement('a'); + link.href = downloadUrl; + link.setAttribute('download', asset); // Set the filename + document.body.appendChild(link); + link.click(); + link.remove(); + + return downloadUrl; } catch (error) { - console.error('There has been a problem with your axios operation:', error); + console.error('There has been a problem with your axios operation:', error); } - } +} + }; diff --git a/src/views/AdminChallenge.vue b/src/views/AdminChallenge.vue index aa92c31..25441a9 100644 --- a/src/views/AdminChallenge.vue +++ b/src/views/AdminChallenge.vue @@ -250,7 +250,7 @@ export default { }, getStaticUrl(name, asset) { const url = CONFIG.staticRoot; - const downloadUrl = Utils.downloadFileUrl(name, asset,url); + const downloadUrl = Utils.downloadFileURL(name, asset,url); return downloadUrl; }, getFileFromAsset(asset) {