[bug] Check result of wopi unlock; Fix bug 68424

This commit is contained in:
Sergey Konovalov
2024-06-07 19:28:52 +03:00
parent 1c274edd9b
commit 2a2efaf1ca
2 changed files with 32 additions and 31 deletions

View File

@ -1300,9 +1300,9 @@ let unlockWopiDoc = co.wrap(function*(ctx, docId, opt_userIndex) {
//wopi unlock
var getRes = yield getCallback(ctx, docId, opt_userIndex);
if (getRes && getRes.wopiParams && getRes.wopiParams.userAuth && 'view' !== getRes.wopiParams.userAuth.mode) {
yield wopiClient.unlock(ctx, getRes.wopiParams);
let unlockRes = yield wopiClient.unlock(ctx, getRes.wopiParams);
let unlockInfo = wopiClient.getWopiUnlockMarker(getRes.wopiParams);
if (unlockInfo) {
if (unlockInfo && unlockRes) {
yield canvasService.commandOpenStartPromise(ctx, docId, undefined, unlockInfo);
}
}

View File

@ -876,40 +876,41 @@ function lock(ctx, command, lockId, fileInfo, userAuth) {
return res;
});
}
function unlock(ctx, wopiParams) {
return co(function* () {
try {
ctx.logger.info('wopi Unlock start');
const tenCallbackRequestTimeout = ctx.getCfg('services.CoAuthoring.server.callbackRequestTimeout', cfgCallbackRequestTimeout);
async function unlock(ctx, wopiParams) {
let res = false;
try {
ctx.logger.info('wopi Unlock start');
const tenCallbackRequestTimeout = ctx.getCfg('services.CoAuthoring.server.callbackRequestTimeout', cfgCallbackRequestTimeout);
if (!wopiParams.userAuth || !wopiParams.commonInfo) {
if (!wopiParams.userAuth || !wopiParams.commonInfo) {
return;
}
let fileInfo = wopiParams.commonInfo.fileInfo;
if (fileInfo && fileInfo.SupportsLocks) {
let wopiSrc = wopiParams.userAuth.wopiSrc;
let lockId = wopiParams.commonInfo.lockId;
let access_token = wopiParams.userAuth.access_token;
let uri = `${wopiSrc}?access_token=${access_token}`;
let filterStatus = await checkIpFilter(ctx, uri);
if (0 !== filterStatus) {
return;
}
let fileInfo = wopiParams.commonInfo.fileInfo;
if (fileInfo && fileInfo.SupportsLocks) {
let wopiSrc = wopiParams.userAuth.wopiSrc;
let lockId = wopiParams.commonInfo.lockId;
let access_token = wopiParams.userAuth.access_token;
let uri = `${wopiSrc}?access_token=${access_token}`;
let filterStatus = yield checkIpFilter(ctx, uri);
if (0 !== filterStatus) {
return;
}
let headers = {"X-WOPI-Override": "UNLOCK", "X-WOPI-Lock": lockId};
yield fillStandardHeaders(ctx, headers, uri, access_token);
ctx.logger.debug('wopi Unlock request uri=%s headers=%j', uri, headers);
let postRes = yield utils.postRequestPromise(ctx, uri, undefined, undefined, undefined, tenCallbackRequestTimeout, undefined, headers);
ctx.logger.debug('wopi Unlock response headers=%j', postRes.response.headers);
} else {
ctx.logger.info('wopi SupportsLocks = false');
}
} catch (err) {
ctx.logger.error('wopi error Unlock:%s', err.stack);
} finally {
ctx.logger.info('wopi Unlock end');
let headers = {"X-WOPI-Override": "UNLOCK", "X-WOPI-Lock": lockId};
await fillStandardHeaders(ctx, headers, uri, access_token);
ctx.logger.debug('wopi Unlock request uri=%s headers=%j', uri, headers);
let postRes = await utils.postRequestPromise(ctx, uri, undefined, undefined, undefined, tenCallbackRequestTimeout, undefined, headers);
ctx.logger.debug('wopi Unlock response headers=%j', postRes.response.headers);
res = true;
} else {
ctx.logger.info('wopi SupportsLocks = false');
}
});
} catch (err) {
ctx.logger.error('wopi error Unlock:%s', err.stack);
} finally {
ctx.logger.info('wopi Unlock end');
}
return res;
}
function generateProofBuffer(url, accessToken, timeStamp) {
const accessTokenBytes = Buffer.from(accessToken, 'utf8');