Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// return respondError(304, 'Not Modified')
// }
// fetch the permissions
// TODO this has been disabled until we can create a better UX -prf
// var origins
// try {
// origins = await sitedataDb.getNetworkPermissions('dat://' + archiveKey)
// } catch (e) {
// origins = []
// }
// handle range
headers['Accept-Ranges'] = 'bytes'
var range = request.headers.Range || request.headers.range
if (range) range = parseRange(entry.size, range)
if (range && range.type === 'bytes') {
range = range[0] // only handle first range given
statusCode = 206
headers['Content-Range'] = 'bytes ' + range.start + '-' + range.end + '/' + entry.size
headers['Content-Length'] = range.end - range.start + 1
} else {
if (entry.size) {
headers['Content-Length'] = entry.size
}
}
Object.assign(headers, {
'Content-Security-Policy': cspHeader,
'Access-Control-Allow-Origin': '*',
'Cache-Control': 'no-cache'
})
// if (request.headers['if-none-match'] === ETag) {
// return respondError(304, 'Not Modified')
// }
// fetch the permissions
// TODO this has been disabled until we can create a better UX -prf
// var origins
// try {
// origins = await sitedataDb.getNetworkPermissions('dat://' + archiveKey)
// } catch (e) {
// origins = []
// }
// handle range
headers['Accept-Ranges'] = 'bytes'
var range = request.headers.range && parseRange(entry.size, request.headers.range)
if (range && range.type === 'bytes') {
range = range[0] // only handle first range given
statusCode = 206
headers['Content-Range'] = 'bytes ' + range.start + '-' + range.end + '/' + entry.size
headers['Content-Length'] = range.end - range.start + 1
debug('Serving range:', range)
} else {
if (entry.size) {
headers['Content-Length'] = entry.size
}
}
// fetch the entry and stream the response
debug('Entry found:', entry.path)
fileReadStream = archiveFS.createReadStream(entry.path, range)
var dataStream = fileReadStream
if (!entry) {
// check for a fallback page
if (manifest && manifest.fallback_page) {
await tryStat(manifest.fallback_page)
}
if (!entry) {
return cb(404, 'Not Found')
}
}
// handle range
let statusCode = 200
let headers = {}
let headersSent = false
let range = request.headers.range && parseRange(entry.size, request.headers.range)
headers['Accept-Ranges'] = 'bytes'
if (range && range.type === 'bytes') {
range = range[0] // only handle first range given
statusCode = 206
headers['Content-Range'] = 'bytes ' + range.start + '-' + range.end + '/' + entry.size
headers['Content-Length'] = range.end - range.start + 1
} else {
if (entry.size) {
headers['Content-Length'] = entry.size
}
}
// fetch the entry and stream the response
let fileReadStream = scopedFS.createReadStream(entry.path, range)
var dataStream = fileReadStream
.pipe(mime.identifyStream(entry.path, mimeType => {
import * as RangeParser from 'range-parser';
declare var console: { assert(b: boolean): void };
console.assert(RangeParser(200, `malformed`) === RangeParser.Result.invaild);
console.assert(RangeParser(200, `bytes=500-20`) === RangeParser.Result.unsatisifiable);
const range = RangeParser(1000, `bytes=0-499`);
if (typeof range !== 'number') {
console.assert(range.type === `bytes`);
console.assert(range.length === 1);
}
import * as RangeParser from 'range-parser';
declare var console: { assert(b: boolean): void };
console.assert(RangeParser(200, `malformed`) === RangeParser.Result.invaild);
console.assert(RangeParser(200, `bytes=500-20`) === RangeParser.Result.unsatisifiable);
const range = RangeParser(1000, `bytes=0-499`);
if (typeof range !== 'number') {
console.assert(range.type === `bytes`);
console.assert(range.length === 1);
}
range (size, options) {
const range = this.get('Range')
if (!range) return
return parseRange(size, range, options)
}
async function uploadFileToId(parentId, file, onProgress) {
const size = file.content.length;
const sessionUrl = await initResumableUploadSession({ name: file.name, size, parentId });
let startByte = 0;
while (startByte < size) {
const res = await uploadChunk({
sessionUrl,
size,
startByte,
content: file.content
});
if (res.status === 308) {
const range = parseRange(size, res.headers['range']);
startByte = range[0].end + 1;
const progress = startByte / (size / 100);
onProgress(progress);
}
if (res.status === 200 || res.status === 201) {
return res;
}
}
return null;
}
const useHttpRange = extraArguments['use-http-range']
if (useHttpRange) {
headers['Accept-Ranges'] = 'bytes'
}
const date = new Date(file.timestamp * 1000)
if (!isNaN(date.getTime())) {
headers['Last-Modified'] = date.toGMTString()
headers['Date'] = headers['Last-Modified']
}
let start = extraArguments.start && (bytes.parse(extraArguments.start) || null)
let end = extraArguments.end && (bytes.parse(extraArguments.end) || null)
if (useHttpRange && range) {
const parsedRange = rangeParser(file.size, range, { combine: true })
if (parsedRange === -1 || parsedRange === -2 || parsedRange.length > 1) {
resolve(new self.Response(new self.Blob(['Range Not Satisfiable']), {
status: 416,
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Content-Range': '*/0'
}
}))
return
}
start = parsedRange[0].start
end = parsedRange[0].end
headers['Content-Range'] = `bytes ${start}-${end}/${file.size}`
headers['Content-Length'] = end - start + 1