Fix Google translate result decoding Inspired by #2522

ded26f978399f66f3ca50424089d923e7dd8171d

Cohee <18619528+Cohee1207@users.noreply.github.com>

3 files changed, +36 -7Showing whitespace changes
package-lock.json+29 -4
@@ -27,6 +27,7 @@
2727 "google-translate-api-browser": "^3.0.1",
2828 "he": "^1.2.0",
2929 "helmet": "^7.1.0",
30+ "iconv-lite": "^0.6.3",
3031 "ip-matching": "^2.1.2",
3132 "ipaddr.js": "^2.0.1",
3233 "jimp": "^0.22.10",
@@ -1492,6 +1493,18 @@
14921493 "node": ">= 0.8"
14931494 }
14941495 },
1496+ "node_modules/body-parser/node_modules/iconv-lite": {
1497+ "version": "0.4.24",
1498+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1499+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1500+ "license": "MIT",
1501+ "dependencies": {
1502+ "safer-buffer": ">= 2.1.2 < 3"
1503+ },
1504+ "engines": {
1505+ "node": ">=0.10.0"
1506+ }
1507+ },
14951508 "node_modules/boolbase": {
14961509 "version": "1.0.0",
14971510 "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -3282,12 +3295,12 @@
32823295 }
32833296 },
32843297 "node_modules/iconv-lite": {
32853298 "version": "0.46.243",
32863299 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.46.243.tgz",
32873300 "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
32883301 "license": "MIT",
32893302 "dependencies": {
32903303 "safer-buffer": ">= 2.1.2 < 3.0.0"
32913304 },
32923305 "engines": {
32933306 "node": ">=0.10.0"
@@ -4618,6 +4631,18 @@
46184631 "node": ">= 0.8"
46194632 }
46204633 },
4634+ "node_modules/raw-body/node_modules/iconv-lite": {
4635+ "version": "0.4.24",
4636+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
4637+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
4638+ "license": "MIT",
4639+ "dependencies": {
4640+ "safer-buffer": ">= 2.1.2 < 3"
4641+ },
4642+ "engines": {
4643+ "node": ">=0.10.0"
4644+ }
4645+ },
46214646 "node_modules/readable-stream": {
46224647 "version": "2.3.8",
46234648 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
package.json+1 -0
@@ -17,6 +17,7 @@
1717 "google-translate-api-browser": "^3.0.1",
1818 "he": "^1.2.0",
1919 "helmet": "^7.1.0",
20+ "iconv-lite": "^0.6.3",
2021 "ip-matching": "^2.1.2",
2122 "ipaddr.js": "^2.0.1",
2223 "jimp": "^0.22.10",
src/endpoints/translate.js+6 -3
@@ -1,6 +1,7 @@
11const fetch = require('node-fetch').default;
22const https = require('https');
33const express = require('express');
4+const iconv = require('iconv-lite');
45const { readSecret, SECRET_KEYS } = require('./secrets');
56const { getConfigValue, uuidv4 } = require('../util');
67const { jsonParser } = require('../express-common');
@@ -80,16 +81,18 @@ router.post('/google', jsonParser, async (request, response) => {
8081 const url = generateRequestUrl(text, { to: lang });
8182
8283 https.get(url, (resp) => {
8384 letconst data = ''[];
8485
8586 resp.on('data', (chunk) => {
8687 data += .push(chunk);
8788 });
8889
8990 resp.on('end', () => {
9091 try {
9192 const resultdecodedData = normaliseResponseiconv.decode(JSONBuffer.parseconcat(data), 'utf-8');
93+ const result = normaliseResponse(JSON.parse(decodedData));
9294 console.log('Translated text: ' + result.text);
95+ response.setHeader('Content-Type', 'text/plain; charset=utf-8');
9396 return response.send(result.text);
9497 } catch (error) {
9598 console.log('Translation error', error);