59 lines
2.8 KiB
JavaScript
59 lines
2.8 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var WebDAVRequest_1 = require("../WebDAVRequest");
|
|
var Errors_1 = require("../../../Errors");
|
|
var default_1 = /** @class */ (function () {
|
|
function default_1() {
|
|
}
|
|
default_1.prototype.isValidFor = function (ctx, type) {
|
|
return !type || type.isFile;
|
|
};
|
|
default_1.prototype.chunked = function (ctx, inputStream, callback) {
|
|
var targetSource = ctx.headers.isSource;
|
|
ctx.getResource(function (e, r) {
|
|
ctx.checkIfHeader(r, function () {
|
|
//ctx.requirePrivilege(targetSource ? [ 'canSource', 'canWrite' ] : [ 'canWrite' ], r, () => {
|
|
var mode = 'canCreate';
|
|
r.type(function (e, type) { return process.nextTick(function () {
|
|
if (e === Errors_1.Errors.ResourceNotFound) {
|
|
mode = 'mustCreate';
|
|
}
|
|
else if (e) {
|
|
if (!ctx.setCodeFromError(e))
|
|
ctx.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
|
|
return callback();
|
|
}
|
|
else if (!type.isFile) {
|
|
ctx.setCode(WebDAVRequest_1.HTTPCodes.MethodNotAllowed);
|
|
return callback();
|
|
}
|
|
r.openWriteStream(mode, targetSource, ctx.headers.contentLength, function (e, wStream, created) {
|
|
if (e) {
|
|
if (!ctx.setCodeFromError(e))
|
|
ctx.setCode(e === Errors_1.Errors.IntermediateResourceMissing || e === Errors_1.Errors.WrongParentTypeForCreation ? WebDAVRequest_1.HTTPCodes.Conflict : WebDAVRequest_1.HTTPCodes.InternalServerError);
|
|
return callback();
|
|
}
|
|
inputStream.pipe(wStream);
|
|
wStream.on('finish', function (e) {
|
|
if (created)
|
|
ctx.setCode(WebDAVRequest_1.HTTPCodes.Created);
|
|
else
|
|
ctx.setCode(WebDAVRequest_1.HTTPCodes.OK);
|
|
//ctx.invokeEvent('write', r);
|
|
callback();
|
|
});
|
|
wStream.on('error', function (e) {
|
|
if (!ctx.setCodeFromError(e))
|
|
ctx.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
|
|
callback();
|
|
});
|
|
});
|
|
}); });
|
|
//})
|
|
});
|
|
});
|
|
};
|
|
return default_1;
|
|
}());
|
|
exports.default = default_1;
|