From 040625f34e4394835cb08975b7eadc9bb72f2776 Mon Sep 17 00:00:00 2001 From: Pablo Ferreiro Date: Sun, 30 Jun 2024 16:16:39 +0200 Subject: [PATCH] avoid crash when url is invalid --- Dockerfile | 7 ++++--- api/index.js | 4 +++- src/Signer.js | 32 +++++++++++++++++++------------- src/Utils.js | 7 +++++++ 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9e8161b..01b2f07 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,12 +12,13 @@ RUN apk add --no-cache \ COPY package.json package-lock.json ./ RUN npm ci +# Delete dev deps +RUN apk del python3 g++ make cairo-dev pango-dev + # Copy required files for server +COPY ./js ./js COPY ./src ./src COPY ./api ./api -COPY ./js ./js - -RUN apk del python3 g++ make cairo-dev pango-dev EXPOSE 8080 CMD [ "node", "api/index.js" ] diff --git a/api/index.js b/api/index.js index 541d95f..35b7b47 100644 --- a/api/index.js +++ b/api/index.js @@ -20,7 +20,9 @@ const server = http.createServer(async (req, res) => { const url = Buffer.concat(buffers).toString(); const data = signer.sign(url); - console.log("Sent data from request with url: " + url); + if (data !== null) { + console.log("Sending data from request with url: " + url); + } res.write(Utils.makePayload(data, signer.navigator())); } else { res.write( diff --git a/src/Signer.js b/src/Signer.js index 84d0fe5..a4d0ab3 100644 --- a/src/Signer.js +++ b/src/Signer.js @@ -90,21 +90,27 @@ class Signer { /** * Sign a TikTok URL * @param {string} url_str Unsigned URL - * @returns Object with signed data + * @returns Object with signed data or null if error */ sign(url_str) { - const url = new URL(url_str); - const signature = this.signature(url.toString()); - url.searchParams.append('_signature', signature); - const bogus = this.bogus(url.searchParams.toString()); - url.searchParams.append('X-Bogus', bogus); - const xttparams = this.xttparams(url.searchParams.toString()); - return { - signature: signature, - signed_url: url.toString(), - "x-tt-params": xttparams, - "X-Bogus": bogus - }; + try { + const url = new URL(url_str); + const signature = this.signature(url.toString()); + url.searchParams.append('_signature', signature); + const bogus = this.bogus(url.searchParams.toString()); + url.searchParams.append('X-Bogus', bogus); + const xttparams = this.xttparams(url.searchParams.toString()); + return { + signature: signature, + signed_url: url.toString(), + "x-tt-params": xttparams, + "X-Bogus": bogus + }; + } catch (_e) { + return null; + } finally { + + } } } diff --git a/src/Utils.js b/src/Utils.js index 1d32923..98ee554 100644 --- a/src/Utils.js +++ b/src/Utils.js @@ -1,5 +1,12 @@ class Utils { static makePayload(data, navigator) { + if (data === null) { + return JSON.stringify({ + status: "error", + data: "There was an error processing your request! Is your URL valid?" + }) + } + return JSON.stringify({ status: "ok", data: {