Fix Google translate result decoding

Inspired by #2522
This commit is contained in:
Cohee 2024-08-18 14:55:17 +03:00
parent 9215dfd0c6
commit ded26f9783
3 changed files with 36 additions and 7 deletions

33
package-lock.json generated
View File

@ -27,6 +27,7 @@
"google-translate-api-browser": "^3.0.1", "google-translate-api-browser": "^3.0.1",
"he": "^1.2.0", "he": "^1.2.0",
"helmet": "^7.1.0", "helmet": "^7.1.0",
"iconv-lite": "^0.6.3",
"ip-matching": "^2.1.2", "ip-matching": "^2.1.2",
"ipaddr.js": "^2.0.1", "ipaddr.js": "^2.0.1",
"jimp": "^0.22.10", "jimp": "^0.22.10",
@ -1492,6 +1493,18 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/body-parser/node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/boolbase": { "node_modules/boolbase": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@ -3282,12 +3295,12 @@
} }
}, },
"node_modules/iconv-lite": { "node_modules/iconv-lite": {
"version": "0.4.24", "version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"safer-buffer": ">= 2.1.2 < 3" "safer-buffer": ">= 2.1.2 < 3.0.0"
}, },
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
@ -4618,6 +4631,18 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/raw-body/node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/readable-stream": { "node_modules/readable-stream": {
"version": "2.3.8", "version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",

View File

@ -17,6 +17,7 @@
"google-translate-api-browser": "^3.0.1", "google-translate-api-browser": "^3.0.1",
"he": "^1.2.0", "he": "^1.2.0",
"helmet": "^7.1.0", "helmet": "^7.1.0",
"iconv-lite": "^0.6.3",
"ip-matching": "^2.1.2", "ip-matching": "^2.1.2",
"ipaddr.js": "^2.0.1", "ipaddr.js": "^2.0.1",
"jimp": "^0.22.10", "jimp": "^0.22.10",

View File

@ -1,6 +1,7 @@
const fetch = require('node-fetch').default; const fetch = require('node-fetch').default;
const https = require('https'); const https = require('https');
const express = require('express'); const express = require('express');
const iconv = require('iconv-lite');
const { readSecret, SECRET_KEYS } = require('./secrets'); const { readSecret, SECRET_KEYS } = require('./secrets');
const { getConfigValue, uuidv4 } = require('../util'); const { getConfigValue, uuidv4 } = require('../util');
const { jsonParser } = require('../express-common'); const { jsonParser } = require('../express-common');
@ -80,16 +81,18 @@ router.post('/google', jsonParser, async (request, response) => {
const url = generateRequestUrl(text, { to: lang }); const url = generateRequestUrl(text, { to: lang });
https.get(url, (resp) => { https.get(url, (resp) => {
let data = ''; const data = [];
resp.on('data', (chunk) => { resp.on('data', (chunk) => {
data += chunk; data.push(chunk);
}); });
resp.on('end', () => { resp.on('end', () => {
try { try {
const result = normaliseResponse(JSON.parse(data)); const decodedData = iconv.decode(Buffer.concat(data), 'utf-8');
const result = normaliseResponse(JSON.parse(decodedData));
console.log('Translated text: ' + result.text); console.log('Translated text: ' + result.text);
response.setHeader('Content-Type', 'text/plain; charset=utf-8');
return response.send(result.text); return response.send(result.text);
} catch (error) { } catch (error) {
console.log('Translation error', error); console.log('Translation error', error);