import { createWriteStream, remove } from 'fs-extra'
import got, { CancelableRequest, NormalizedOptions, Options as GotOptions, RequestError, Response } from 'got'
import { HttpProxyAgent, HttpsProxyAgent } from 'hpagent'
-import { join } from 'path'
-import { CONFIG } from '../initializers/config'
-import { ACTIVITY_PUB, BINARY_CONTENT_TYPES, PEERTUBE_VERSION, REQUEST_TIMEOUT, WEBSERVER } from '../initializers/constants'
+import { ACTIVITY_PUB, BINARY_CONTENT_TYPES, PEERTUBE_VERSION, REQUEST_TIMEOUTS, WEBSERVER } from '../initializers/constants'
import { pipelinePromise } from './core-utils'
-import { processImage } from './image-utils'
import { logger, loggerTagsFactory } from './logger'
import { getProxy, isProxyEnabled } from './proxy'
}
type PeerTubeRequestOptions = {
+ timeout?: number
activityPub?: boolean
bodyKBLimit?: number // 1MB
httpSignature?: {
}
httpSignature.signRequest({
- getHeader: function (header) {
- return options.headers[header]
+ getHeader: function (header: string) {
+ const value = options.headers[header.toLowerCase()]
+
+ if (!value) logger.warn('Unknown header requested by http-signature.', { headers: options.headers, header })
+ return value
},
- setHeader: function (header, value) {
+ setHeader: function (header: string, value: string) {
options.headers[header] = value
},
destPath: string,
options: PeerTubeRequestOptions = {}
) {
- const gotOptions = buildGotOptions(options)
+ const gotOptions = buildGotOptions({ ...options, timeout: options.timeout ?? REQUEST_TIMEOUTS.FILE })
const outFile = createWriteStream(destPath)
}
}
-async function downloadImage (url: string, destDir: string, destName: string, size: { width: number, height: number }) {
- const tmpPath = join(CONFIG.STORAGE.TMP_DIR, 'pending-' + destName)
- await doRequestAndSaveToFile(url, tmpPath)
-
- const destPath = join(destDir, destName)
-
- try {
- await processImage(tmpPath, destPath, size)
- } catch (err) {
- await remove(tmpPath)
-
- throw err
- }
-}
-
function getAgent () {
if (!isProxyEnabled()) return {}
doJSONRequest,
doRequestAndSaveToFile,
isBinaryResponse,
- downloadImage,
+ getAgent,
findLatestRedirection,
peertubeGot
}
return {
method: options.method,
dnsCache: true,
- timeout: REQUEST_TIMEOUT,
+ timeout: options.timeout ?? REQUEST_TIMEOUTS.DEFAULT,
json: options.json,
searchParams: options.searchParams,
retry: 2,