76 lines
4.1 KiB
JavaScript
76 lines
4.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var WebDAVRequest_1 = require("../WebDAVRequest");
|
|
var Get_1 = require("./Get");
|
|
var default_1 = /** @class */ (function () {
|
|
function default_1() {
|
|
}
|
|
default_1.prototype.unchunked = function (ctx, data, callback) {
|
|
ctx.noBodyExpected(function () {
|
|
ctx.getResource(function (e, r) {
|
|
var targetSource = ctx.headers.isSource;
|
|
ctx.checkIfHeader(r, function () {
|
|
//ctx.requirePrivilege(targetSource ? [ 'canRead', 'canSource', 'canGetMimeType' ] : [ 'canRead', 'canGetMimeType' ], r, () => {
|
|
r.type(function (e, type) {
|
|
if (e) {
|
|
if (!ctx.setCodeFromError(e))
|
|
ctx.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
|
|
return callback();
|
|
}
|
|
if (!type.isFile) {
|
|
ctx.setCode(WebDAVRequest_1.HTTPCodes.MethodNotAllowed);
|
|
return callback();
|
|
}
|
|
r.mimeType(targetSource, function (e, mimeType) { return process.nextTick(function () {
|
|
if (e) {
|
|
if (!ctx.setCodeFromError(e))
|
|
ctx.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
|
|
return callback();
|
|
}
|
|
var range = ctx.headers.find('Range');
|
|
r.size(targetSource, function (e, size) {
|
|
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');
|
|
ctx.response.setHeader('Content-Type', mimeType);
|
|
if (size !== null && size !== undefined && size > -1)
|
|
ctx.response.setHeader('Content-Length', size.toString());
|
|
}
|
|
callback();
|
|
});
|
|
}); });
|
|
});
|
|
//})
|
|
});
|
|
});
|
|
});
|
|
};
|
|
default_1.prototype.isValidFor = function (ctx, type) {
|
|
return type && type.isFile;
|
|
};
|
|
return default_1;
|
|
}());
|
|
exports.default = default_1;
|