mirror of
https://github.com/ONLYOFFICE/server.git
synced 2026-04-07 14:04:35 +08:00
[bug] Check result of wopi unlock; Fix bug 68424
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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');
|
||||
|
||||
Reference in New Issue
Block a user