♻️🩹🚨 backend,oo: remove company_id when key available and minor cleanup (#525)

This commit is contained in:
Eric Doughty-Papassideris
2024-09-16 20:12:42 +02:00
parent b8814c0968
commit 2eb6f73312
9 changed files with 30 additions and 33 deletions
@@ -83,15 +83,4 @@ export default class TwakeDriveBackendCallbackController {
throw new Error(`Unexpected callback status: ${JSON.stringify(info.result)}`);
}
}
/**
* Force deletion of the provided `editing_session_key` in the OO document server.
* If the key was succesfully deleted, the `done` property in the response body will be true.
*/
public async deleteSessionKey(req: Request<RequestQuery>, res: Response): Promise<void> {
await ignoreMissingKeyErrorButNoneElse(res, async () => {
await onlyofficeService.deleteForgotten(req.params.editing_session_key);
await res.send({ done: true });
});
}
}
@@ -96,10 +96,9 @@ class OnlyOfficeController {
break;
case OnlyOffice.Callback.Status.READY_FOR_SAVING:
await driveService.endEditing(company_id, editing_session_key, url);
logger.info(`New version for session ${editing_session_key} created`);
return respondToOO();
await driveService.endEditing(editing_session_key, url);
case OnlyOffice.Callback.Status.CLOSED_WITHOUT_CHANGES:
// Save end of transaction
@@ -21,6 +21,6 @@ export interface IDriveService {
get: (params: DriveRequestParams) => Promise<DriveFileType>;
createVersion: (params: { company_id: string; drive_file_id: string; file_id: string }) => Promise<DriveFileType['item']['last_version_cache']>;
beginEditingSession: (company_id: string, drive_file_id: string) => Promise<string>;
endEditing: (company_id: string, editing_session_key: string, url: string) => Promise<void>;
endEditing: (editing_session_key: string, url: string) => Promise<void>;
getByEditingSessionKey: (params: { company_id: string; editing_session_key: string; user_token?: string }) => Promise<DriveFileType['item']>;
}
@@ -1,6 +1,5 @@
import logger from '@/lib/logger';
import { NextFunction, Request, Response } from 'express';
import { makeURLTo } from '@/routes';
export default (error: Error & { status?: number }, req: Request, res: Response, next: NextFunction): void => {
try {
@@ -11,6 +11,5 @@ export const TwakeDriveBackendCallbackRoutes = {
const controller = new TwakeDriveBackendCallbackController();
// Why post ? to garantee it is never cached and always ran
router.post('/session/:editing_session_key/check', authMiddleware, controller.checkSessionStatus);
router.delete('/session/:editing_session_key', authMiddleware, controller.deleteSessionKey);
},
};
@@ -70,10 +70,10 @@ class DriveService implements IDriveService {
}
}
public async cancelEditing(company_id: string, editing_session_key) {
public async cancelEditing(editing_session_key: string) {
try {
await apiService.delete<{}>({
url: `/internal/services/documents/v1/companies/${company_id}/item/editing_session/${encodeURIComponent(editing_session_key)}`,
url: `/internal/services/documents/v1/editing_session/${encodeURIComponent(editing_session_key)}`,
});
} catch (error) {
logger.error('Failed to begin editing session: ', error.stack);
@@ -82,13 +82,13 @@ class DriveService implements IDriveService {
}
}
public async endEditing(company_id: string, editing_session_key: string, url: string) {
public async endEditing(editing_session_key: string, url: string) {
try {
if (!url) {
throw Error('no url found');
}
const originalFile = await this.getByEditingSessionKey({ company_id, editing_session_key });
const originalFile = await this.getByEditingSessionKey({ editing_session_key });
if (!originalFile) {
throw Error('original file not found');
@@ -110,7 +110,7 @@ class DriveService implements IDriveService {
logger.info('Saving file version to Twake Drive: ', filename);
await apiService.post({
url: `/internal/services/documents/v1/companies/${company_id}/item/editing_session/${encodeURIComponent(editing_session_key)}`,
url: `/internal/services/documents/v1/editing_session/${encodeURIComponent(editing_session_key)}`,
payload: form,
headers: form.getHeaders(),
});
@@ -126,15 +126,11 @@ class DriveService implements IDriveService {
* /item/editing_session/${editing_session_key}
* @param params
*/
public getByEditingSessionKey = async (params: {
company_id: string;
editing_session_key: string;
user_token?: string;
}): Promise<DriveFileType['item']> => {
public getByEditingSessionKey = async (params: { editing_session_key: string; user_token?: string }): Promise<DriveFileType['item']> => {
try {
const { company_id, editing_session_key } = params;
const { editing_session_key } = params;
return await apiService.get<DriveFileType['item']>({
url: `/internal/services/documents/v1/companies/${company_id}/item/editing_session/${encodeURIComponent(editing_session_key)}`,
url: `/internal/services/documents/v1/editing_session/${encodeURIComponent(editing_session_key)}`,
token: params.user_token,
});
} catch (error) {