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

79 lines
3.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var WebDAVRequest_1 = require("../WebDAVRequest");
var StandardMethods_1 = require("../../../manager/v2/fileSystem/StandardMethods");
var JSCompatibility_1 = require("../../../helper/JSCompatibility");
var Errors_1 = require("../../../Errors");
var Path_1 = require("../../../manager/v2/Path");
function execute(ctx, methodName, privilegeName, callback) {
ctx.noBodyExpected(function () {
ctx.getResource(function (e, r) {
ctx.checkIfHeader(r, function () {
var overwrite = ctx.headers.find('overwrite') === 'T';
var destination = ctx.headers.find('destination');
if (!destination) {
ctx.setCode(WebDAVRequest_1.HTTPCodes.BadRequest);
return callback();
}
var startIndex = destination.indexOf('://');
if (startIndex !== -1) {
destination = destination.substring(startIndex + '://'.length);
destination = destination.substring(destination.indexOf('/')); // Remove the hostname + port
}
if (ctx.rootPath && JSCompatibility_1.startsWith(destination, ctx.rootPath)) {
destination = destination.substring(ctx.rootPath.length);
}
destination = new Path_1.Path(destination);
destination.decode();
var sDest = destination.toString(true);
var sSource = ctx.requested.path.toString(true);
if (sDest === sSource) {
ctx.setCode(WebDAVRequest_1.HTTPCodes.Forbidden);
return callback();
}
if (JSCompatibility_1.startsWith(sDest, sSource)) {
ctx.setCode(WebDAVRequest_1.HTTPCodes.BadGateway);
return callback();
}
var cb = function (e, overwritten) {
if (e) {
if (e === Errors_1.Errors.ResourceAlreadyExists)
ctx.setCode(WebDAVRequest_1.HTTPCodes.PreconditionFailed);
else if (!ctx.setCodeFromError(e))
ctx.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
}
else if (overwritten)
ctx.setCode(WebDAVRequest_1.HTTPCodes.NoContent);
else
ctx.setCode(WebDAVRequest_1.HTTPCodes.Created);
callback();
};
ctx.server.getFileSystem(destination, function (destFs, destRootPath, destSubPath) {
if (destFs !== r.fs) { // Standard method
if (methodName === 'move')
StandardMethods_1.StandardMethods.standardMove(ctx, r.path, r.fs, destSubPath, destFs, overwrite, cb);
else
StandardMethods_1.StandardMethods.standardCopy(ctx, r.path, r.fs, destSubPath, destFs, overwrite, cb);
}
else { // Delegate the operation to the file system
r[methodName](destSubPath, overwrite, cb);
}
});
});
});
});
}
exports.execute = execute;
var default_1 = /** @class */ (function () {
function default_1() {
}
default_1.prototype.unchunked = function (ctx, data, callback) {
execute(ctx, 'move', 'canMove', callback);
};
default_1.prototype.isValidFor = function (ctx, type) {
return !!type;
};
return default_1;
}());
exports.default = default_1;