79 lines
3.3 KiB
JavaScript
79 lines
3.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var WebDAVRequest_1 = require("../WebDAVRequest");
|
|
var LockScope_1 = require("../../../resource/v1/lock/LockScope");
|
|
var LockKind_1 = require("../../../resource/v1/lock/LockKind");
|
|
var LockType_1 = require("../../../resource/v1/lock/LockType");
|
|
var Errors_1 = require("../../../Errors");
|
|
var Lock_1 = require("../../../resource/v1/lock/Lock");
|
|
function method(arg, callback) {
|
|
if (!arg.user) {
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.Forbidden);
|
|
callback();
|
|
return;
|
|
}
|
|
arg.noBodyExpected(function () {
|
|
var token = arg.findHeader('Lock-Token');
|
|
if (!token) {
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.BadRequest);
|
|
callback();
|
|
return;
|
|
}
|
|
token = token.replace('<', '').replace('>', '').trim();
|
|
arg.response.setHeader('Lock-Token', '<' + token + '>');
|
|
arg.getResource(function (e, r) {
|
|
if (e) {
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.NotFound);
|
|
callback();
|
|
return;
|
|
}
|
|
arg.checkIfHeader(r, function () {
|
|
arg.requireErPrivilege(['canGetLock', 'canRemoveLock'], r, function (e, can) {
|
|
if (e) {
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
|
|
callback();
|
|
return;
|
|
}
|
|
if (!can) {
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.Forbidden);
|
|
callback();
|
|
return;
|
|
}
|
|
r.getLock(token, function (e, lock) {
|
|
if (e !== Errors_1.Errors.MustIgnore) {
|
|
if (e || !lock) {
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.Conflict);
|
|
callback();
|
|
return;
|
|
}
|
|
if (!!lock.userUid && lock.userUid !== arg.user.uid) {
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.Forbidden);
|
|
callback();
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
lock = new Lock_1.Lock(new LockKind_1.LockKind(LockScope_1.LockScope.Exclusive, LockType_1.LockType.Write), undefined, undefined);
|
|
lock.uuid = token;
|
|
}
|
|
r.removeLock(lock.uuid, function (e, done) {
|
|
if (e || !done)
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.Forbidden);
|
|
else {
|
|
arg.invokeEvent('unlock', r, lock);
|
|
arg.setCode(WebDAVRequest_1.HTTPCodes.NoContent);
|
|
}
|
|
callback();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
exports.method = method;
|
|
method.isValidFor = function (type) {
|
|
return !!type;
|
|
};
|
|
exports.default = method;
|