| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- const { Agent } = require('http')
- const { createConnection } = require('net')
- const { promisify } = require('util')
- const OError = require('@overleaf/o-error')
- const request = require('request')
- const Settings = require('@overleaf/settings')
- // send requests to web router if this is the api process
- const OWN_PORT = Settings.port || Settings.internal.web.port || 3000
- const PORT = (Settings.web && Settings.web.web_router_port) || OWN_PORT
- // like the curl option `--resolve DOMAIN:PORT:127.0.0.1`
- class LocalhostAgent extends Agent {
- createConnection(options, callback) {
- return createConnection(PORT, '127.0.0.1', callback)
- }
- }
- // degrade the 'HttpOnly; Secure;' flags of the cookie
- class InsecureCookieJar extends request.jar().constructor {
- setCookie(...args) {
- const cookie = super.setCookie(...args)
- cookie.secure = false
- cookie.httpOnly = false
- return cookie
- }
- }
- function requestFactory({ timeout }) {
- return promisify(
- request.defaults({
- agent: new LocalhostAgent(),
- baseUrl: `http://smoke${Settings.cookieDomain}`,
- headers: {
- // emulate the header of a https proxy
- // express wont emit a 'Secure;' cookie on a plain-text connection.
- 'X-Forwarded-Proto': 'https',
- },
- jar: new InsecureCookieJar(),
- timeout,
- })
- )
- }
- function assertHasStatusCode(response, expected) {
- const { statusCode: actual } = response
- if (actual !== expected) {
- throw new OError('unexpected response code', {
- url: response.request.uri.href,
- actual,
- expected,
- })
- }
- }
- module.exports = {
- assertHasStatusCode,
- requestFactory,
- }
|