From 731fb24500d535d0ab8d828b4a0a720c9f09902a Mon Sep 17 00:00:00 2001 From: Erik Michelson Date: Thu, 11 Mar 2021 16:40:24 +0100 Subject: [PATCH] Replace request library with node-fetch Signed-off-by: Erik Michelson --- lib/response.js | 105 ++++++++++++++++++++++++++---------------------- package.json | 2 +- yarn.lock | 12 +++--- 3 files changed, 64 insertions(+), 55 deletions(-) diff --git a/lib/response.js b/lib/response.js index 10ecd0350..4d22d563d 100644 --- a/lib/response.js +++ b/lib/response.js @@ -3,7 +3,7 @@ // external modules const fs = require('fs') const path = require('path') -const request = require('request') +const fetch = require('node-fetch') // core const config = require('./config') const logger = require('./logger') @@ -76,46 +76,57 @@ function githubActionGist (req, res, note) { state: state } const authUrl = 'https://github.com/login/oauth/access_token' - request({ - url: authUrl, + fetch(authUrl, { method: 'POST', - json: data - }, function (error, httpResponse, body) { - if (!error && httpResponse.statusCode === 200) { - const accessToken = body.access_token - if (accessToken) { - const content = note.content - const title = models.Note.decodeTitle(note.title) - const filename = title.replace('/', ' ') + '.md' - const gist = { - files: {} - } - gist.files[filename] = { - content: content - } - const gistUrl = 'https://api.github.com/gists' - request({ - url: gistUrl, - headers: { - 'User-Agent': 'HedgeDoc', - Authorization: 'token ' + accessToken - }, - method: 'POST', - json: gist - }, function (error, httpResponse, body) { - if (!error && httpResponse.statusCode === 201) { - res.setHeader('referer', '') - res.redirect(body.html_url) - } else { - return errors.errorForbidden(res) - } - }) - } else { - return errors.errorForbidden(res) + body: JSON.stringify(data), + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json' + } + }).then(resp => { + if (!resp.ok) { + throw new Error('forbidden') + } + return resp.json() + }).then(body => { + const accessToken = body.access_token + if (!accessToken) { + throw new Error('forbidden') + } + const content = note.content + const title = models.Note.decodeTitle(note.title) + const filename = title.replace('/', ' ') + '.md' + const gist = { + files: {} + } + gist.files[filename] = { + content: content + } + const gistUrl = 'https://api.github.com/gists' + return fetch(gistUrl, { + method: 'POST', + body: JSON.stringify(gist), + headers: { + 'User-Agent': 'HedgeDoc', + Authorization: 'token ' + accessToken, + 'Content-Type': 'application/json', + Accept: 'application/json' } - } else { + }) + }).then(resp => { + if (resp.status !== 201) { + throw new Error('forbidden') + } + return resp.json() + }).then(body => { + res.setHeader('referer', '') + res.redirect(body.html_url) + }).catch(error => { + if (error.message === 'forbidden') { return errors.errorForbidden(res) } + logger.error('GitHub Gist auth failed: ' + error) + return errors.errorInternalError(res) }) } } @@ -146,17 +157,17 @@ function gitlabActionProjects (req, res, note) { const ret = { baseURL: config.gitlab.baseURL, version: config.gitlab.version } ret.accesstoken = user.accessToken ret.profileid = user.profileid - request( - config.gitlab.baseURL + '/api/' + config.gitlab.version + '/projects?membership=yes&per_page=100&access_token=' + user.accessToken, - function (error, httpResponse, body) { - if (!error && httpResponse.statusCode === 200) { - ret.projects = JSON.parse(body) - return res.send(ret) - } else { - return res.send(ret) - } + const apiUrl = `${config.gitlab.baseURL}/api/${config.gitlab.version}/projects?membership=yes&per_page=100&access_token=${user.accessToken}` + fetch(apiUrl).then(resp => { + if (!resp.ok) { + res.send(ret) + throw new Error('HTTP request returned not okay-ish status') } - ) + return resp.json() + }).then(body => { + ret.projects = body + return res.send(ret) + }) }).catch(function (err) { logger.error('gitlab action projects failed: ' + err) return errors.errorInternalError(res) diff --git a/package.json b/package.json index b65a980db..f18962785 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "moment": "^2.17.1", "morgan": "^1.7.0", "mysql2": "^2.0.0", + "node-fetch": "^2.6.1", "passport": "^0.4.0", "passport-dropbox-oauth2": "^1.1.0", "passport-facebook": "^3.0.0", @@ -110,7 +111,6 @@ "randomcolor": "^0.6.0", "raphael": "^2.3.0", "readline-sync": "^1.4.7", - "request": "^2.88.0", "reveal.js": "^3.9.2", "rimraf": "^3.0.2", "scrypt-async": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index 91214ffe7..a567d99c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -448,7 +448,6 @@ "Idle.Js@git+https://github.com/shawnmclean/Idle.js": version "0.0.1" - uid db9beb3483a460ad638ec947867720f0ed066a62 resolved "git+https://github.com/shawnmclean/Idle.js#db9beb3483a460ad638ec947867720f0ed066a62" JSV@^4.0.x: @@ -2193,7 +2192,6 @@ code-point-at@^1.0.0: "codemirror@git+https://github.com/hedgedoc/CodeMirror.git": version "5.58.2" - uid f780b569b3717cdff4c8507538cc63101bfa02e1 resolved "git+https://github.com/hedgedoc/CodeMirror.git#f780b569b3717cdff4c8507538cc63101bfa02e1" collection-visit@^1.0.0: @@ -3225,7 +3223,6 @@ detect-libc@^1.0.2: "diff-match-patch@git+https://github.com/hackmdio/diff-match-patch.git": version "1.1.1" - uid c2f8fb9d69aa9490b764850aa86ba442c93ccf78 resolved "git+https://github.com/hackmdio/diff-match-patch.git#c2f8fb9d69aa9490b764850aa86ba442c93ccf78" diff@5.0.0: @@ -4923,7 +4920,6 @@ image-size@~0.5.0: "imgur@git+https://github.com/hackmdio/node-imgur.git": version "0.5.0" - uid de0a7a1f1eb2cb6628385fedb990ad396a190573 resolved "git+https://github.com/hackmdio/node-imgur.git#de0a7a1f1eb2cb6628385fedb990ad396a190573" dependencies: commander "^2.13.0" @@ -5526,7 +5522,6 @@ js-cookie@^2.1.3: "js-sequence-diagrams@git+https://github.com/hedgedoc/js-sequence-diagrams.git": version "2.0.1" - uid bda0e49b6c2754f3c7158b1dfb9ccf26efc24b39 resolved "git+https://github.com/hedgedoc/js-sequence-diagrams.git#bda0e49b6c2754f3c7158b1dfb9ccf26efc24b39" dependencies: lodash "4.17.x" @@ -6090,7 +6085,6 @@ lutim@^1.0.2: "lz-string@git+https://github.com/hackmdio/lz-string.git": version "1.4.4" - uid efd1f64676264d6d8871b01f4f375fc6ef4f9022 resolved "git+https://github.com/hackmdio/lz-string.git#efd1f64676264d6d8871b01f4f375fc6ef4f9022" make-dir@^1.0.0: @@ -6404,7 +6398,6 @@ messageformat@^2.3.0: "meta-marked@git+https://github.com/hedgedoc/meta-marked": version "0.4.5" - uid "4fb5cb5a204969cc91e66eee92c0211188e69a2b" resolved "git+https://github.com/hedgedoc/meta-marked#4fb5cb5a204969cc91e66eee92c0211188e69a2b" dependencies: js-yaml "~3.14.0" @@ -6869,6 +6862,11 @@ node-addon-api@^3.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"