X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Frequests.ts;h=d67d460446e99a2aa22d6116f7928af90f5e05f8;hb=f0adb2701c1cf404ff63095f71e542bfe6d025ae;hp=8ded529728ea53927db1b9a89f7042afa8aee24f;hpb=65fcc3119c334b75dd13bcfdebf186afdc580a8f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/requests.ts b/server/helpers/requests.ts index 8ded52972..d67d46044 100644 --- a/server/helpers/requests.ts +++ b/server/helpers/requests.ts @@ -1,37 +1,61 @@ -import replay = require('request-replay') -import request = require('request') +import * as replay from 'request-replay' +import * as request from 'request' +import * as Promise from 'bluebird' import { RETRY_REQUESTS, REMOTE_SCHEME, CONFIG } from '../initializers' +import { PodInstance } from '../models' +import { PodSignature } from '../../shared' import { sign } from './peertube-crypto' -function makeRetryRequest (params, callback) { - replay( - request(params, callback), - { - retries: RETRY_REQUESTS, - factor: 3, - maxTimeout: Infinity, - errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ] - } - ) +type MakeRetryRequestParams = { + url: string, + method: 'GET'|'POST', + json: Object +} +function makeRetryRequest (params: MakeRetryRequestParams) { + return new Promise<{ response: request.RequestResponse, body: any }>((res, rej) => { + replay( + request(params, (err, response, body) => err ? rej(err) : res({ response, body })), + { + retries: RETRY_REQUESTS, + factor: 3, + maxTimeout: Infinity, + errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ] + } + ) + }) } -function makeSecureRequest (params, callback) { - const requestParams = { - url: REMOTE_SCHEME.HTTP + '://' + params.toPod.host + params.path, - json: {} - } +type MakeSecureRequestParams = { + method: 'GET'|'POST' + toPod: PodInstance + path: string + data?: Object +} +function makeSecureRequest (params: MakeSecureRequestParams) { + return new Promise<{ response: request.RequestResponse, body: any }>((res, rej) => { + const requestParams: { + url: string, + json: { + signature: PodSignature, + data: any + } + } = { + url: REMOTE_SCHEME.HTTP + '://' + params.toPod.host + params.path, + json: { + signature: null, + data: null + } + } - if (params.method !== 'POST') { - return callback(new Error('Cannot make a secure request with a non POST method.')) - } + if (params.method !== 'POST') { + return rej(new Error('Cannot make a secure request with a non POST method.')) + } - // Add signature if it is specified in the params - if (params.sign === true) { const host = CONFIG.WEBSERVER.HOST let dataToSign @@ -43,18 +67,20 @@ function makeSecureRequest (params, callback) { dataToSign = host } - requestParams.json['signature'] = { - host, // Which host we pretend to be - signature: sign(dataToSign) - } - } + sign(dataToSign).then(signature => { + requestParams.json.signature = { + host, // Which host we pretend to be + signature + } - // If there are data informations - if (params.data) { - requestParams.json['data'] = params.data - } + // If there are data informations + if (params.data) { + requestParams.json.data = params.data + } - request.post(requestParams, callback) + request.post(requestParams, (err, response, body) => err ? rej(err) : res({ response, body })) + }) + }) } // ---------------------------------------------------------------------------