diff --git a/src/withStreamingServer/convertStream.js b/src/withStreamingServer/convertStream.js index cd526a7..4678b82 100644 --- a/src/withStreamingServer/convertStream.js +++ b/src/withStreamingServer/convertStream.js @@ -1,7 +1,21 @@ +var url = require('url'); var magnet = require('magnet-uri'); var createTorrent = require('./createTorrent'); -function convertStream(streamingServerURL, stream, seriesInfo) { +function buildProxyUrl(streamingServerURL, streamURL, requestHeaders, responseHeaders) { + var parsedStreamURL = new URL(streamURL); + var proxyOptions = new URLSearchParams(); + proxyOptions.set('d', parsedStreamURL.origin); + Object.entries(requestHeaders).forEach(function([header, value]) { + proxyOptions.append('h', header + ':' + value); + }); + Object.entries(responseHeaders).forEach(function([header, value]) { + proxyOptions.append('r', header + ':' + value); + }); + return url.resolve(streamingServerURL, '/proxy/' + proxyOptions.toString() + parsedStreamURL.pathname) + parsedStreamURL.search; +} + +function convertStream(streamingServerURL, stream, seriesInfo, streamingServerSettings) { return new Promise(function(resolve, reject) { if (typeof stream.url === 'string') { if (stream.url.indexOf('magnet:') === 0) { @@ -30,7 +44,15 @@ function convertStream(streamingServerURL, stream, seriesInfo) { reject(error); }); } else { - resolve({ url: stream.url }); + var proxyStreamsEnabled = streamingServerSettings && streamingServerSettings.proxyStreamsEnabled; + var proxyHeaders = stream.behaviorHints && stream.behaviorHints.proxyHeaders; + if (proxyStreamsEnabled || proxyHeaders) { + var requestHeaders = proxyHeaders && proxyHeaders.request ? proxyHeaders.request : {}; + var responseHeaders = proxyHeaders && proxyHeaders.response ? proxyHeaders.response : {}; + resolve({ url: buildProxyUrl(streamingServerURL, stream.url, requestHeaders, responseHeaders) }); + } else { + resolve({ url: stream.url }); + } } return; diff --git a/src/withStreamingServer/withStreamingServer.js b/src/withStreamingServer/withStreamingServer.js index 038d079..db7b4ff 100644 --- a/src/withStreamingServer/withStreamingServer.js +++ b/src/withStreamingServer/withStreamingServer.js @@ -104,7 +104,7 @@ function withStreamingServer(Video) { video.dispatch({ type: 'command', commandName: 'unload' }); loadArgs = commandArgs; onPropChanged('stream'); - convertStream(commandArgs.streamingServerURL, commandArgs.stream, commandArgs.seriesInfo) + convertStream(commandArgs.streamingServerURL, commandArgs.stream, commandArgs.seriesInfo, convertStream.streamingServerSettings) .then(function(result) { var mediaURL = result.url; var infoHash = result.infoHash;