Skip to content

Commit

Permalink
Added 'Range' support in the 'HEAD' method to better fit the 'GET' re…
Browse files Browse the repository at this point in the history
…sponse without body
  • Loading branch information
AdrienCastex committed Aug 3, 2017
1 parent 6945b31 commit 6ebfd98
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 2 deletions.
22 changes: 21 additions & 1 deletion lib/server/v2/commands/Head.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var WebDAVRequest_1 = require("../WebDAVRequest");
var Get_1 = require("./Get");
var default_1 = (function () {
function default_1() {
}
Expand All @@ -26,11 +27,30 @@ var default_1 = (function () {
ctx.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
return callback();
}
var range = ctx.headers.find('Range');
r.size(targetSource, function (e, size) {
if (e) {
if (e && !range) {
if (!ctx.setCodeFromError(e))
ctx.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
}
else if (range) {
try {
var _a = Get_1.parseRangeHeader(mimeType, size, range), ranges = _a.ranges, separator = _a.separator, len = _a.len;
ctx.setCode(WebDAVRequest_1.HTTPCodes.PartialContent);
ctx.response.setHeader('Accept-Ranges', 'bytes');
ctx.response.setHeader('Content-Length', len.toString());
if (ranges.length <= 1) {
ctx.response.setHeader('Content-Type', mimeType);
ctx.response.setHeader('Content-Range', 'bytes ' + ranges[0].min + '-' + ranges[0].max + '/*');
}
else
ctx.response.setHeader('Content-Type', 'multipart/byteranges; boundary=' + separator);
}
catch (ex) {
ctx.setCode(WebDAVRequest_1.HTTPCodes.BadRequest);
callback();
}
}
else {
ctx.setCode(WebDAVRequest_1.HTTPCodes.OK);
ctx.response.setHeader('Accept-Ranges', 'bytes');
Expand Down
27 changes: 26 additions & 1 deletion src/server/v2/commands/Head.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { HTTPCodes, HTTPMethod, HTTPRequestContext } from '../WebDAVRequest'
import { ResourceType } from '../../../manager/v2/fileSystem/CommonTypes'
import { Errors } from '../../../Errors'
import { parseRangeHeader } from './Get'

export default class implements HTTPMethod
{
Expand Down Expand Up @@ -33,12 +34,36 @@ export default class implements HTTPMethod
return callback();
}

const range = ctx.headers.find('Range');
r.size(targetSource, (e, size) => {
if(e)
if(e && !range)
{
if(!ctx.setCodeFromError(e))
ctx.setCode(HTTPCodes.InternalServerError)
}
else if(range)
{
try
{
const { ranges, separator, len } = parseRangeHeader(mimeType, size, range);

ctx.setCode(HTTPCodes.PartialContent);
ctx.response.setHeader('Accept-Ranges', 'bytes')
ctx.response.setHeader('Content-Length', len.toString())
if(ranges.length <= 1)
{
ctx.response.setHeader('Content-Type', mimeType)
ctx.response.setHeader('Content-Range', 'bytes ' + ranges[0].min + '-' + ranges[0].max + '/*')
}
else
ctx.response.setHeader('Content-Type', 'multipart/byteranges; boundary=' + separator)
}
catch(ex)
{
ctx.setCode(HTTPCodes.BadRequest);
callback();
}
}
else
{
ctx.setCode(HTTPCodes.OK);
Expand Down

0 comments on commit 6ebfd98

Please sign in to comment.