Fix Google translate result decoding Inspired by #2522
| @@ -27,6 +27,7 @@ | ||
| 27 | 27 | "google-translate-api-browser": "^3.0.1", |
| 28 | 28 | "he": "^1.2.0", |
| 29 | 29 | "helmet": "^7.1.0", |
| 30 | + "iconv-lite": "^0.6.3", | |
| 30 | 31 | "ip-matching": "^2.1.2", |
| 31 | 32 | "ipaddr.js": "^2.0.1", |
| 32 | 33 | "jimp": "^0.22.10", |
| @@ -1492,6 +1493,18 @@ | ||
| 1492 | 1493 | "node": ">= 0.8" |
| 1493 | 1494 | } |
| 1494 | 1495 | }, |
| 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 | + }, | |
| 1495 | 1508 | "node_modules/boolbase": { |
| 1496 | 1509 | "version": "1.0.0", |
| 1497 | 1510 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", |
| @@ -3282,12 +3295,12 @@ | ||
| 3282 | 3295 | } |
| 3283 | 3296 | }, |
| 3284 | 3297 | "node_modules/iconv-lite": { |
| 3285 | 3298 | "version": "0.46.243", |
| 3286 | 3299 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.46.243.tgz", |
| 3287 | 3300 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", |
| 3288 | 3301 | "license": "MIT", |
| 3289 | 3302 | "dependencies": { |
| 3290 | 3303 | "safer-buffer": ">= 2.1.2 < 3.0.0" |
| 3291 | 3304 | }, |
| 3292 | 3305 | "engines": { |
| 3293 | 3306 | "node": ">=0.10.0" |
| @@ -4618,6 +4631,18 @@ | ||
| 4618 | 4631 | "node": ">= 0.8" |
| 4619 | 4632 | } |
| 4620 | 4633 | }, |
| 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 | + }, | |
| 4621 | 4646 | "node_modules/readable-stream": { |
| 4622 | 4647 | "version": "2.3.8", |
| 4623 | 4648 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", |
| @@ -17,6 +17,7 @@ | ||
| 17 | 17 | "google-translate-api-browser": "^3.0.1", |
| 18 | 18 | "he": "^1.2.0", |
| 19 | 19 | "helmet": "^7.1.0", |
| 20 | + "iconv-lite": "^0.6.3", | |
| 20 | 21 | "ip-matching": "^2.1.2", |
| 21 | 22 | "ipaddr.js": "^2.0.1", |
| 22 | 23 | "jimp": "^0.22.10", |
| @@ -1,6 +1,7 @@ | ||
| 1 | 1 | const fetch = require('node-fetch').default; |
| 2 | 2 | const https = require('https'); |
| 3 | 3 | const express = require('express'); |
| 4 | +const iconv = require('iconv-lite'); | |
| 4 | 5 | const { readSecret, SECRET_KEYS } = require('./secrets'); |
| 5 | 6 | const { getConfigValue, uuidv4 } = require('../util'); |
| 6 | 7 | const { jsonParser } = require('../express-common'); |
| @@ -80,16 +81,18 @@ router.post('/google', jsonParser, async (request, response) => { | ||
| 80 | 81 | const url = generateRequestUrl(text, { to: lang }); |
| 81 | 82 | |
| 82 | 83 | https.get(url, (resp) => { |
| 83 | 84 | letconst data = ''[]; |
| 84 | 85 | |
| 85 | 86 | resp.on('data', (chunk) => { |
| 86 | 87 | data += .push(chunk); |
| 87 | 88 | }); |
| 88 | 89 | |
| 89 | 90 | resp.on('end', () => { |
| 90 | 91 | try { |
| 91 | 92 | const resultdecodedData = normaliseResponseiconv.decode(JSONBuffer.parseconcat(data), 'utf-8'); |
| 93 | + const result = normaliseResponse(JSON.parse(decodedData)); | |
| 92 | 94 | console.log('Translated text: ' + result.text); |
| 95 | + response.setHeader('Content-Type', 'text/plain; charset=utf-8'); | |
| 93 | 96 | return response.send(result.text); |
| 94 | 97 | } catch (error) { |
| 95 | 98 | console.log('Translation error', error); |