From 2eb6f73312a29ef8317375d43b2a65d06effa7d0 Mon Sep 17 00:00:00 2001 From: Eric Doughty-Papassideris Date: Mon, 16 Sep 2024 20:12:42 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=F0=9F=A9=B9=F0=9F=9A=A8=20ba?= =?UTF-8?q?ckend,oo:=20remove=20company=5Fid=20when=20key=20available=20an?= =?UTF-8?q?d=20minor=20cleanup=20(#525)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/services/documents/services/index.ts | 14 +++++++++++++ .../node/src/services/documents/web/routes.ts | 7 ++++--- .../backend/node/test/e2e/common/user-api.ts | 4 ++-- .../backend-callbacks.controller.ts | 11 ---------- .../src/controllers/onlyoffice.controller.ts | 3 +-- .../src/interfaces/drive.interface.ts | 2 +- .../src/middlewares/error.middleware.ts | 1 - .../src/routes/backend-callbacks.route.ts | 1 - .../src/services/drive.service.ts | 20 ++++++++----------- 9 files changed, 30 insertions(+), 33 deletions(-) diff --git a/tdrive/backend/node/src/services/documents/services/index.ts b/tdrive/backend/node/src/services/documents/services/index.ts index 28179376..0ba2e802 100644 --- a/tdrive/backend/node/src/services/documents/services/index.ts +++ b/tdrive/backend/node/src/services/documents/services/index.ts @@ -1043,6 +1043,20 @@ export class DocumentsService { throw new CrudException("Invalid editing_session_key", 400); } + try { + const parsedKey = EditingSessionKeyFormat.parse(editing_session_key); + context = { + ...context, + company: { id: parsedKey.companyId }, + }; + } catch (e) { + this.logger.error( + "Invalid editing_session_key value: " + JSON.stringify(editing_session_key), + e, + ); + throw new CrudException("Invalid editing_session_key", 400); + } + const driveFile = await this.repository.findOne({ editing_session_key }, {}, context); if (!driveFile) { this.logger.error("Drive item not found by editing session key"); diff --git a/tdrive/backend/node/src/services/documents/web/routes.ts b/tdrive/backend/node/src/services/documents/web/routes.ts index 48a4caeb..9da696fd 100644 --- a/tdrive/backend/node/src/services/documents/web/routes.ts +++ b/tdrive/backend/node/src/services/documents/web/routes.ts @@ -5,6 +5,7 @@ import { createDocumentSchema, createVersionSchema, beginEditingSchema } from ". const baseUrl = "/companies/:company_id"; const serviceUrl = `${baseUrl}/item`; +const editingSessionBase = "/editing_session/:editing_session_key"; const routes: FastifyPluginCallback = (fastify: FastifyInstance, _options, next) => { const documentsController = new DocumentsController(); @@ -89,21 +90,21 @@ const routes: FastifyPluginCallback = (fastify: FastifyInstance, _options, next) fastify.route({ method: "GET", - url: `${serviceUrl}/editing_session/:editing_session_key`, + url: editingSessionBase, //TODO NONONO check authenticate*Optional* preValidation: [fastify.authenticateOptional], handler: documentsController.getByEditingSessionKey.bind(documentsController), }); fastify.route({ method: "POST", - url: `${serviceUrl}/editing_session/:editing_session_key`, + url: editingSessionBase, preValidation: [fastify.authenticateOptional], handler: documentsController.endEditing.bind(documentsController), }); fastify.route({ method: "DELETE", - url: `${serviceUrl}/editing_session/:editing_session_key`, + url: editingSessionBase, preValidation: [fastify.authenticateOptional], handler: documentsController.cancelEditing.bind(documentsController), }); diff --git a/tdrive/backend/node/test/e2e/common/user-api.ts b/tdrive/backend/node/test/e2e/common/user-api.ts index c0186901..ec047e68 100644 --- a/tdrive/backend/node/test/e2e/common/user-api.ts +++ b/tdrive/backend/node/test/e2e/common/user-api.ts @@ -419,7 +419,7 @@ export default class UserApi { return await this.platform.app.inject({ method: "POST", - url: `${UserApi.DOC_URL}/companies/${this.platform.workspace.company_id}/item/editing_session/${editingSessionKey}`, + url: `${UserApi.DOC_URL}/editing_session/${editingSessionKey}`, headers: { authorization: `Bearer ${this.jwt}` }, @@ -432,7 +432,7 @@ export default class UserApi { ): Promise { return await this.platform.app.inject({ method: "DELETE", - url: `${UserApi.DOC_URL}/companies/${this.platform.workspace.company_id}/item/editing_session/${editingSessionKey}`, + url: `${UserApi.DOC_URL}/editing_session/${editingSessionKey}`, headers: { authorization: `Bearer ${this.jwt}` } diff --git a/tdrive/connectors/onlyoffice-connector/src/controllers/backend-callbacks.controller.ts b/tdrive/connectors/onlyoffice-connector/src/controllers/backend-callbacks.controller.ts index 7f2d584f..67083d31 100644 --- a/tdrive/connectors/onlyoffice-connector/src/controllers/backend-callbacks.controller.ts +++ b/tdrive/connectors/onlyoffice-connector/src/controllers/backend-callbacks.controller.ts @@ -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, res: Response): Promise { - await ignoreMissingKeyErrorButNoneElse(res, async () => { - await onlyofficeService.deleteForgotten(req.params.editing_session_key); - await res.send({ done: true }); - }); - } } diff --git a/tdrive/connectors/onlyoffice-connector/src/controllers/onlyoffice.controller.ts b/tdrive/connectors/onlyoffice-connector/src/controllers/onlyoffice.controller.ts index 1293a953..4a74366f 100644 --- a/tdrive/connectors/onlyoffice-connector/src/controllers/onlyoffice.controller.ts +++ b/tdrive/connectors/onlyoffice-connector/src/controllers/onlyoffice.controller.ts @@ -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 diff --git a/tdrive/connectors/onlyoffice-connector/src/interfaces/drive.interface.ts b/tdrive/connectors/onlyoffice-connector/src/interfaces/drive.interface.ts index 4249f575..af8da61d 100644 --- a/tdrive/connectors/onlyoffice-connector/src/interfaces/drive.interface.ts +++ b/tdrive/connectors/onlyoffice-connector/src/interfaces/drive.interface.ts @@ -21,6 +21,6 @@ export interface IDriveService { get: (params: DriveRequestParams) => Promise; createVersion: (params: { company_id: string; drive_file_id: string; file_id: string }) => Promise; beginEditingSession: (company_id: string, drive_file_id: string) => Promise; - endEditing: (company_id: string, editing_session_key: string, url: string) => Promise; + endEditing: (editing_session_key: string, url: string) => Promise; getByEditingSessionKey: (params: { company_id: string; editing_session_key: string; user_token?: string }) => Promise; } diff --git a/tdrive/connectors/onlyoffice-connector/src/middlewares/error.middleware.ts b/tdrive/connectors/onlyoffice-connector/src/middlewares/error.middleware.ts index b452275a..e0357663 100644 --- a/tdrive/connectors/onlyoffice-connector/src/middlewares/error.middleware.ts +++ b/tdrive/connectors/onlyoffice-connector/src/middlewares/error.middleware.ts @@ -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 { diff --git a/tdrive/connectors/onlyoffice-connector/src/routes/backend-callbacks.route.ts b/tdrive/connectors/onlyoffice-connector/src/routes/backend-callbacks.route.ts index f5b40927..2e54c12b 100644 --- a/tdrive/connectors/onlyoffice-connector/src/routes/backend-callbacks.route.ts +++ b/tdrive/connectors/onlyoffice-connector/src/routes/backend-callbacks.route.ts @@ -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); }, }; diff --git a/tdrive/connectors/onlyoffice-connector/src/services/drive.service.ts b/tdrive/connectors/onlyoffice-connector/src/services/drive.service.ts index 7a91e8dd..cf464406 100644 --- a/tdrive/connectors/onlyoffice-connector/src/services/drive.service.ts +++ b/tdrive/connectors/onlyoffice-connector/src/services/drive.service.ts @@ -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 => { + public getByEditingSessionKey = async (params: { editing_session_key: string; user_token?: string }): Promise => { try { - const { company_id, editing_session_key } = params; + const { editing_session_key } = params; return await apiService.get({ - 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) {