2025-10-01 19:55:38 +02:00

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;