From caefd3119114a26f8cfebb0314d8bacf5f9ea9a5 Mon Sep 17 00:00:00 2001 From: luistarkbank Date: Tue, 13 Aug 2024 19:02:50 -0300 Subject: [PATCH] Fix download transfer --- CHANGELOG.md | 1 + src/.clasp.json | 2 +- src/FormDownloadTransfers.html | 31 +++++++++-- src/sdkViewTransfer.js | 11 ++-- src/utilsRequest.js | 95 ++++++++++++++++++++-------------- 5 files changed, 91 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e659f8..777aba3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ Given a version number MAJOR.MINOR.PATCH, increment: ## [Unreleased] ### Fixed - paymentRequest duplicated payment +- download transfer locally ## [0.6.5] - 2024-06-28 ### Added diff --git a/src/.clasp.json b/src/.clasp.json index f8833d9..9ae0549 100644 --- a/src/.clasp.json +++ b/src/.clasp.json @@ -1 +1 @@ -{"scriptId":"1JAupf57mwkjPaC3FFC8Ydx-yo6LkoIjnIrpQx2_95JenFfQ0G2ov4rbO","rootDir":"/Users/luis.almeida/Documents/starkbank/google-sheets/src"} \ No newline at end of file +{"scriptId":"199zM22Q3FVHJK5EOZtrz7EQ7bH5wm_vnQCu-YVI7kOz6N455TDq-XmMq"} \ No newline at end of file diff --git a/src/FormDownloadTransfers.html b/src/FormDownloadTransfers.html index 3f2d728..2fd76ce 100644 --- a/src/FormDownloadTransfers.html +++ b/src/FormDownloadTransfers.html @@ -9,7 +9,12 @@ - +
Aguarde enquanto os arquivos são baixados... @@ -20,8 +25,10 @@ \ No newline at end of file diff --git a/src/sdkViewTransfer.js b/src/sdkViewTransfer.js index d48fa3c..329cae8 100644 --- a/src/sdkViewTransfer.js +++ b/src/sdkViewTransfer.js @@ -66,16 +66,13 @@ function getTransferDownloadList(){ break; } } - if (idList.length == 0) { - Browser.msgBox("Nenhuma transferência válida (sucesso) para download listada.") - } return idList; } function TransferDownload(id) { let path = "/transfer/" + id + "/pdf"; - let pdfContent = fetchBuffer(path)[0]; + let pdfContent = fetchBuffer(path); return pdfContent; } @@ -122,6 +119,12 @@ function TransferDownloadAllLocal(){ function TransferDownloadBase64Encoded(id){ let blob = TransferDownload(id); + blob = blob[0] + let status = blob[1] + + if (status != 200) { + throw new Error(blob[0]) + } return { id: id, content: Utilities.base64Encode(blob.getBytes()) diff --git a/src/utilsRequest.js b/src/utilsRequest.js index 6d59026..a6597fb 100644 --- a/src/utilsRequest.js +++ b/src/utilsRequest.js @@ -102,65 +102,80 @@ function parseResponse(responseApi) { } -function fetchBuffer(path, method = 'GET', payload = null, query = null, version = 'v2') { +function fetchBuffer(path, method='GET', payload=null, query=null, version="v2", environment=null, privateKeyPem=null, challengeId=null) { let user = new getDefaultUser(); - let hostname = getHostname(user.environment.toLowerCase(), version); - let options = {method: method}; + if (!user.privateKey) { + throw JSON.stringify({"message": "Erro de autenticação! Por favor, faça login novamente."}); + } + if (!environment) { + environment = environment || user.environment.toLowerCase(); + } + let hostname = getHostname(environment, version); + let options = { + method: method, + muteHttpExceptions: true, + }; let url = hostname + path; if (query) { - let queryString = ''; - let separator = '?'; - for (let key in query) { - if (query[key]) { - queryString += separator + key + '=' + query[key]; - separator = '&'; + let queryString = ''; + let separator = '?'; + for (let key in query) { + if (query[key]) { + queryString += separator + key + '=' + query[key]; + separator = '&'; + } } - } - url += queryString; + url += queryString; } - paths = ["/session", "/boleto-payment"] - - if (paths.includes(path) && method != "GET") { - var accessId = KeyGen.generateMemberAccessId(user.workspaceId, user.email) - } else { - var accessId = user.accessId; - } - - let accessTime = Math.round((new Date()).getTime() / 1000).toString(); - options['headers'] = { - 'Access-Id': accessId, - 'User-Agent': 'GoogleSheets-SDK-0.4.3', - 'Accept-Language': 'pt-BR', - 'Content-Type': 'application/json', - 'Access-Time': accessTime - }; - - let body = JSON.stringify(payload); - if (!payload) { - body = ""; - } + if (privateKeyPem) { + var accessId = KeyGen.generateMemberAccessId(user.workspaceId, user.email) + } else { + var accessId = user.accessId; + } - options['payload'] = body; - if (!privateKeyPem) { - var privateKeyPem = user.privateKey; + var privateKeyPem = user.privateKey; } - - let message = accessId + ':' + accessTime + ':' + body; + + let accessTime = Math.round((new Date()).getTime() / 1000).toString(); + options['headers'] = { + 'Access-Id': accessId, + 'User-Agent': 'App-StarkBank-GSheets-v0.6.5b', + 'User-Agent-Override': 'App-StarkBank-GSheets-v0.6.5b', + 'PlatFormId' : 'gsheets', + 'PlatFormVersion' : '0.6.5', + 'Accept-Language': 'pt-BR', + 'Content-Type': 'application/pdf', + 'Access-Time': accessTime + }; + + let body = "" + if (payload) { + body = payload; + } + + options['payload'] = body; + + let message = accessId + ':' + accessTime + ':' + body + + if (challengeId) { + message += ":" + challengeId + options['headers']['Access-Challenge-Ids'] = challengeId + } + let signature = easySign(message, privateKeyPem); options['headers']['Access-Signature'] = signature; response = UrlFetchApp.fetch(url, options); - let content = response.getAs("application/pdf"); let status = response.getResponseCode(); if (status != 200) { - Browser.msgBox(parseResponse(response)[0]["errors"][0]["message"]) - return new Error() + return [parseResponse(response)[0]["errors"][0]["code"], status] } else { + let content = response.getAs("application/pdf"); return [content, status] } }