@sync-in/server 1.9.3 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -4
- package/environment/environment.dist.yaml +15 -5
- package/package.json +18 -19
- package/server/app.bootstrap.js +1 -1
- package/server/app.bootstrap.js.map +1 -1
- package/server/app.constants.js +3 -2
- package/server/app.constants.js.map +1 -1
- package/server/applications/files/constants/cache.js +2 -5
- package/server/applications/files/constants/cache.js.map +1 -1
- package/server/applications/files/constants/files.js +4 -0
- package/server/applications/files/constants/files.js.map +1 -1
- package/server/applications/files/constants/operations.js +4 -0
- package/server/applications/files/constants/operations.js.map +1 -1
- package/server/applications/files/constants/routes.js +1 -26
- package/server/applications/files/constants/routes.js.map +1 -1
- package/server/applications/files/files.config.js +15 -39
- package/server/applications/files/files.config.js.map +1 -1
- package/server/applications/files/files.controller.js +4 -4
- package/server/applications/files/files.controller.js.map +1 -1
- package/server/applications/files/files.module.js +12 -9
- package/server/applications/files/files.module.js.map +1 -1
- package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +32 -0
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +280 -0
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +552 -0
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.config.js +40 -0
- package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js +110 -0
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js +128 -0
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +47 -0
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -0
- package/server/applications/files/{interfaces/only-office-config.interface.js → modules/collabora-online/collabora-online.dtos.js} +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -0
- package/server/applications/files/{guards/files-only-office.guard.js → modules/collabora-online/collabora-online.guard.js} +7 -21
- package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +86 -0
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js +10 -0
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.module.js +41 -0
- package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js +35 -0
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +59 -0
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js +28 -0
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -0
- package/server/applications/files/{decorators → modules/only-office}/only-office-environment.decorator.js +5 -5
- package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -0
- package/server/applications/files/{services/files-only-office-manager.service.js → modules/only-office/only-office-manager.service.js} +101 -97
- package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +477 -0
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.config.js +51 -0
- package/server/applications/files/modules/only-office/only-office.config.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.constants.js +417 -0
- package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -0
- package/server/applications/files/{files-only-office.controller.js → modules/only-office/only-office.controller.js} +35 -52
- package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -0
- package/server/applications/files/{files-only-office.controller.spec.js → modules/only-office/only-office.controller.spec.js} +24 -21
- package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.dtos.js +10 -0
- package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.guard.js +40 -0
- package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -0
- package/server/applications/files/{guards/files-only-office.guard.spec.js → modules/only-office/only-office.guard.spec.js} +15 -21
- package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.interface.js +10 -0
- package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.module.js +41 -0
- package/server/applications/files/modules/only-office/only-office.module.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.routes.js +45 -0
- package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -0
- package/server/applications/files/{guards/files-only-office.strategy.js → modules/only-office/only-office.strategy.js} +11 -11
- package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -0
- package/server/applications/files/services/files-lock-manager.service.js +25 -33
- package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
- package/server/applications/files/services/files-manager.service.js +17 -16
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-methods.service.js +2 -2
- package/server/applications/files/services/files-methods.service.js.map +1 -1
- package/server/applications/files/services/files-methods.service.spec.js +5 -5
- package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
- package/server/applications/files/services/files-recents.service.js +4 -0
- package/server/applications/files/services/files-recents.service.js.map +1 -1
- package/server/applications/files/services/files-scheduler.service.js +24 -5
- package/server/applications/files/services/files-scheduler.service.js.map +1 -1
- package/server/applications/files/utils/files.js +10 -2
- package/server/applications/files/utils/files.js.map +1 -1
- package/server/applications/links/constants/routes.js +5 -0
- package/server/applications/links/constants/routes.js.map +1 -1
- package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
- package/server/applications/links/links.controller.js +25 -5
- package/server/applications/links/links.controller.js.map +1 -1
- package/server/applications/links/services/links-manager.service.js +43 -21
- package/server/applications/links/services/links-manager.service.js.map +1 -1
- package/server/applications/links/services/links-manager.service.spec.js +4 -3
- package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
- package/server/applications/links/services/links-queries.service.js +9 -2
- package/server/applications/links/services/links-queries.service.js.map +1 -1
- package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +3 -0
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.spec.js +2 -1
- package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
- package/server/applications/shares/services/shares-queries.service.js +1 -0
- package/server/applications/shares/services/shares-queries.service.js.map +1 -1
- package/server/applications/spaces/constants/spaces.js +2 -2
- package/server/applications/spaces/constants/spaces.js.map +1 -1
- package/server/applications/spaces/decorators/space-override-permission.decorator.js +18 -0
- package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -0
- package/server/applications/spaces/guards/space.guard.js +40 -33
- package/server/applications/spaces/guards/space.guard.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.spec.js +10 -15
- package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-scheduler.service.js +9 -1
- package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
- package/server/applications/webdav/constants/webdav.js +4 -0
- package/server/applications/webdav/constants/webdav.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.js +9 -8
- package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
- package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.js +40 -17
- package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.spec.js +2157 -1289
- package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
- package/server/applications/webdav/utils/webdav.js +8 -4
- package/server/applications/webdav/utils/webdav.js.map +1 -1
- package/server/applications/webdav/webdav.controller.js +4 -4
- package/server/applications/webdav/webdav.controller.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.js +8 -3
- package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js +1 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js +350 -4
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +1 -1
- package/server/configuration/config.environment.js +5 -1
- package/server/configuration/config.environment.js.map +1 -1
- package/server/configuration/config.interfaces.js.map +1 -1
- package/static/3rdpartylicenses.txt +507 -507
- package/static/assets/pdfjs/build/pdf.mjs +93 -33
- package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.sandbox.mjs +3 -3
- package/static/assets/pdfjs/build/pdf.sandbox.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.worker.mjs +166 -54
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/images/checkmark.svg +5 -0
- package/static/assets/pdfjs/web/images/pages_closeButton.svg +3 -0
- package/static/assets/pdfjs/web/images/pages_selected.svg +7 -0
- package/static/assets/pdfjs/web/images/pages_viewArrow.svg +3 -0
- package/static/assets/pdfjs/web/images/pages_viewButton.svg +3 -0
- package/static/assets/pdfjs/web/locale/be/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/bs/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/cs/viewer.ftl +4 -6
- package/static/assets/pdfjs/web/locale/cy/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/da/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/de/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/el/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +6 -2
- package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +82 -17
- package/static/assets/pdfjs/web/locale/eo/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/eu/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/fi/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/fr/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/fur/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +3 -5
- package/static/assets/pdfjs/web/locale/gn/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/he/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/hr/viewer.ftl +66 -0
- package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/hu/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +3 -8
- package/static/assets/pdfjs/web/locale/ia/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/id/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/is/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/it/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/ja/viewer.ftl +0 -14
- package/static/assets/pdfjs/web/locale/ka/viewer.ftl +4 -6
- package/static/assets/pdfjs/web/locale/kab/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/ko/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +1 -3
- package/static/assets/pdfjs/web/locale/nl/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +4 -2
- package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/pl/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/pt-PT/viewer.ftl +35 -0
- package/static/assets/pdfjs/web/locale/rm/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/ro/viewer.ftl +4 -6
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -5
- package/static/assets/pdfjs/web/locale/sk/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/sl/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/sq/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/tg/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/th/viewer.ftl +2 -2
- package/static/assets/pdfjs/web/locale/tr/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/vi/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/viewer.css +1778 -835
- package/static/assets/pdfjs/web/viewer.html +167 -86
- package/static/assets/pdfjs/web/viewer.mjs +1106 -801
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/chunk-27V66YJV.js +2 -0
- package/static/{chunk-WJYVS27M.js → chunk-27Z3SYRL.js} +1 -1
- package/static/{chunk-NFIES7BC.js → chunk-2RWLNKZH.js} +1 -1
- package/static/chunk-2YQ4SX3A.js +13 -0
- package/static/{chunk-GENTF6JM.js → chunk-3JYMJQYT.js} +1 -1
- package/static/chunk-3QTROEHV.js +1 -0
- package/static/{chunk-ZPI7RQ2S.js → chunk-3RPUQ22U.js} +1 -1
- package/static/{chunk-R6VB3INJ.js → chunk-3WZ6F3LC.js} +1 -1
- package/static/chunk-3ZLBVUCX.js +2 -0
- package/static/{chunk-5HCVWZMA.js → chunk-45AZ6ZML.js} +1 -1
- package/static/chunk-46TJLPJY.js +1 -0
- package/static/chunk-4NIYCYRS.js +2 -0
- package/static/{chunk-XXYMVRSH.js → chunk-4TPFERL6.js} +1 -1
- package/static/{chunk-CAZSNVMS.js → chunk-5O66CLTD.js} +1 -1
- package/static/chunk-6OEOADR6.js +1 -0
- package/static/chunk-6WMXMIE4.js +1 -0
- package/static/{chunk-NK2NMAJI.js → chunk-7VRYTDX4.js} +1 -1
- package/static/{chunk-ASBPYTLT.js → chunk-ARS47O5X.js} +1 -1
- package/static/chunk-B6HQYQYG.js +1 -0
- package/static/chunk-BCN4T5DO.js +2 -0
- package/static/{chunk-PKU4IIIR.js → chunk-CCZWPM7Q.js} +1 -1
- package/static/{chunk-QUSS6SUC.js → chunk-CMNMPG6Z.js} +1 -1
- package/static/{chunk-GDPJRUVU.js → chunk-CSVPAZHK.js} +1 -1
- package/static/{chunk-BJARRIS6.js → chunk-D55YR5X7.js} +4 -4
- package/static/{chunk-Z6RJZIDG.js → chunk-D5FQ72R4.js} +1 -1
- package/static/{chunk-4DF2SQD4.js → chunk-DGCVA6BM.js} +1 -1
- package/static/{chunk-TVJQXN73.js → chunk-DVCN3P7Q.js} +1 -1
- package/static/chunk-E32J777S.js +5 -0
- package/static/{chunk-5NHB7SV3.js → chunk-FIUF2JM4.js} +1 -1
- package/static/{chunk-RJOHDAPM.js → chunk-G3PL6YX3.js} +1 -1
- package/static/chunk-G7RZN7HN.js +1 -0
- package/static/{chunk-DDRGLHOP.js → chunk-GQHXYX6Z.js} +1 -1
- package/static/{chunk-5HYSNQR4.js → chunk-GWRAGN3M.js} +1 -1
- package/static/{chunk-ZC5ZDCDC.js → chunk-GXWGB7WO.js} +1 -1
- package/static/{chunk-25PWAXTJ.js → chunk-HGODIZTV.js} +1 -1
- package/static/{chunk-4KXJ6C4N.js → chunk-HZAB6F4Q.js} +1 -1
- package/static/chunk-I3FR3A45.js +1 -0
- package/static/{chunk-A6J6SOM6.js → chunk-I5SPA4G2.js} +1 -1
- package/static/{chunk-TGHBDJZA.js → chunk-IMFO2MI7.js} +1 -1
- package/static/{chunk-CURVLK7L.js → chunk-JNTNMIUH.js} +1 -1
- package/static/chunk-JRXG43AA.js +2 -0
- package/static/{chunk-XAIOGRBO.js → chunk-KAUCN24H.js} +1 -1
- package/static/chunk-KDUAB76O.js +1 -0
- package/static/chunk-KPOQLDWF.js +1 -0
- package/static/{chunk-HE6EDXWI.js → chunk-KWFELZTM.js} +1 -1
- package/static/{chunk-2CAAJBRO.js → chunk-L3BIP4AA.js} +1 -1
- package/static/{chunk-U75PLYIJ.js → chunk-LGIVVJDD.js} +1 -1
- package/static/{chunk-JEVBUJQ4.js → chunk-LNLBIJZD.js} +1 -1
- package/static/chunk-LTJNLOX2.js +1 -0
- package/static/{chunk-SDR3UG2F.js → chunk-LZUHREOF.js} +1 -1
- package/static/{chunk-VO4WVT6K.js → chunk-NIR4YE2E.js} +1 -1
- package/static/{chunk-S6YKBWJE.js → chunk-NJJURHX4.js} +1 -1
- package/static/chunk-NNZWSNAW.js +1 -0
- package/static/chunk-NWKBB7J4.js +1 -0
- package/static/chunk-O3YLAEVE.js +3 -0
- package/static/chunk-OUHCDDT6.js +1 -0
- package/static/{chunk-ZRBLCAOK.js → chunk-PDG7DOEF.js} +1 -1
- package/static/chunk-POUWUMC4.js +1 -0
- package/static/{chunk-YTBSB2GE.js → chunk-PPJCVBJH.js} +1 -1
- package/static/{chunk-K3MOXDU5.js → chunk-PQZLR4P3.js} +1 -1
- package/static/chunk-PVYVY3GD.js +1 -0
- package/static/chunk-Q5X5TPAG.js +1 -0
- package/static/{chunk-LFAQLJZK.js → chunk-QHJT5H4M.js} +1 -1
- package/static/{chunk-A7DSX7VP.js → chunk-R4VMWCM5.js} +1 -1
- package/static/{chunk-27XEAHMV.js → chunk-R7PLNX75.js} +1 -1
- package/static/chunk-RJULB733.js +1 -0
- package/static/{chunk-MBFMTBVJ.js → chunk-RNVPQQKT.js} +5 -5
- package/static/chunk-RTNEBRKJ.js +1 -0
- package/static/{chunk-FXM7XXWA.js → chunk-S3TTWPQA.js} +1 -1
- package/static/{chunk-6VJI4X2A.js → chunk-SDJNZULP.js} +1 -1
- package/static/chunk-SNOOCDJD.js +1 -0
- package/static/chunk-T42BV6TR.js +1 -0
- package/static/{chunk-4OV3SAUS.js → chunk-TNCKNU6I.js} +1 -1
- package/static/{chunk-2LHHXDD5.js → chunk-ULSPQ3HP.js} +1 -1
- package/static/{chunk-4EUHBTWV.js → chunk-UOK3LKSX.js} +1 -1
- package/static/{chunk-7NI353LS.js → chunk-VD5JHSDS.js} +1 -1
- package/static/{chunk-YXWF2DGF.js → chunk-XBKCQCBI.js} +1 -1
- package/static/{chunk-KBWK65KM.js → chunk-XEWLBWFF.js} +1 -1
- package/static/{chunk-FLPZB3OX.js → chunk-XTVNHFKX.js} +1 -1
- package/static/chunk-ZCSHU3D7.js +1 -0
- package/static/{chunk-FRBTL2ER.js → chunk-ZEJLIGAY.js} +1 -1
- package/static/{chunk-7H5O4BLV.js → chunk-ZHOE5VEY.js} +1 -1
- package/static/chunk-ZOMRIN3G.js +2 -0
- package/static/index.html +2 -2
- package/static/main-YKDNJ7LK.js +11 -0
- package/static/{styles-S5HVK4H5.css → styles-XLLEY5Y3.css} +1 -1
- package/server/applications/files/constants/only-office.js +0 -531
- package/server/applications/files/constants/only-office.js.map +0 -1
- package/server/applications/files/decorators/only-office-environment.decorator.js.map +0 -1
- package/server/applications/files/files-only-office.controller.js.map +0 -1
- package/server/applications/files/files-only-office.controller.spec.js.map +0 -1
- package/server/applications/files/guards/files-only-office.guard.js.map +0 -1
- package/server/applications/files/guards/files-only-office.guard.spec.js.map +0 -1
- package/server/applications/files/guards/files-only-office.strategy.js.map +0 -1
- package/server/applications/files/interfaces/only-office-config.interface.js.map +0 -1
- package/server/applications/files/services/files-only-office-manager.service.js.map +0 -1
- package/server/applications/files/services/files-only-office-manager.service.spec.js +0 -58
- package/server/applications/files/services/files-only-office-manager.service.spec.js.map +0 -1
- package/static/chunk-2XY4PMI5.js +0 -1
- package/static/chunk-33WFRCUP.js +0 -1
- package/static/chunk-3LVFDMTN.js +0 -1
- package/static/chunk-42L6C5MT.js +0 -1
- package/static/chunk-5WCQBTXW.js +0 -1
- package/static/chunk-A7R246NW.js +0 -1
- package/static/chunk-BSB4VROD.js +0 -2
- package/static/chunk-DHFQIFOF.js +0 -1
- package/static/chunk-DRHPEERW.js +0 -2
- package/static/chunk-FCGTI42I.js +0 -1
- package/static/chunk-H4RLHI3Y.js +0 -1
- package/static/chunk-ITVA26X2.js +0 -2
- package/static/chunk-IUJ4IK26.js +0 -1
- package/static/chunk-L3PDWJZ3.js +0 -3
- package/static/chunk-LBXOAKBD.js +0 -1
- package/static/chunk-LZKI5P5T.js +0 -1
- package/static/chunk-MYM43ENO.js +0 -1
- package/static/chunk-MZBO5PAR.js +0 -1
- package/static/chunk-NAH4V2R6.js +0 -2
- package/static/chunk-O7UXVNR2.js +0 -1
- package/static/chunk-PCFH5HCI.js +0 -2
- package/static/chunk-SRBOO7AO.js +0 -1
- package/static/chunk-UUX3M6DC.js +0 -1
- package/static/chunk-VJ2HWQRJ.js +0 -5
- package/static/chunk-VZPCXSRG.js +0 -2
- package/static/chunk-W72JYHOH.js +0 -1
- package/static/chunk-XHQEF2IX.js +0 -1
- package/static/chunk-XKEBQNQJ.js +0 -1
- package/static/chunk-ZERBTNFW.js +0 -13
- package/static/main-FE6GWZXU.js +0 -11
- /package/static/assets/pdfjs/web/images/{toolbarButton-sidebarToggle.svg → toolbarButton-viewsManagerToggle.svg} +0 -0
|
@@ -7,14 +7,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
9
|
const _testing = require("@nestjs/testing");
|
|
10
|
-
const _contextinterceptor = require("
|
|
11
|
-
const _contextmanagerservice = require("
|
|
12
|
-
const _spacesmanagerservice = require("
|
|
13
|
-
const _operations = require("
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
describe(
|
|
10
|
+
const _contextinterceptor = require("../../../../infrastructure/context/interceptors/context.interceptor");
|
|
11
|
+
const _contextmanagerservice = require("../../../../infrastructure/context/services/context-manager.service");
|
|
12
|
+
const _spacesmanagerservice = require("../../../spaces/services/spaces-manager.service");
|
|
13
|
+
const _operations = require("../../constants/operations");
|
|
14
|
+
const _filesmethodsservice = require("../../services/files-methods.service");
|
|
15
|
+
const _onlyofficemanagerservice = require("./only-office-manager.service");
|
|
16
|
+
const _onlyofficecontroller = require("./only-office.controller");
|
|
17
|
+
describe(_onlyofficecontroller.OnlyOfficeController.name, ()=>{
|
|
18
18
|
let controller;
|
|
19
19
|
const filesOnlyOfficeManagerMock = {
|
|
20
20
|
getSettings: jest.fn(),
|
|
@@ -27,11 +27,11 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
|
|
|
27
27
|
jest.clearAllMocks();
|
|
28
28
|
const module = await _testing.Test.createTestingModule({
|
|
29
29
|
controllers: [
|
|
30
|
-
|
|
30
|
+
_onlyofficecontroller.OnlyOfficeController
|
|
31
31
|
],
|
|
32
32
|
providers: [
|
|
33
33
|
{
|
|
34
|
-
provide:
|
|
34
|
+
provide: _onlyofficemanagerservice.OnlyOfficeManager,
|
|
35
35
|
useValue: filesOnlyOfficeManagerMock
|
|
36
36
|
},
|
|
37
37
|
{
|
|
@@ -46,7 +46,7 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
|
|
|
46
46
|
_contextinterceptor.ContextInterceptor
|
|
47
47
|
]
|
|
48
48
|
}).compile();
|
|
49
|
-
controller = module.get(
|
|
49
|
+
controller = module.get(_onlyofficecontroller.OnlyOfficeController);
|
|
50
50
|
});
|
|
51
51
|
it('should be defined', ()=>{
|
|
52
52
|
expect(controller).toBeDefined();
|
|
@@ -62,16 +62,18 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
|
|
|
62
62
|
const req = {
|
|
63
63
|
headers: {},
|
|
64
64
|
params: {},
|
|
65
|
-
query: {}
|
|
65
|
+
query: {},
|
|
66
|
+
user,
|
|
67
|
+
space
|
|
66
68
|
};
|
|
67
69
|
const expected = {
|
|
68
70
|
config: 'ok',
|
|
69
71
|
mode: _operations.FILE_MODE.VIEW
|
|
70
72
|
};
|
|
71
73
|
filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected);
|
|
72
|
-
const result = await controller.onlyOfficeSettings(
|
|
74
|
+
const result = await controller.onlyOfficeSettings(req);
|
|
73
75
|
expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledTimes(1);
|
|
74
|
-
expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space,
|
|
76
|
+
expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, req);
|
|
75
77
|
expect(result).toBe(expected);
|
|
76
78
|
});
|
|
77
79
|
it('should pass provided mode to manager', async ()=>{
|
|
@@ -84,15 +86,17 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
|
|
|
84
86
|
const req = {
|
|
85
87
|
headers: {
|
|
86
88
|
'x-test': '1'
|
|
87
|
-
}
|
|
89
|
+
},
|
|
90
|
+
user,
|
|
91
|
+
space
|
|
88
92
|
};
|
|
89
93
|
const expected = {
|
|
90
94
|
config: 'ok',
|
|
91
95
|
mode: _operations.FILE_MODE.EDIT
|
|
92
96
|
};
|
|
93
97
|
filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected);
|
|
94
|
-
const result = await controller.onlyOfficeSettings(
|
|
95
|
-
expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space,
|
|
98
|
+
const result = await controller.onlyOfficeSettings(req);
|
|
99
|
+
expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, req);
|
|
96
100
|
expect(result).toBe(expected);
|
|
97
101
|
});
|
|
98
102
|
});
|
|
@@ -126,17 +130,16 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
|
|
|
126
130
|
id: 'space-3'
|
|
127
131
|
};
|
|
128
132
|
const token = 'jwt-token';
|
|
129
|
-
const fileId = 'file-123';
|
|
130
133
|
const expected = {
|
|
131
134
|
ok: true
|
|
132
135
|
};
|
|
133
136
|
filesOnlyOfficeManagerMock.callBack.mockResolvedValue(expected);
|
|
134
|
-
const result = await controller.onlyOfficeCallBack(user, space, token
|
|
137
|
+
const result = await controller.onlyOfficeCallBack(user, space, token);
|
|
135
138
|
expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledTimes(1);
|
|
136
|
-
expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledWith(user, space, token
|
|
139
|
+
expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledWith(user, space, token);
|
|
137
140
|
expect(result).toBe(expected);
|
|
138
141
|
});
|
|
139
142
|
});
|
|
140
143
|
});
|
|
141
144
|
|
|
142
|
-
//# sourceMappingURL=
|
|
145
|
+
//# sourceMappingURL=only-office.controller.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.controller.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { ContextInterceptor } from '../../../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { SpacesManager } from '../../../spaces/services/spaces-manager.service'\nimport { FILE_MODE } from '../../constants/operations'\nimport { FilesMethods } from '../../services/files-methods.service'\nimport { OnlyOfficeManager } from './only-office-manager.service'\nimport { OnlyOfficeController } from './only-office.controller'\n\ndescribe(OnlyOfficeController.name, () => {\n let controller: OnlyOfficeController\n\n const filesOnlyOfficeManagerMock = {\n getSettings: jest.fn(),\n callBack: jest.fn()\n }\n\n const filesMethodsMock = {\n headOrGet: jest.fn()\n }\n\n beforeEach(async () => {\n jest.clearAllMocks()\n const module: TestingModule = await Test.createTestingModule({\n controllers: [OnlyOfficeController],\n providers: [\n { provide: OnlyOfficeManager, useValue: filesOnlyOfficeManagerMock },\n { provide: FilesMethods, useValue: filesMethodsMock },\n { provide: SpacesManager, useValue: {} },\n ContextManager,\n ContextInterceptor\n ]\n }).compile()\n\n controller = module.get<OnlyOfficeController>(OnlyOfficeController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n\n describe('onlyOfficeSettings', () => {\n it('should call manager with default mode \"view\" when mode is undefined', async () => {\n const user: any = { id: 1 }\n const space: any = { id: 'space-1' }\n const req: any = { headers: {}, params: {}, query: {}, user, space }\n const expected = { config: 'ok', mode: FILE_MODE.VIEW }\n filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeSettings(req)\n\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledTimes(1)\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, req)\n expect(result).toBe(expected)\n })\n\n it('should pass provided mode to manager', async () => {\n const user: any = { id: 2 }\n const space: any = { id: 'space-2' }\n const req: any = { headers: { 'x-test': '1' }, user, space }\n const expected = { config: 'ok', mode: FILE_MODE.EDIT }\n filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeSettings(req)\n\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, req)\n expect(result).toBe(expected)\n })\n })\n\n describe('onlyOfficeDocument', () => {\n it('should delegate to filesMethods.headOrGet with req and res', async () => {\n const req: any = { params: { '*': 'path/to/file' } }\n const res: any = { header: jest.fn(), status: jest.fn().mockReturnThis() }\n const stream: any = { readable: true }\n filesMethodsMock.headOrGet.mockResolvedValue(stream)\n\n const result = await controller.onlyOfficeDocument(req, res)\n\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledTimes(1)\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(req, res)\n expect(result).toBe(stream)\n })\n })\n\n describe('onlyOfficeCallBack', () => {\n it('should call manager.callBack with user, space, token and fileId (fid)', async () => {\n const user: any = { id: 3 }\n const space: any = { id: 'space-3' }\n const token = 'jwt-token'\n const expected = { ok: true }\n filesOnlyOfficeManagerMock.callBack.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeCallBack(user, space, token)\n\n expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledTimes(1)\n expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledWith(user, space, token)\n expect(result).toBe(expected)\n })\n })\n})\n"],"names":["describe","OnlyOfficeController","name","controller","filesOnlyOfficeManagerMock","getSettings","jest","fn","callBack","filesMethodsMock","headOrGet","beforeEach","clearAllMocks","module","Test","createTestingModule","controllers","providers","provide","OnlyOfficeManager","useValue","FilesMethods","SpacesManager","ContextManager","ContextInterceptor","compile","get","it","expect","toBeDefined","user","id","space","req","headers","params","query","expected","config","mode","FILE_MODE","VIEW","mockResolvedValue","result","onlyOfficeSettings","toHaveBeenCalledTimes","toHaveBeenCalledWith","toBe","EDIT","res","header","status","mockReturnThis","stream","readable","onlyOfficeDocument","token","ok","onlyOfficeCallBack"],"mappings":"AAAA;;;;CAIC;;;;yBAEmC;oCACD;uCACJ;sCACD;4BACJ;qCACG;0CACK;sCACG;AAErCA,SAASC,0CAAoB,CAACC,IAAI,EAAE;IAClC,IAAIC;IAEJ,MAAMC,6BAA6B;QACjCC,aAAaC,KAAKC,EAAE;QACpBC,UAAUF,KAAKC,EAAE;IACnB;IAEA,MAAME,mBAAmB;QACvBC,WAAWJ,KAAKC,EAAE;IACpB;IAEAI,WAAW;QACTL,KAAKM,aAAa;QAClB,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,aAAa;gBAACf,0CAAoB;aAAC;YACnCgB,WAAW;gBACT;oBAAEC,SAASC,2CAAiB;oBAAEC,UAAUhB;gBAA2B;gBACnE;oBAAEc,SAASG,iCAAY;oBAAED,UAAUX;gBAAiB;gBACpD;oBAAES,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvCG,qCAAc;gBACdC,sCAAkB;aACnB;QACH,GAAGC,OAAO;QAEVtB,aAAaU,OAAOa,GAAG,CAAuBzB,0CAAoB;IACpE;IAEA0B,GAAG,qBAAqB;QACtBC,OAAOzB,YAAY0B,WAAW;IAChC;IAEA7B,SAAS,sBAAsB;QAC7B2B,GAAG,uEAAuE;YACxE,MAAMG,OAAY;gBAAEC,IAAI;YAAE;YAC1B,MAAMC,QAAa;gBAAED,IAAI;YAAU;YACnC,MAAME,MAAW;gBAAEC,SAAS,CAAC;gBAAGC,QAAQ,CAAC;gBAAGC,OAAO,CAAC;gBAAGN;gBAAME;YAAM;YACnE,MAAMK,WAAW;gBAAEC,QAAQ;gBAAMC,MAAMC,qBAAS,CAACC,IAAI;YAAC;YACtDrC,2BAA2BC,WAAW,CAACqC,iBAAiB,CAACL;YAEzD,MAAMM,SAAS,MAAMxC,WAAWyC,kBAAkB,CAACX;YAEnDL,OAAOxB,2BAA2BC,WAAW,EAAEwC,qBAAqB,CAAC;YACrEjB,OAAOxB,2BAA2BC,WAAW,EAAEyC,oBAAoB,CAAChB,MAAME,OAAOC;YACjFL,OAAOe,QAAQI,IAAI,CAACV;QACtB;QAEAV,GAAG,wCAAwC;YACzC,MAAMG,OAAY;gBAAEC,IAAI;YAAE;YAC1B,MAAMC,QAAa;gBAAED,IAAI;YAAU;YACnC,MAAME,MAAW;gBAAEC,SAAS;oBAAE,UAAU;gBAAI;gBAAGJ;gBAAME;YAAM;YAC3D,MAAMK,WAAW;gBAAEC,QAAQ;gBAAMC,MAAMC,qBAAS,CAACQ,IAAI;YAAC;YACtD5C,2BAA2BC,WAAW,CAACqC,iBAAiB,CAACL;YAEzD,MAAMM,SAAS,MAAMxC,WAAWyC,kBAAkB,CAACX;YAEnDL,OAAOxB,2BAA2BC,WAAW,EAAEyC,oBAAoB,CAAChB,MAAME,OAAOC;YACjFL,OAAOe,QAAQI,IAAI,CAACV;QACtB;IACF;IAEArC,SAAS,sBAAsB;QAC7B2B,GAAG,8DAA8D;YAC/D,MAAMM,MAAW;gBAAEE,QAAQ;oBAAE,KAAK;gBAAe;YAAE;YACnD,MAAMc,MAAW;gBAAEC,QAAQ5C,KAAKC,EAAE;gBAAI4C,QAAQ7C,KAAKC,EAAE,GAAG6C,cAAc;YAAG;YACzE,MAAMC,SAAc;gBAAEC,UAAU;YAAK;YACrC7C,iBAAiBC,SAAS,CAACgC,iBAAiB,CAACW;YAE7C,MAAMV,SAAS,MAAMxC,WAAWoD,kBAAkB,CAACtB,KAAKgB;YAExDrB,OAAOnB,iBAAiBC,SAAS,EAAEmC,qBAAqB,CAAC;YACzDjB,OAAOnB,iBAAiBC,SAAS,EAAEoC,oBAAoB,CAACb,KAAKgB;YAC7DrB,OAAOe,QAAQI,IAAI,CAACM;QACtB;IACF;IAEArD,SAAS,sBAAsB;QAC7B2B,GAAG,yEAAyE;YAC1E,MAAMG,OAAY;gBAAEC,IAAI;YAAE;YAC1B,MAAMC,QAAa;gBAAED,IAAI;YAAU;YACnC,MAAMyB,QAAQ;YACd,MAAMnB,WAAW;gBAAEoB,IAAI;YAAK;YAC5BrD,2BAA2BI,QAAQ,CAACkC,iBAAiB,CAACL;YAEtD,MAAMM,SAAS,MAAMxC,WAAWuD,kBAAkB,CAAC5B,MAAME,OAAOwB;YAEhE5B,OAAOxB,2BAA2BI,QAAQ,EAAEqC,qBAAqB,CAAC;YAClEjB,OAAOxB,2BAA2BI,QAAQ,EAAEsC,oBAAoB,CAAChB,MAAME,OAAOwB;YAC9E5B,OAAOe,QAAQI,IAAI,CAACV;QACtB;IACF;AACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
+
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
+
* See the LICENSE file for licensing details
|
|
5
|
+
*/ "use strict";
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=only-office.dtos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.dtos.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport type { FileLockProps } from '../../interfaces/file-props.interface'\nimport type { OnlyOfficeConfig } from './only-office.interface'\n\nexport interface OnlyOfficeReqDto {\n documentServerUrl: string\n config: OnlyOfficeConfig\n hasLock: false | FileLockProps\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
+
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
+
* See the LICENSE file for licensing details
|
|
5
|
+
*/ "use strict";
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
Object.defineProperty(exports, "OnlyOfficeGuard", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function() {
|
|
12
|
+
return OnlyOfficeGuard;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
const _common = require("@nestjs/common");
|
|
16
|
+
const _passport = require("@nestjs/passport");
|
|
17
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
}
|
|
23
|
+
let OnlyOfficeGuard = class OnlyOfficeGuard extends (0, _passport.AuthGuard)('filesOnlyOfficeToken') {
|
|
24
|
+
handleRequest(err, user, info, ctx, status) {
|
|
25
|
+
const req = this.getRequest(ctx);
|
|
26
|
+
req.raw.user = user?.login || 'unauthorized';
|
|
27
|
+
if (info) {
|
|
28
|
+
this.logger.warn(`<${req.raw.user}> <${req.ip}> ${info}`);
|
|
29
|
+
}
|
|
30
|
+
return super.handleRequest(err, user, info, ctx, status);
|
|
31
|
+
}
|
|
32
|
+
constructor(...args){
|
|
33
|
+
super(...args), this.logger = new _common.Logger(OnlyOfficeGuard.name);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
OnlyOfficeGuard = _ts_decorate([
|
|
37
|
+
(0, _common.Injectable)()
|
|
38
|
+
], OnlyOfficeGuard);
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=only-office.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.guard.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { ExecutionContext, Injectable, Logger } from '@nestjs/common'\nimport { AuthGuard, IAuthGuard } from '@nestjs/passport'\n\n@Injectable()\nexport class OnlyOfficeGuard extends AuthGuard('filesOnlyOfficeToken') implements IAuthGuard {\n private readonly logger = new Logger(OnlyOfficeGuard.name)\n\n handleRequest<TUser = any>(err: any, user: any, info: Error, ctx: ExecutionContext, status?: any): TUser {\n const req = this.getRequest(ctx)\n req.raw.user = user?.login || 'unauthorized'\n if (info) {\n this.logger.warn(`<${req.raw.user}> <${req.ip}> ${info}`)\n }\n return super.handleRequest(err, user, info, ctx, status)\n }\n}\n"],"names":["OnlyOfficeGuard","AuthGuard","handleRequest","err","user","info","ctx","status","req","getRequest","raw","login","logger","warn","ip","Logger","name"],"mappings":"AAAA;;;;CAIC;;;;+BAMYA;;;eAAAA;;;wBAJwC;0BACf;;;;;;;AAG/B,IAAA,AAAMA,kBAAN,MAAMA,wBAAwBC,IAAAA,mBAAS,EAAC;IAG7CC,cAA2BC,GAAQ,EAAEC,IAAS,EAAEC,IAAW,EAAEC,GAAqB,EAAEC,MAAY,EAAS;QACvG,MAAMC,MAAM,IAAI,CAACC,UAAU,CAACH;QAC5BE,IAAIE,GAAG,CAACN,IAAI,GAAGA,MAAMO,SAAS;QAC9B,IAAIN,MAAM;YACR,IAAI,CAACO,MAAM,CAACC,IAAI,CAAC,CAAC,CAAC,EAAEL,IAAIE,GAAG,CAACN,IAAI,CAAC,GAAG,EAAEI,IAAIM,EAAE,CAAC,EAAE,EAAET,MAAM;QAC1D;QACA,OAAO,KAAK,CAACH,cAAcC,KAAKC,MAAMC,MAAMC,KAAKC;IACnD;;QAVK,qBACYK,SAAS,IAAIG,cAAM,CAACf,gBAAgBgB,IAAI;;AAU3D"}
|
|
@@ -10,12 +10,12 @@ const _tsjest = require("@golevelup/ts-jest");
|
|
|
10
10
|
const _jwt = require("@nestjs/jwt");
|
|
11
11
|
const _testing = require("@nestjs/testing");
|
|
12
12
|
const _nestjspino = require("nestjs-pino");
|
|
13
|
-
const _configenvironment = require("
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
describe(
|
|
13
|
+
const _configenvironment = require("../../../../configuration/config.environment");
|
|
14
|
+
const _onlyofficeconstants = require("./only-office.constants");
|
|
15
|
+
const _onlyofficeguard = require("./only-office.guard");
|
|
16
|
+
const _onlyofficeroutes = require("./only-office.routes");
|
|
17
|
+
const _onlyofficestrategy = require("./only-office.strategy");
|
|
18
|
+
describe(_onlyofficeguard.OnlyOfficeGuard.name, ()=>{
|
|
19
19
|
let jwtService;
|
|
20
20
|
let filesOnlyOfficeGuard;
|
|
21
21
|
let context;
|
|
@@ -28,8 +28,8 @@ describe(_filesonlyofficeguard.FilesOnlyOfficeGuard.name, ()=>{
|
|
|
28
28
|
})
|
|
29
29
|
],
|
|
30
30
|
providers: [
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
_onlyofficeguard.OnlyOfficeGuard,
|
|
32
|
+
_onlyofficestrategy.OnlyOfficeStrategy,
|
|
33
33
|
{
|
|
34
34
|
provide: _nestjspino.PinoLogger,
|
|
35
35
|
useValue: {
|
|
@@ -39,7 +39,7 @@ describe(_filesonlyofficeguard.FilesOnlyOfficeGuard.name, ()=>{
|
|
|
39
39
|
]
|
|
40
40
|
}).compile();
|
|
41
41
|
jwtService = module.get(_jwt.JwtService);
|
|
42
|
-
filesOnlyOfficeGuard = module.get(
|
|
42
|
+
filesOnlyOfficeGuard = module.get(_onlyofficeguard.OnlyOfficeGuard);
|
|
43
43
|
context = (0, _tsjest.createMock)();
|
|
44
44
|
accessToken = await jwtService.signAsync({
|
|
45
45
|
identity: {
|
|
@@ -56,31 +56,25 @@ describe(_filesonlyofficeguard.FilesOnlyOfficeGuard.name, ()=>{
|
|
|
56
56
|
expect(filesOnlyOfficeGuard).toBeDefined();
|
|
57
57
|
expect(accessToken).toBeDefined();
|
|
58
58
|
});
|
|
59
|
-
it('should not pass
|
|
60
|
-
_configenvironment.configuration.applications.files.onlyoffice.enabled = false;
|
|
59
|
+
it('should not pass without a valid token', async ()=>{
|
|
61
60
|
context.switchToHttp().getRequest.mockReturnValue({
|
|
62
|
-
url: `${
|
|
61
|
+
url: `${_onlyofficeroutes.API_ONLY_OFFICE_CALLBACK}`,
|
|
63
62
|
raw: {
|
|
64
63
|
user: ''
|
|
65
64
|
}
|
|
66
65
|
});
|
|
67
|
-
expect(()=>filesOnlyOfficeGuard.canActivate(context)).toThrow(/feature not enabled/i);
|
|
68
|
-
_configenvironment.configuration.applications.files.onlyoffice.enabled = true;
|
|
69
66
|
await expect(filesOnlyOfficeGuard.canActivate(context)).rejects.toThrow('Unauthorized');
|
|
70
67
|
});
|
|
71
|
-
it('should pass
|
|
72
|
-
_configenvironment.configuration.applications.files.onlyoffice.enabled = false;
|
|
68
|
+
it('should pass with a (un)valid token', async ()=>{
|
|
73
69
|
context.switchToHttp().getRequest.mockReturnValue({
|
|
74
|
-
url: `${
|
|
70
|
+
url: `${_onlyofficeroutes.API_ONLY_OFFICE_CALLBACK}?${_onlyofficeconstants.ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME}=${accessToken}`,
|
|
75
71
|
raw: {
|
|
76
72
|
user: ''
|
|
77
73
|
}
|
|
78
74
|
});
|
|
79
|
-
expect(()=>filesOnlyOfficeGuard.canActivate(context)).toThrow(/feature not enabled/i);
|
|
80
|
-
_configenvironment.configuration.applications.files.onlyoffice.enabled = true;
|
|
81
75
|
expect(await filesOnlyOfficeGuard.canActivate(context)).toBe(true);
|
|
82
76
|
context.switchToHttp().getRequest.mockReturnValue({
|
|
83
|
-
url: `${
|
|
77
|
+
url: `${_onlyofficeroutes.API_ONLY_OFFICE_CALLBACK}?${_onlyofficeconstants.ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME}=unvalidToken`,
|
|
84
78
|
raw: {
|
|
85
79
|
user: ''
|
|
86
80
|
}
|
|
@@ -89,4 +83,4 @@ describe(_filesonlyofficeguard.FilesOnlyOfficeGuard.name, ()=>{
|
|
|
89
83
|
});
|
|
90
84
|
});
|
|
91
85
|
|
|
92
|
-
//# sourceMappingURL=
|
|
86
|
+
//# sourceMappingURL=only-office.guard.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.guard.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { createMock, DeepMocked } from '@golevelup/ts-jest'\nimport { ExecutionContext } from '@nestjs/common'\nimport { JwtModule, JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { PinoLogger } from 'nestjs-pino'\nimport { JwtPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME } from './only-office.constants'\nimport { OnlyOfficeGuard } from './only-office.guard'\nimport { API_ONLY_OFFICE_CALLBACK } from './only-office.routes'\nimport { OnlyOfficeStrategy } from './only-office.strategy'\n\ndescribe(OnlyOfficeGuard.name, () => {\n let jwtService: JwtService\n let filesOnlyOfficeGuard: OnlyOfficeGuard\n let context: DeepMocked<ExecutionContext>\n let accessToken: string\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [JwtModule.register({ global: true })],\n providers: [\n OnlyOfficeGuard,\n OnlyOfficeStrategy,\n {\n provide: PinoLogger,\n useValue: {\n assign: () => undefined\n }\n }\n ]\n }).compile()\n\n jwtService = module.get<JwtService>(JwtService)\n filesOnlyOfficeGuard = module.get<OnlyOfficeGuard>(OnlyOfficeGuard)\n context = createMock<ExecutionContext>()\n accessToken = await jwtService.signAsync({ identity: { id: 1, login: 'foo' } } as JwtPayload, {\n secret: configuration.auth.token.access.secret,\n expiresIn: 30\n })\n })\n\n it('should be defined', () => {\n expect(jwtService).toBeDefined()\n expect(filesOnlyOfficeGuard).toBeDefined()\n expect(accessToken).toBeDefined()\n })\n\n it('should not pass without a valid token', async () => {\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_ONLY_OFFICE_CALLBACK}`,\n raw: { user: '' }\n })\n await expect(filesOnlyOfficeGuard.canActivate(context)).rejects.toThrow('Unauthorized')\n })\n\n it('should pass with a (un)valid token', async () => {\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_ONLY_OFFICE_CALLBACK}?${ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME}=${accessToken}`,\n raw: { user: '' }\n })\n expect(await filesOnlyOfficeGuard.canActivate(context)).toBe(true)\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_ONLY_OFFICE_CALLBACK}?${ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME}=unvalidToken`,\n raw: { user: '' }\n })\n await expect(filesOnlyOfficeGuard.canActivate(context)).rejects.toThrow('Unauthorized')\n })\n})\n"],"names":["describe","OnlyOfficeGuard","name","jwtService","filesOnlyOfficeGuard","context","accessToken","beforeAll","module","Test","createTestingModule","imports","JwtModule","register","global","providers","OnlyOfficeStrategy","provide","PinoLogger","useValue","assign","undefined","compile","get","JwtService","createMock","signAsync","identity","id","login","secret","configuration","auth","token","access","expiresIn","it","expect","toBeDefined","switchToHttp","getRequest","mockReturnValue","url","API_ONLY_OFFICE_CALLBACK","raw","user","canActivate","rejects","toThrow","ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME","toBe"],"mappings":"AAAA;;;;CAIC;;;;wBAEsC;qBAED;yBACF;4BACT;mCAEG;qCACqB;iCACnB;kCACS;oCACN;AAEnCA,SAASC,gCAAe,CAACC,IAAI,EAAE;IAC7B,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,SAAS;gBAACC,cAAS,CAACC,QAAQ,CAAC;oBAAEC,QAAQ;gBAAK;aAAG;YAC/CC,WAAW;gBACTd,gCAAe;gBACfe,sCAAkB;gBAClB;oBACEC,SAASC,sBAAU;oBACnBC,UAAU;wBACRC,QAAQ,IAAMC;oBAChB;gBACF;aACD;QACH,GAAGC,OAAO;QAEVnB,aAAaK,OAAOe,GAAG,CAAaC,eAAU;QAC9CpB,uBAAuBI,OAAOe,GAAG,CAAkBtB,gCAAe;QAClEI,UAAUoB,IAAAA,kBAAU;QACpBnB,cAAc,MAAMH,WAAWuB,SAAS,CAAC;YAAEC,UAAU;gBAAEC,IAAI;gBAAGC,OAAO;YAAM;QAAE,GAAiB;YAC5FC,QAAQC,gCAAa,CAACC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACJ,MAAM;YAC9CK,WAAW;QACb;IACF;IAEAC,GAAG,qBAAqB;QACtBC,OAAOlC,YAAYmC,WAAW;QAC9BD,OAAOjC,sBAAsBkC,WAAW;QACxCD,OAAO/B,aAAagC,WAAW;IACjC;IAEAF,GAAG,yCAAyC;QAC1C/B,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,0CAAwB,EAAE;YAClCC,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACA,MAAMR,OAAOjC,qBAAqB0C,WAAW,CAACzC,UAAU0C,OAAO,CAACC,OAAO,CAAC;IAC1E;IAEAZ,GAAG,sCAAsC;QACvC/B,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,0CAAwB,CAAC,CAAC,EAAEM,uDAAkC,CAAC,CAAC,EAAE3C,aAAa;YACvFsC,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACAR,OAAO,MAAMjC,qBAAqB0C,WAAW,CAACzC,UAAU6C,IAAI,CAAC;QAC7D7C,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,0CAAwB,CAAC,CAAC,EAAEM,uDAAkC,CAAC,aAAa,CAAC;YACrFL,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACA,MAAMR,OAAOjC,qBAAqB0C,WAAW,CAACzC,UAAU0C,OAAO,CAACC,OAAO,CAAC;IAC1E;AACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
+
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
+
* See the LICENSE file for licensing details
|
|
5
|
+
*/ "use strict";
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=only-office.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.interface.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { FILE_MODE } from '../../constants/operations'\n\nexport interface OnlyOfficeConvertForm {\n key: string\n url: string\n outputtype: string\n filetype: string\n async: boolean\n token?: string\n}\n\nexport interface OnlyOfficeConfig {\n documentType?: string\n token?: string\n type?: 'mobile' | 'desktop'\n height?: string\n width?: string\n document?: {\n fileType: string\n key: string\n referenceData?: {\n fileKey: string\n instanceId: string\n }\n title: string\n url: string\n info?: {\n owner?: string\n uploaded?: string\n favorite?: boolean\n folder?: string\n sharingSettings?: any[]\n }\n permissions?: {\n /**\n * @deprecated Deprecated since version 5.5, please add the onRequestRestore field instead.\n */\n changeHistory?: boolean\n chat?: boolean\n comment?: boolean\n commentGroups?: any\n copy?: boolean\n deleteCommentAuthorOnly?: boolean\n download?: boolean\n edit?: boolean\n editCommentAuthorOnly?: boolean\n fillForms?: boolean\n modifyContentControl?: boolean\n modifyFilter?: boolean\n print?: boolean\n protect?: boolean\n review?: boolean\n reviewGroups?: string[]\n userInfoGroups?: string[]\n }\n }\n editorConfig?: {\n actionLink?: any\n callbackUrl?: string\n coEditing?: {\n mode: string\n change: boolean\n }\n createUrl?: string\n lang?: string\n mode?: FILE_MODE\n recent?: any[]\n region?: string\n templates?: any[]\n user?: {\n group?: string\n id?: string\n image?: string\n name?: string\n }\n customization?: {\n anonymous?: {\n request?: boolean\n label?: string\n }\n autosave?: boolean\n forcesave?: boolean\n close?: {\n visible: boolean\n text: string\n }\n comments?: boolean\n compactHeader?: boolean\n compactToolbar?: boolean\n compatibleFeatures?: boolean\n customer?: {\n address?: string\n info?: string\n logo?: string\n logoDark?: string\n mail?: string\n name?: string\n phone?: string\n www?: string\n }\n features?: any\n feedback?: any\n goback?: any\n help?: boolean\n hideNotes?: boolean\n hideRightMenu?: boolean\n hideRulers?: boolean\n integrationMode?: string\n logo?: {\n image?: string\n imageDark?: string\n imageLight?: string\n imageEmbedded?: string\n url?: string\n visible?: boolean\n }\n macros?: boolean\n macrosMode?: string\n mentionShare?: boolean\n mobileForceView?: boolean\n plugins?: boolean\n review?: {\n hideReviewDisplay?: boolean\n hoverMode?: boolean\n reviewDisplay?: string\n showReviewChanges?: boolean\n trackChanges?: boolean\n }\n submitForm?: boolean\n toolbarHideFileName?: boolean\n toolbarNoTabs?: boolean\n uiTheme?: string\n unit?: string\n zoom?: number\n about?: boolean\n }\n embedded?: {\n embedUrl?: string\n fullscreenUrl?: string\n saveUrl?: string\n shareUrl?: string\n toolbarDocked?: string\n }\n plugins?: {\n autostart?: string[]\n options?: {\n all?: any\n pluginGuid: any\n }\n pluginsData?: string[]\n }\n }\n events?: {\n onAppReady?: (event: object) => void\n onCollaborativeChanges?: (event: object) => void\n onDocumentReady?: (event: object) => void\n onDocumentStateChange?: (event: { data: boolean }) => void\n onDownloadAs?: (event: object) => void\n onError?: (event: object) => void\n onInfo?: (event: object) => void\n onMetaChange?: (event: object) => void\n onMakeActionLink?: (event: object) => void\n onRequestRefreshFile?: (event: object) => void\n onPluginsReady?: (event: object) => void\n onReady?: (event: object) => void\n onRequestClose?: (event: object) => void\n onRequestCreateNew?: (event: object) => void\n onRequestEditRights?: (event: object) => void\n onRequestHistory?: (event: object) => void\n onRequestHistoryClose?: (event: object) => void\n onRequestHistoryData?: (event: object) => void\n onRequestInsertImage?: (event: object) => void\n onRequestOpen?: (event: object) => void\n onRequestReferenceData?: (event: object) => void\n onRequestReferenceSource?: (event: object) => void\n onRequestRename?: (event: object) => void\n onRequestRestore?: (event: object) => void\n onRequestSaveAs?: (event: object) => void\n onRequestSelectDocument?: (event: object) => void\n onRequestSelectSpreadsheet?: (event: object) => void\n onRequestSendNotify?: (event: object) => void\n onRequestSharingSettings?: (event: object) => void\n onRequestStartFilling?: (event: object) => void\n onRequestUsers?: (event: object) => void\n onSubmit?: (event: object) => void\n onWarning?: (event: object) => void\n }\n}\n\nexport interface OnlyOfficeCallBack {\n /* documentation : https://api.onlyoffice.com/docs/docs-api/usage-api/callback-handler/ */\n key: string // document key\n /*\n status:\n 1 - document is being edited\n 2 - document is ready for saving\n 3 - document saving error has occurred\n 4 - document is closed with no changes\n 6 - document is being edited, but the current document state is saved\n 7 - error has occurred while force saving the document\n */\n status: 1 | 2 | 3 | 4 | 6 | 7\n url?: string // link to download the modified version (for status: 2, 3, 6 or 7)\n notmodified?: boolean // only with status 2\n /*\n actions:\n 0 - the user disconnects from the document co-editing\n 1 - the new user connects to the document co-editing\n 2 - the user clicks the forcesave button.\n */\n actions?: { type: 0 | 1 | 2; userid: string }[]\n forcesavetype?: 0 | 1 | 2 | 3 // The type is present when the status value is equal to 6 or 7 only\n /*\n forcesavetype:\n 0 - to the command service\n 1 - each time the saving is done (e.g. the Save button is clicked), which is only available when the forcesave option is set to true\n 2 - by timer with the settings from the server config\n 3 - each time the form is submitted (e.g. the Complete & Submit button is clicked)\n */\n users?: string[] // when multiple users are editing the document\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
+
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
+
* See the LICENSE file for licensing details
|
|
5
|
+
*/ "use strict";
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
Object.defineProperty(exports, "OnlyOfficeModule", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function() {
|
|
12
|
+
return OnlyOfficeModule;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
const _common = require("@nestjs/common");
|
|
16
|
+
const _onlyofficemanagerservice = require("./only-office-manager.service");
|
|
17
|
+
const _onlyofficecontroller = require("./only-office.controller");
|
|
18
|
+
const _onlyofficeguard = require("./only-office.guard");
|
|
19
|
+
const _onlyofficestrategy = require("./only-office.strategy");
|
|
20
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
21
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
22
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
23
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
24
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
25
|
+
}
|
|
26
|
+
let OnlyOfficeModule = class OnlyOfficeModule {
|
|
27
|
+
};
|
|
28
|
+
OnlyOfficeModule = _ts_decorate([
|
|
29
|
+
(0, _common.Module)({
|
|
30
|
+
controllers: [
|
|
31
|
+
_onlyofficecontroller.OnlyOfficeController
|
|
32
|
+
],
|
|
33
|
+
providers: [
|
|
34
|
+
_onlyofficemanagerservice.OnlyOfficeManager,
|
|
35
|
+
_onlyofficeguard.OnlyOfficeGuard,
|
|
36
|
+
_onlyofficestrategy.OnlyOfficeStrategy
|
|
37
|
+
]
|
|
38
|
+
})
|
|
39
|
+
], OnlyOfficeModule);
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=only-office.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.module.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Module } from '@nestjs/common'\nimport { OnlyOfficeManager } from './only-office-manager.service'\nimport { OnlyOfficeController } from './only-office.controller'\nimport { OnlyOfficeGuard } from './only-office.guard'\nimport { OnlyOfficeStrategy } from './only-office.strategy'\n\n@Module({\n controllers: [OnlyOfficeController],\n providers: [OnlyOfficeManager, OnlyOfficeGuard, OnlyOfficeStrategy]\n})\nexport class OnlyOfficeModule {}\n"],"names":["OnlyOfficeModule","controllers","OnlyOfficeController","providers","OnlyOfficeManager","OnlyOfficeGuard","OnlyOfficeStrategy"],"mappings":"AAAA;;;;CAIC;;;;+BAYYA;;;eAAAA;;;wBAVU;0CACW;sCACG;iCACL;oCACG;;;;;;;AAM5B,IAAA,AAAMA,mBAAN,MAAMA;AAAkB;;;QAH7BC,aAAa;YAACC,0CAAoB;SAAC;QACnCC,WAAW;YAACC,2CAAiB;YAAEC,gCAAe;YAAEC,sCAAkB;SAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
+
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
+
* See the LICENSE file for licensing details
|
|
5
|
+
*/ "use strict";
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
function _export(target, all) {
|
|
10
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
_export(exports, {
|
|
16
|
+
get API_ONLY_OFFICE () {
|
|
17
|
+
return API_ONLY_OFFICE;
|
|
18
|
+
},
|
|
19
|
+
get API_ONLY_OFFICE_CALLBACK () {
|
|
20
|
+
return API_ONLY_OFFICE_CALLBACK;
|
|
21
|
+
},
|
|
22
|
+
get API_ONLY_OFFICE_DOCUMENT () {
|
|
23
|
+
return API_ONLY_OFFICE_DOCUMENT;
|
|
24
|
+
},
|
|
25
|
+
get API_ONLY_OFFICE_SETTINGS () {
|
|
26
|
+
return API_ONLY_OFFICE_SETTINGS;
|
|
27
|
+
},
|
|
28
|
+
get ONLY_OFFICE_ROUTE () {
|
|
29
|
+
return ONLY_OFFICE_ROUTE;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const _routes = require("../../../spaces/constants/routes");
|
|
33
|
+
const ONLY_OFFICE_ROUTE = {
|
|
34
|
+
BASE: _routes.SPACES_ROUTE.BASE,
|
|
35
|
+
ONLY_OFFICE: 'onlyoffice',
|
|
36
|
+
SETTINGS: 'settings',
|
|
37
|
+
DOCUMENT: 'document',
|
|
38
|
+
CALLBACK: 'callback'
|
|
39
|
+
};
|
|
40
|
+
const API_ONLY_OFFICE = `${ONLY_OFFICE_ROUTE.BASE}/${ONLY_OFFICE_ROUTE.ONLY_OFFICE}`;
|
|
41
|
+
const API_ONLY_OFFICE_SETTINGS = `${API_ONLY_OFFICE}/${ONLY_OFFICE_ROUTE.SETTINGS}`;
|
|
42
|
+
const API_ONLY_OFFICE_DOCUMENT = `${API_ONLY_OFFICE}/${ONLY_OFFICE_ROUTE.DOCUMENT}`;
|
|
43
|
+
const API_ONLY_OFFICE_CALLBACK = `${API_ONLY_OFFICE}/${ONLY_OFFICE_ROUTE.CALLBACK}`;
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=only-office.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.routes.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { SPACES_ROUTE } from '../../../spaces/constants/routes'\n\nexport const ONLY_OFFICE_ROUTE = {\n BASE: SPACES_ROUTE.BASE,\n ONLY_OFFICE: 'onlyoffice',\n SETTINGS: 'settings',\n DOCUMENT: 'document',\n CALLBACK: 'callback'\n} as const\n\nexport const API_ONLY_OFFICE = `${ONLY_OFFICE_ROUTE.BASE}/${ONLY_OFFICE_ROUTE.ONLY_OFFICE}`\nexport const API_ONLY_OFFICE_SETTINGS = `${API_ONLY_OFFICE}/${ONLY_OFFICE_ROUTE.SETTINGS}`\nexport const API_ONLY_OFFICE_DOCUMENT = `${API_ONLY_OFFICE}/${ONLY_OFFICE_ROUTE.DOCUMENT}`\nexport const API_ONLY_OFFICE_CALLBACK = `${API_ONLY_OFFICE}/${ONLY_OFFICE_ROUTE.CALLBACK}`\n"],"names":["API_ONLY_OFFICE","API_ONLY_OFFICE_CALLBACK","API_ONLY_OFFICE_DOCUMENT","API_ONLY_OFFICE_SETTINGS","ONLY_OFFICE_ROUTE","BASE","SPACES_ROUTE","ONLY_OFFICE","SETTINGS","DOCUMENT","CALLBACK"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAYYA;eAAAA;;QAGAC;eAAAA;;QADAC;eAAAA;;QADAC;eAAAA;;QATAC;eAAAA;;;wBAFgB;AAEtB,MAAMA,oBAAoB;IAC/BC,MAAMC,oBAAY,CAACD,IAAI;IACvBE,aAAa;IACbC,UAAU;IACVC,UAAU;IACVC,UAAU;AACZ;AAEO,MAAMV,kBAAkB,GAAGI,kBAAkBC,IAAI,CAAC,CAAC,EAAED,kBAAkBG,WAAW,EAAE;AACpF,MAAMJ,2BAA2B,GAAGH,gBAAgB,CAAC,EAAEI,kBAAkBI,QAAQ,EAAE;AACnF,MAAMN,2BAA2B,GAAGF,gBAAgB,CAAC,EAAEI,kBAAkBK,QAAQ,EAAE;AACnF,MAAMR,2BAA2B,GAAGD,gBAAgB,CAAC,EAAEI,kBAAkBM,QAAQ,EAAE"}
|
|
@@ -6,20 +6,20 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", {
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
|
-
Object.defineProperty(exports, "
|
|
9
|
+
Object.defineProperty(exports, "OnlyOfficeStrategy", {
|
|
10
10
|
enumerable: true,
|
|
11
11
|
get: function() {
|
|
12
|
-
return
|
|
12
|
+
return OnlyOfficeStrategy;
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
15
|
const _common = require("@nestjs/common");
|
|
16
16
|
const _passport = require("@nestjs/passport");
|
|
17
17
|
const _nestjspino = require("nestjs-pino");
|
|
18
18
|
const _passportjwt = require("passport-jwt");
|
|
19
|
-
const _authtokenaccessstrategy = require("
|
|
20
|
-
const _configenvironment = require("
|
|
21
|
-
const _usermodel = require("
|
|
22
|
-
const
|
|
19
|
+
const _authtokenaccessstrategy = require("../../../../authentication/guards/auth-token-access.strategy");
|
|
20
|
+
const _configenvironment = require("../../../../configuration/config.environment");
|
|
21
|
+
const _usermodel = require("../../../users/models/user.model");
|
|
22
|
+
const _onlyofficeconstants = require("./only-office.constants");
|
|
23
23
|
function _ts_decorate(decorators, target, key, desc) {
|
|
24
24
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
25
25
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -29,7 +29,7 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
29
29
|
function _ts_metadata(k, v) {
|
|
30
30
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
31
31
|
}
|
|
32
|
-
let
|
|
32
|
+
let OnlyOfficeStrategy = class OnlyOfficeStrategy extends (0, _passport.PassportStrategy)(_passportjwt.Strategy, 'filesOnlyOfficeToken') {
|
|
33
33
|
validate(jwtPayload) {
|
|
34
34
|
this.logger.assign({
|
|
35
35
|
user: jwtPayload.identity.login
|
|
@@ -40,7 +40,7 @@ let FilesOnlyOfficeStrategy = class FilesOnlyOfficeStrategy extends (0, _passpor
|
|
|
40
40
|
super({
|
|
41
41
|
jwtFromRequest: _passportjwt.ExtractJwt.fromExtractors([
|
|
42
42
|
_authtokenaccessstrategy.AuthTokenAccessStrategy.extractJWTFromCookie,
|
|
43
|
-
_passportjwt.ExtractJwt.fromUrlQueryParameter(
|
|
43
|
+
_passportjwt.ExtractJwt.fromUrlQueryParameter(_onlyofficeconstants.ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME)
|
|
44
44
|
]),
|
|
45
45
|
secretOrKey: _configenvironment.configuration.auth.token.access.secret,
|
|
46
46
|
ignoreExpiration: false,
|
|
@@ -48,12 +48,12 @@ let FilesOnlyOfficeStrategy = class FilesOnlyOfficeStrategy extends (0, _passpor
|
|
|
48
48
|
}), this.logger = logger;
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
|
-
|
|
51
|
+
OnlyOfficeStrategy = _ts_decorate([
|
|
52
52
|
(0, _common.Injectable)(),
|
|
53
53
|
_ts_metadata("design:type", Function),
|
|
54
54
|
_ts_metadata("design:paramtypes", [
|
|
55
55
|
typeof _nestjspino.PinoLogger === "undefined" ? Object : _nestjspino.PinoLogger
|
|
56
56
|
])
|
|
57
|
-
],
|
|
57
|
+
], OnlyOfficeStrategy);
|
|
58
58
|
|
|
59
|
-
//# sourceMappingURL=
|
|
59
|
+
//# sourceMappingURL=only-office.strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office.strategy.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Injectable } from '@nestjs/common'\nimport { AbstractStrategy, PassportStrategy } from '@nestjs/passport'\nimport { PinoLogger } from 'nestjs-pino'\nimport { ExtractJwt, Strategy } from 'passport-jwt'\nimport { AuthTokenAccessStrategy } from '../../../../authentication/guards/auth-token-access.strategy'\nimport { JwtPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { UserModel } from '../../../users/models/user.model'\nimport { ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME } from './only-office.constants'\n\n@Injectable()\nexport class OnlyOfficeStrategy extends PassportStrategy(Strategy, 'filesOnlyOfficeToken') implements AbstractStrategy {\n constructor(private readonly logger: PinoLogger) {\n super({\n jwtFromRequest: ExtractJwt.fromExtractors([\n AuthTokenAccessStrategy.extractJWTFromCookie,\n ExtractJwt.fromUrlQueryParameter(ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME)\n ]),\n secretOrKey: configuration.auth.token.access.secret,\n ignoreExpiration: false,\n passReqToCallback: false\n })\n }\n\n validate(jwtPayload: JwtPayload): UserModel {\n this.logger.assign({ user: jwtPayload.identity.login })\n return new UserModel(jwtPayload.identity)\n }\n}\n"],"names":["OnlyOfficeStrategy","PassportStrategy","Strategy","validate","jwtPayload","logger","assign","user","identity","login","UserModel","jwtFromRequest","ExtractJwt","fromExtractors","AuthTokenAccessStrategy","extractJWTFromCookie","fromUrlQueryParameter","ONLY_OFFICE_TOKEN_QUERY_PARAM_NAME","secretOrKey","configuration","auth","token","access","secret","ignoreExpiration","passReqToCallback"],"mappings":"AAAA;;;;CAIC;;;;+BAaYA;;;eAAAA;;;wBAXc;0BACwB;4BACxB;6BACU;yCACG;mCAEV;2BACJ;qCACyB;;;;;;;;;;AAG5C,IAAA,AAAMA,qBAAN,MAAMA,2BAA2BC,IAAAA,0BAAgB,EAACC,qBAAQ,EAAE;IAajEC,SAASC,UAAsB,EAAa;QAC1C,IAAI,CAACC,MAAM,CAACC,MAAM,CAAC;YAAEC,MAAMH,WAAWI,QAAQ,CAACC,KAAK;QAAC;QACrD,OAAO,IAAIC,oBAAS,CAACN,WAAWI,QAAQ;IAC1C;IAfA,YAAY,AAAiBH,MAAkB,CAAE;QAC/C,KAAK,CAAC;YACJM,gBAAgBC,uBAAU,CAACC,cAAc,CAAC;gBACxCC,gDAAuB,CAACC,oBAAoB;gBAC5CH,uBAAU,CAACI,qBAAqB,CAACC,uDAAkC;aACpE;YACDC,aAAaC,gCAAa,CAACC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACC,MAAM;YACnDC,kBAAkB;YAClBC,mBAAmB;QACrB,SAT2BpB,SAAAA;IAU7B;AAMF"}
|