diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-08-02 18:58:19 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-02 18:58:19 -0400 |
commit | bdcdf9b1f5430760be605a7a5e84440e324de7b5 (patch) | |
tree | 467b9284ce27eaaee5ac27d8c28b95ed32dea775 /ext/bg/js/audio-uri-builder.js | |
parent | a37ca1d378ae0bf3e78d1e2858d3dd6f6982c061 (diff) |
Strip request origin (#710)
* Add web request permissions
* Create fetch wrapper that anonymizes the request
* Fix Firefox not supporting 'extraHeaders' option
Diffstat (limited to 'ext/bg/js/audio-uri-builder.js')
-rw-r--r-- | ext/bg/js/audio-uri-builder.js | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/ext/bg/js/audio-uri-builder.js b/ext/bg/js/audio-uri-builder.js index 11738ef3..a6b563d8 100644 --- a/ext/bg/js/audio-uri-builder.js +++ b/ext/bg/js/audio-uri-builder.js @@ -20,7 +20,8 @@ */ class AudioUriBuilder { - constructor() { + constructor({requestBuilder}) { + this._requestBuilder = requestBuilder; this._getUrlHandlers = new Map([ ['jpod101', this._getUriJpod101.bind(this)], ['jpod101-alternate', this._getUriJpod101Alternate.bind(this)], @@ -82,14 +83,21 @@ class AudioUriBuilder { } async _getUriJpod101Alternate(definition) { - const responseText = await new Promise((resolve, reject) => { - const xhr = new XMLHttpRequest(); - xhr.open('POST', 'https://www.japanesepod101.com/learningcenter/reference/dictionary_post'); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.addEventListener('error', () => reject(new Error('Failed to scrape audio data'))); - xhr.addEventListener('load', () => resolve(xhr.responseText)); - xhr.send(`post=dictionary_reference&match_type=exact&search_query=${encodeURIComponent(definition.expression)}&vulgar=true`); + const fetchUrl = 'https://www.japanesepod101.com/learningcenter/reference/dictionary_post'; + const data = `post=dictionary_reference&match_type=exact&search_query=${encodeURIComponent(definition.expression)}&vulgar=true`; + const response = await this._requestBuilder.fetchAnonymous(fetchUrl, { + method: 'POST', + mode: 'cors', + cache: 'default', + credentials: 'omit', + redirect: 'follow', + referrerPolicy: 'no-referrer', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + body: data }); + const responseText = await response.text(); const dom = new DOMParser().parseFromString(responseText, 'text/html'); for (const row of dom.getElementsByClassName('dc-result-row')) { @@ -108,13 +116,16 @@ class AudioUriBuilder { } async _getUriJisho(definition) { - const responseText = await new Promise((resolve, reject) => { - const xhr = new XMLHttpRequest(); - xhr.open('GET', `https://jisho.org/search/${definition.expression}`); - xhr.addEventListener('error', () => reject(new Error('Failed to scrape audio data'))); - xhr.addEventListener('load', () => resolve(xhr.responseText)); - xhr.send(); + const fetchUrl = `https://jisho.org/search/${definition.expression}`; + const response = await this._requestBuilder.fetchAnonymous(fetchUrl, { + method: 'GET', + mode: 'cors', + cache: 'default', + credentials: 'omit', + redirect: 'follow', + referrerPolicy: 'no-referrer' }); + const responseText = await response.text(); const dom = new DOMParser().parseFromString(responseText, 'text/html'); try { |