mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2024-11-29 20:14:02 -06:00
Async signature and various fixes
This commit is contained in:
parent
18c8e94508
commit
709756b8e1
@ -64,8 +64,7 @@ function remoteVideos (req: express.Request, res: express.Response, next: expres
|
||||
const fromPod = res.locals.secure.pod
|
||||
|
||||
// We need to process in the same order to keep consistency
|
||||
// TODO: optimization
|
||||
Promise.mapSeries(requests, (request: any) => {
|
||||
Promise.each(requests, (request: any) => {
|
||||
const data = request.data
|
||||
|
||||
// Get the function we need to call in order to process the request
|
||||
@ -79,7 +78,7 @@ function remoteVideos (req: express.Request, res: express.Response, next: expres
|
||||
})
|
||||
.catch(err => logger.error('Error managing remote videos.', { error: err }))
|
||||
|
||||
// We don't need to keep the other pod waiting
|
||||
// Don't block the other pod
|
||||
return res.type('json').status(204).end()
|
||||
}
|
||||
|
||||
@ -87,7 +86,7 @@ function remoteVideosQadu (req: express.Request, res: express.Response, next: ex
|
||||
const requests = req.body.data
|
||||
const fromPod = res.locals.secure.pod
|
||||
|
||||
Promise.mapSeries(requests, (request: any) => {
|
||||
Promise.each(requests, (request: any) => {
|
||||
const videoData = request.data
|
||||
|
||||
return quickAndDirtyUpdateVideoRetryWrapper(videoData, fromPod)
|
||||
@ -101,7 +100,7 @@ function remoteVideosEvents (req: express.Request, res: express.Response, next:
|
||||
const requests = req.body.data
|
||||
const fromPod = res.locals.secure.pod
|
||||
|
||||
Promise.mapSeries(requests, (request: any) => {
|
||||
Promise.each(requests, (request: any) => {
|
||||
const eventData = request.data
|
||||
|
||||
return processVideosEventsRetryWrapper(eventData, fromPod)
|
||||
|
@ -8,15 +8,14 @@ import {
|
||||
CONFIG,
|
||||
REMOTE_SCHEME,
|
||||
STATIC_PATHS,
|
||||
STATIC_MAX_AGE
|
||||
STATIC_MAX_AGE,
|
||||
OPENGRAPH_COMMENT
|
||||
} from '../initializers'
|
||||
import { root, readFileBufferPromise } from '../helpers'
|
||||
import { VideoInstance } from '../models'
|
||||
|
||||
const clientsRouter = express.Router()
|
||||
|
||||
// TODO: move to constants
|
||||
const opengraphComment = '<!-- opengraph tags -->'
|
||||
const distPath = join(root(), 'client', 'dist')
|
||||
const embedPath = join(distPath, 'standalone', 'videos', 'embed.html')
|
||||
const indexPath = join(distPath, 'index.html')
|
||||
@ -85,7 +84,7 @@ function addOpenGraphTags (htmlStringPage: string, video: VideoInstance) {
|
||||
tagsString += '<meta property="' + tagName + '" content="' + tagValue + '" />'
|
||||
})
|
||||
|
||||
return htmlStringPage.replace(opengraphComment, tagsString)
|
||||
return htmlStringPage.replace(OPENGRAPH_COMMENT, tagsString)
|
||||
}
|
||||
|
||||
function generateWatchHtmlPage (req: express.Request, res: express.Response, next: express.NextFunction) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import * as crypto from 'crypto'
|
||||
import * as fs from 'fs'
|
||||
import * as Promise from 'bluebird'
|
||||
import { join } from 'path'
|
||||
|
||||
import {
|
||||
@ -52,18 +52,15 @@ function sign (data: string|Object) {
|
||||
dataString = JSON.stringify(data)
|
||||
} catch (err) {
|
||||
logger.error('Cannot sign data.', { error: err })
|
||||
return ''
|
||||
return Promise.resolve('')
|
||||
}
|
||||
}
|
||||
|
||||
sign.update(dataString, 'utf8')
|
||||
|
||||
// TODO: make async
|
||||
const certPath = join(CONFIG.STORAGE.CERT_DIR, PRIVATE_CERT_NAME)
|
||||
const myKey = fs.readFileSync(certPath)
|
||||
const signature = sign.sign(myKey.toString(), SIGNATURE_ENCODING)
|
||||
|
||||
return signature
|
||||
return getMyPrivateCert().then(myKey => {
|
||||
return sign.sign(myKey, SIGNATURE_ENCODING)
|
||||
})
|
||||
}
|
||||
|
||||
function comparePassword (plainPassword: string, hashPassword: string) {
|
||||
|
@ -33,7 +33,6 @@ type MakeSecureRequestParams = {
|
||||
method: 'GET'|'POST'
|
||||
toPod: PodInstance
|
||||
path: string
|
||||
sign: boolean
|
||||
data?: Object
|
||||
}
|
||||
function makeSecureRequest (params: MakeSecureRequestParams) {
|
||||
@ -47,31 +46,30 @@ function makeSecureRequest (params: MakeSecureRequestParams) {
|
||||
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
|
||||
const host = CONFIG.WEBSERVER.HOST
|
||||
|
||||
let dataToSign
|
||||
if (params.data) {
|
||||
dataToSign = params.data
|
||||
} else {
|
||||
// We do not have data to sign so we just take our host
|
||||
// It is not ideal but the connection should be in HTTPS
|
||||
dataToSign = host
|
||||
}
|
||||
let dataToSign
|
||||
if (params.data) {
|
||||
dataToSign = params.data
|
||||
} else {
|
||||
// We do not have data to sign so we just take our host
|
||||
// It is not ideal but the connection should be in HTTPS
|
||||
dataToSign = host
|
||||
}
|
||||
|
||||
sign(dataToSign).then(signature => {
|
||||
requestParams.json['signature'] = {
|
||||
host, // Which host we pretend to be
|
||||
signature: sign(dataToSign)
|
||||
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, (err, response, body) => err ? rej(err) : res({ response, body }))
|
||||
request.post(requestParams, (err, response, body) => err ? rej(err) : res({ response, body }))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -287,6 +287,10 @@ const USER_ROLES: { [ id: string ]: UserRole } = {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
const OPENGRAPH_COMMENT = '<!-- opengraph tags -->'
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Special constants for a test instance
|
||||
if (isTestInstance() === true) {
|
||||
CONSTRAINTS_FIELDS.VIDEOS.DURATION.max = 14
|
||||
@ -306,12 +310,13 @@ export {
|
||||
CONFIG,
|
||||
CONSTRAINTS_FIELDS,
|
||||
FRIEND_SCORE,
|
||||
JOBS_FETCHING_INTERVAL,
|
||||
JOB_STATES,
|
||||
JOBS_CONCURRENCY,
|
||||
JOBS_FETCH_LIMIT_PER_CYCLE,
|
||||
JOBS_FETCHING_INTERVAL,
|
||||
LAST_MIGRATION_VERSION,
|
||||
OAUTH_LIFETIME,
|
||||
OPENGRAPH_COMMENT,
|
||||
PAGINATION_COUNT_DEFAULT,
|
||||
PODS_SCORE,
|
||||
PREVIEWS_SIZE,
|
||||
|
@ -35,9 +35,7 @@ function migrate () {
|
||||
return getMigrationScripts().then(migrationScripts => ({ actualVersion, migrationScripts }))
|
||||
})
|
||||
.then(({ actualVersion, migrationScripts }) => {
|
||||
return Promise.mapSeries(migrationScripts, entity => {
|
||||
return executeMigration(actualVersion, entity)
|
||||
})
|
||||
return Promise.each(migrationScripts, entity => executeMigration(actualVersion, entity))
|
||||
})
|
||||
.then(() => {
|
||||
logger.info('Migrations finished. New migration version schema: %s', LAST_MIGRATION_VERSION)
|
||||
|
@ -141,9 +141,7 @@ function makeFriends (hosts: string[]) {
|
||||
logger.info('Make friends!')
|
||||
return getMyPublicCert()
|
||||
.then(cert => {
|
||||
return Promise.mapSeries(hosts, host => {
|
||||
return computeForeignPodsList(host, podsScore)
|
||||
}).then(() => cert)
|
||||
return Promise.each(hosts, host => computeForeignPodsList(host, podsScore)).then(() => cert)
|
||||
})
|
||||
.then(cert => {
|
||||
logger.debug('Pods scores computed.', { podsScore: podsScore })
|
||||
@ -169,7 +167,6 @@ function quitFriends () {
|
||||
const requestParams = {
|
||||
method: 'POST' as 'POST',
|
||||
path: '/api/' + API_VERSION + '/remote/pods/remove',
|
||||
sign: true,
|
||||
toPod: null
|
||||
}
|
||||
|
||||
@ -178,6 +175,7 @@ function quitFriends () {
|
||||
// The other pod will exclude us automatically after a while
|
||||
return Promise.map(pods, pod => {
|
||||
requestParams.toPod = pod
|
||||
|
||||
return makeSecureRequest(requestParams)
|
||||
}, { concurrency: REQUESTS_IN_PARALLEL })
|
||||
.then(() => pods)
|
||||
|
@ -70,7 +70,6 @@ abstract class AbstractRequestScheduler <T> {
|
||||
protected makeRequest (toPod: PodInstance, requestEndpoint: string, requestsToMake: Object) {
|
||||
const params = {
|
||||
toPod: toPod,
|
||||
sign: true, // Prove our identity
|
||||
method: 'POST' as 'POST',
|
||||
path: '/api/' + API_VERSION + '/remote/' + requestEndpoint,
|
||||
data: requestsToMake // Requests we need to make
|
||||
|
@ -61,16 +61,9 @@ class RequestScheduler extends AbstractRequestScheduler<RequestsGrouped> {
|
||||
}
|
||||
|
||||
createRequest ({ type, endpoint, data, toIds, transaction }: RequestSchedulerOptions) {
|
||||
// TODO: check the setPods works
|
||||
const podIds = []
|
||||
|
||||
// If there are no destination pods abort
|
||||
if (toIds.length === 0) return undefined
|
||||
|
||||
toIds.forEach(toPod => {
|
||||
podIds.push(toPod)
|
||||
})
|
||||
|
||||
const createQuery = {
|
||||
endpoint,
|
||||
request: {
|
||||
@ -85,7 +78,7 @@ class RequestScheduler extends AbstractRequestScheduler<RequestsGrouped> {
|
||||
|
||||
return db.Request.create(createQuery, dbRequestOptions)
|
||||
.then(request => {
|
||||
return request.setPods(podIds, dbRequestOptions)
|
||||
return request.setPods(toIds, dbRequestOptions)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ function checkSignature (req: express.Request, res: express.Response, next: expr
|
||||
return res.sendStatus(403)
|
||||
})
|
||||
.catch(err => {
|
||||
logger.error('Cannot get signed host in body.', { error: err })
|
||||
logger.error('Cannot get signed host in body.', { error: err.stack, signature: req.body.signature.signature })
|
||||
return res.sendStatus(500)
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user