@sync-in/server 1.9.6 → 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 +29 -4
- package/environment/environment.dist.yaml +15 -5
- package/package.json +13 -14
- 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 +3 -1
- package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
- package/server/applications/files/services/files-scheduler.service.js +2 -2
- 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/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-BVKDW5XO.js → chunk-27Z3SYRL.js} +1 -1
- package/static/{chunk-HLKZCMKV.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-C5T7RZSD.js → chunk-3RPUQ22U.js} +1 -1
- package/static/{chunk-EPDWJEPD.js → chunk-3WZ6F3LC.js} +1 -1
- package/static/chunk-3ZLBVUCX.js +2 -0
- package/static/{chunk-SF6Q6VRC.js → chunk-45AZ6ZML.js} +1 -1
- package/static/chunk-46TJLPJY.js +1 -0
- package/static/chunk-4NIYCYRS.js +2 -0
- package/static/{chunk-GLPKRULI.js → chunk-4TPFERL6.js} +1 -1
- package/static/{chunk-KAAFVHYE.js → chunk-5O66CLTD.js} +1 -1
- package/static/chunk-6OEOADR6.js +1 -0
- package/static/chunk-6WMXMIE4.js +1 -0
- package/static/{chunk-QKMN3S4M.js → chunk-7VRYTDX4.js} +1 -1
- package/static/{chunk-Z2KBIZ5D.js → chunk-ARS47O5X.js} +1 -1
- package/static/chunk-B6HQYQYG.js +1 -0
- package/static/chunk-BCN4T5DO.js +2 -0
- package/static/{chunk-7HL5Z6PF.js → chunk-CCZWPM7Q.js} +1 -1
- package/static/{chunk-DU4Q4RWJ.js → chunk-CMNMPG6Z.js} +1 -1
- package/static/{chunk-BX3QZ7IL.js → chunk-CSVPAZHK.js} +1 -1
- package/static/{chunk-BJARRIS6.js → chunk-D55YR5X7.js} +4 -4
- package/static/{chunk-NHMYAVJK.js → chunk-D5FQ72R4.js} +1 -1
- package/static/{chunk-7QYALK5T.js → chunk-DGCVA6BM.js} +1 -1
- package/static/{chunk-IBC7CFBQ.js → chunk-DVCN3P7Q.js} +1 -1
- package/static/chunk-E32J777S.js +5 -0
- package/static/{chunk-FEQUP26G.js → chunk-FIUF2JM4.js} +1 -1
- package/static/{chunk-ODAQRAPO.js → chunk-G3PL6YX3.js} +1 -1
- package/static/chunk-G7RZN7HN.js +1 -0
- package/static/{chunk-IIKL33TV.js → chunk-GQHXYX6Z.js} +1 -1
- package/static/{chunk-5HYSNQR4.js → chunk-GWRAGN3M.js} +1 -1
- package/static/{chunk-ANH4VNOS.js → chunk-GXWGB7WO.js} +1 -1
- package/static/{chunk-25PWAXTJ.js → chunk-HGODIZTV.js} +1 -1
- package/static/{chunk-X5UDV4ZB.js → chunk-HZAB6F4Q.js} +1 -1
- package/static/chunk-I3FR3A45.js +1 -0
- package/static/{chunk-JYHTSSKW.js → chunk-I5SPA4G2.js} +1 -1
- package/static/{chunk-DQAQUSVW.js → chunk-IMFO2MI7.js} +1 -1
- package/static/{chunk-AYYJZMBE.js → chunk-JNTNMIUH.js} +1 -1
- package/static/chunk-JRXG43AA.js +2 -0
- package/static/{chunk-3AR5VNJE.js → chunk-KAUCN24H.js} +1 -1
- package/static/{chunk-3WS72A6C.js → chunk-KDUAB76O.js} +1 -1
- package/static/chunk-KPOQLDWF.js +1 -0
- package/static/{chunk-UO7ATVQG.js → chunk-KWFELZTM.js} +1 -1
- package/static/{chunk-2CAAJBRO.js → chunk-L3BIP4AA.js} +1 -1
- package/static/{chunk-DK2LAJEL.js → chunk-LGIVVJDD.js} +1 -1
- package/static/{chunk-5ATJIR5S.js → chunk-LNLBIJZD.js} +1 -1
- package/static/chunk-LTJNLOX2.js +1 -0
- package/static/{chunk-GRV44RYI.js → chunk-LZUHREOF.js} +1 -1
- package/static/{chunk-XIQXRSZ2.js → chunk-NIR4YE2E.js} +1 -1
- package/static/{chunk-TOCCCZP2.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-B4TDS6AQ.js → chunk-PDG7DOEF.js} +1 -1
- package/static/chunk-POUWUMC4.js +1 -0
- package/static/{chunk-NQCKX2AD.js → chunk-PPJCVBJH.js} +1 -1
- package/static/{chunk-ZCOEP4O2.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-D6QWQHWE.js → chunk-R4VMWCM5.js} +1 -1
- package/static/{chunk-O233BXWK.js → chunk-R7PLNX75.js} +1 -1
- package/static/chunk-RJULB733.js +1 -0
- package/static/{chunk-E5C4QRNQ.js → chunk-RNVPQQKT.js} +5 -5
- package/static/chunk-RTNEBRKJ.js +1 -0
- package/static/{chunk-GYYJ4FWN.js → chunk-S3TTWPQA.js} +1 -1
- package/static/{chunk-4GBA6EJ4.js → chunk-SDJNZULP.js} +1 -1
- package/static/chunk-SNOOCDJD.js +1 -0
- package/static/chunk-T42BV6TR.js +1 -0
- package/static/{chunk-5KVI243T.js → chunk-TNCKNU6I.js} +1 -1
- package/static/{chunk-OVUMPMVM.js → chunk-ULSPQ3HP.js} +1 -1
- package/static/{chunk-5NFH4E2B.js → chunk-UOK3LKSX.js} +1 -1
- package/static/{chunk-CHMDM2ZW.js → chunk-VD5JHSDS.js} +1 -1
- package/static/{chunk-2F42MZQ5.js → chunk-XBKCQCBI.js} +1 -1
- package/static/{chunk-2U5VKTML.js → chunk-XEWLBWFF.js} +1 -1
- package/static/{chunk-FSGT46LM.js → chunk-XTVNHFKX.js} +1 -1
- package/static/chunk-ZCSHU3D7.js +1 -0
- package/static/{chunk-QUUQOBTF.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-42L6C5MT.js +0 -1
- package/static/chunk-4ZKAVMB4.js +0 -1
- package/static/chunk-5GIWZKNS.js +0 -1
- package/static/chunk-5WCQBTXW.js +0 -1
- package/static/chunk-B2A4HNDC.js +0 -1
- package/static/chunk-BSB4VROD.js +0 -2
- package/static/chunk-CUC7R6C2.js +0 -1
- package/static/chunk-DHFQIFOF.js +0 -1
- package/static/chunk-DRHPEERW.js +0 -2
- package/static/chunk-FCGTI42I.js +0 -1
- package/static/chunk-FCR5AEHR.js +0 -3
- package/static/chunk-HB5DC7RJ.js +0 -1
- package/static/chunk-ITVA26X2.js +0 -2
- package/static/chunk-KWKZN53T.js +0 -1
- package/static/chunk-LBXOAKBD.js +0 -1
- package/static/chunk-LZKI5P5T.js +0 -1
- package/static/chunk-MGMDT4VN.js +0 -1
- package/static/chunk-MWUUM2NK.js +0 -13
- package/static/chunk-MYM43ENO.js +0 -1
- package/static/chunk-NAH4V2R6.js +0 -2
- package/static/chunk-PCFH5HCI.js +0 -2
- package/static/chunk-Q6B4OVER.js +0 -5
- package/static/chunk-QV5LQKTS.js +0 -1
- package/static/chunk-S4UTSOPV.js +0 -1
- package/static/chunk-SRBOO7AO.js +0 -1
- package/static/chunk-VZPCXSRG.js +0 -2
- package/static/chunk-XKEBQNQJ.js +0 -1
- package/static/chunk-YYTDPI5S.js +0 -1
- package/static/main-ODUA232E.js +0 -11
- /package/static/assets/pdfjs/web/images/{toolbarButton-sidebarToggle.svg → toolbarButton-viewsManagerToggle.svg} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-methods.service.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 { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { currentTimeStamp, encodeUrl } from '../../../common/shared'\nimport { FileLock } from '../../files/interfaces/file-lock.interface'\nimport { FileError } from '../../files/models/file-error'\nimport { LockConflict } from '../../files/models/file-lock-error'\nimport { FilesLockManager } from '../../files/services/files-lock-manager.service'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { dirName, genEtag, isPathExists } from '../../files/utils/files'\nimport { SPACE_OPERATION, SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { dbFileFromSpace } from '../../spaces/utils/paths'\nimport { haveSpaceEnvPermissions } from '../../spaces/utils/permissions'\nimport {\n DEPTH,\n LOCK_DISCOVERY_PROP,\n NS_PREFIX,\n PRECONDITION,\n PROPPATCH_METHOD,\n PROPPATCH_MODIFIED_PROPS,\n PROPPATCH_PROP_UPDATE,\n PROPPATCH_SUPPORTED_PROPS,\n PROPSTAT,\n STANDARD_PROPS,\n XML_CONTENT_TYPE\n} from '../constants/webdav'\nimport { IfHeaderDecorator } from '../decorators/if-header.decorator'\nimport { FastifyDAVRequest, WebDAVLock } from '../interfaces/webdav.interface'\nimport { extractAllTokens, extractOneToken } from '../utils/if-header'\nimport { DAV_ERROR_RES, LOCK_DISCOVERY, LOCK_PROP, MULTI_STATUS, PROP, PROP_STAT } from '../utils/webdav'\nimport { xmlBuild } from '../utils/xml'\nimport { WebDAVSpaces } from './webdav-spaces.service'\n\n@Injectable()\nexport class WebDAVMethods {\n private readonly logger = new Logger(WebDAVMethods.name)\n\n constructor(\n private readonly webDAVHandler: WebDAVSpaces,\n private readonly filesManager: FilesManager,\n private readonly filesLockManager: FilesLockManager\n ) {}\n\n async headOrGet(req: FastifyDAVRequest, res: FastifyReply, repository: string): Promise<StreamableFile> {\n if (repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n const sendFile = this.filesManager.sendFileFromSpace(req.space)\n try {\n await sendFile.checks()\n return await sendFile.stream(req, res)\n } catch (e) {\n return this.handleError(req, res, e)\n }\n }\n this.logger.warn(`Not allowed on this resource : ${repository}`)\n return res.status(HttpStatus.FORBIDDEN).send('Not allowed on this resource')\n }\n\n @IfHeaderDecorator()\n async lock(req: FastifyDAVRequest, res: FastifyReply) {\n const isLockRefresh = !req.dav.body\n const rExists = await isPathExists(req.space.realPath)\n\n if (isLockRefresh) {\n // if the body has no content, the request must refresh the lock\n if (!rExists) {\n this.logger.warn('Lock refresh must specify an existing resource')\n return res.status(HttpStatus.BAD_REQUEST).send('Lock refresh must specify an existing resource')\n }\n return this.lockRefresh(req, res, req.space.dbFile.path)\n }\n if (!rExists) {\n if (!haveSpaceEnvPermissions(req.space, SPACE_OPERATION.ADD)) {\n this.logger.warn(`is not allowed to create on this space : *${req.space.alias}* (${req.space.id}) : ${req.space.url}`)\n return res.status(HttpStatus.FORBIDDEN).send('You are not allowed to do this action')\n }\n if (!(await isPathExists(dirName(req.space.realPath)))) {\n return res.status(HttpStatus.CONFLICT).send('Parent must exists')\n }\n }\n\n const davLock: WebDAVLock = {\n lockroot: req.dav.url,\n locktoken: null, // created later\n lockscope: req.dav.lock.lockscope,\n owner: req.dav.lock.owner\n }\n\n const [ok, fileLock] = await this.filesLockManager.create(req.user, req.space.dbFile, req.dav.depth, davLock, req.dav.lock.timeout)\n if (ok) {\n // Locking unmapped URLs: must create an empty resource (that is not a collection)\n if (!rExists) {\n // checkLocks set to false because the conflicts are already checked in `filesLockManager.create` method\n await this.filesManager.mkFile(req.user, req.space, false, false, false)\n }\n const lockProp = LOCK_PROP([fileLock])\n return res\n .header('lock-token', `<${davLock.locktoken}>`)\n .type(XML_CONTENT_TYPE)\n .status(rExists ? HttpStatus.OK : HttpStatus.CREATED)\n .send(xmlBuild(lockProp))\n } else {\n return DAV_ERROR_RES(HttpStatus.LOCKED, PRECONDITION.LOCK_CONFLICT, res, fileLock.davLock?.lockroot || fileLock.dbFilePath)\n }\n }\n\n @IfHeaderDecorator()\n async unlock(req: FastifyDAVRequest, res: FastifyReply) {\n if (!(await isPathExists(req.space.realPath))) {\n this.logger.warn(`Unable to unlock: ${req.dav.url} - resource does not exist`)\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n\n const lock = await this.filesLockManager.isLockedWithToken(req.dav.lock.token, req.space.dbFile.path)\n if (!lock) {\n this.logger.warn(`Lock token does not exist or not match URL : ${req.dav.lock.token}`)\n return DAV_ERROR_RES(HttpStatus.CONFLICT, PRECONDITION.LOCK_TOKEN_MISMATCH, res)\n }\n if (req.user.id !== lock.owner.id) {\n return res.status(HttpStatus.FORBIDDEN).send('Token was created by another user')\n }\n\n await this.filesLockManager.removeLock(lock.key)\n return res.status(HttpStatus.NO_CONTENT).send()\n }\n\n @IfHeaderDecorator()\n async propfind(req: FastifyDAVRequest, res: FastifyReply, repository: string): Promise<string> {\n if (repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if (!(await isPathExists(req.space.realPath))) {\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n }\n\n const responses: any[] = []\n let requestedProps: string[]\n let locks: Record<string, FileLock> = {}\n\n if (req.dav.propfindMode === PROPSTAT.PROP) {\n // ignores all unknown properties (non-RFC compliant but avoids generating too much content, faster)\n requestedProps = Object.keys(req.dav.body.propfind.prop).filter((prop: string) => STANDARD_PROPS.indexOf(prop) > -1)\n } else {\n requestedProps = STANDARD_PROPS\n }\n\n // Searches all child locks (only for real files) & ignores /webdav/shares endpoint (special case)\n if (req.dav.propfindMode !== PROPSTAT.PROPNAME && repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if (req.dav.depth === DEPTH.RESOURCE) {\n // match depth '0'\n locks = await this.filesLockManager.browseLocks(req.space.dbFile)\n } else {\n // match depth '1' or 'infinity'\n locks = await this.filesLockManager.browseParentChildLocks(req.space.dbFile)\n }\n }\n\n for await (const f of this.webDAVHandler.propfind(req, repository)) {\n let prop: any\n if (req.dav.propfindMode === PROPSTAT.PROPNAME) {\n prop = { ...Object.fromEntries(requestedProps.map((x) => [`${NS_PREFIX}:${x}`, ''])) }\n } else {\n prop = {}\n for (const p of requestedProps) {\n let fP: any\n if (p === LOCK_DISCOVERY_PROP) {\n fP = repository === SPACE_REPOSITORY.FILES && f.name in locks ? LOCK_DISCOVERY([locks[f.name]]) : null\n } else {\n fP = f[p]\n }\n if (fP !== undefined) prop[`${NS_PREFIX}:${p}`] = fP\n }\n }\n responses.push(PROP_STAT(f.href, PROP(prop, req.dav.httpVersion, HttpStatus.OK)))\n }\n const propfind = xmlBuild(MULTI_STATUS(responses))\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.MULTI_STATUS).send(propfind)\n }\n\n @IfHeaderDecorator()\n async put(req: FastifyDAVRequest, res: FastifyReply): Promise<FastifyReply> {\n let rExists: boolean\n try {\n rExists = await this.filesManager.saveStream(req.user, req.space, req, {\n dav: {\n depth: req.dav.depth,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n }\n })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res\n .header('etag', genEtag(null, req.space.realPath))\n .status(rExists ? HttpStatus.NO_CONTENT : HttpStatus.CREATED)\n .send()\n }\n\n @IfHeaderDecorator()\n async delete(req: FastifyDAVRequest, res: FastifyReply) {\n try {\n await this.filesManager.delete(req.user, req.space, { lockTokens: extractAllTokens(req.dav.ifHeaders) })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res.status(HttpStatus.NO_CONTENT).send()\n }\n\n @IfHeaderDecorator()\n async proppatch(req: FastifyDAVRequest, res: FastifyReply) {\n /* only support 'time modifications' */\n if (!(await isPathExists(req.space.realPath))) {\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n\n // check locks\n try {\n await this.filesLockManager.checkConflicts(req.space.dbFile, req.dav.depth, {\n userId: req.user.id,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n\n // evaluate props and return multistatus if errors\n req.dav.proppatch = { props: {}, errors: [] }\n for (const action of Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE])) {\n if (Object.values(PROPPATCH_METHOD).indexOf(action) === -1) {\n const msg = `Unknown tag : expected ${PROPPATCH_METHOD.SET} or ${PROPPATCH_METHOD.REMOVE}`\n this.logger.debug(msg)\n return res.status(HttpStatus.BAD_REQUEST).send(msg)\n }\n\n if (Array.isArray(req.dav.body[PROPPATCH_PROP_UPDATE][action])) {\n if (Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE][action][0])[0] === PROPSTAT.PROP) {\n req.dav.body[PROPPATCH_PROP_UPDATE][action] = {\n [PROPSTAT.PROP]: req.dav.body[PROPPATCH_PROP_UPDATE][action].map((e: any) => e[PROPSTAT.PROP])\n }\n }\n }\n\n if (Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE][action])[0] !== PROPSTAT.PROP) {\n const msg = `Unknown tag : expected ${PROPSTAT.PROP}`\n this.logger.debug(msg)\n return res.status(HttpStatus.BAD_REQUEST).send(msg)\n }\n\n if (!Array.isArray(req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP])) {\n req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP] = [req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP]]\n }\n\n for (const prop of req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP] as Record<string, string>[]) {\n for (let [name, value] of Object.entries(prop)) {\n if (action === PROPPATCH_METHOD.REMOVE) {\n value = null\n this.logger.debug(`Proppatch remove method not handled : ${name} -> ${value}`)\n }\n if (PROPPATCH_SUPPORTED_PROPS.indexOf(name) === -1) {\n req.dav.proppatch.errors.push(\n PROP(\n { [`${NS_PREFIX}:${name}`]: null },\n req.dav.httpVersion,\n HttpStatus.FORBIDDEN,\n STANDARD_PROPS.indexOf(name) > -1 ? PRECONDITION.PROTECTED_PROPERTY : undefined\n )\n )\n continue\n }\n req.dav.proppatch.props[name] = value\n }\n }\n }\n\n if (req.dav.proppatch.errors.length) {\n // convert all passed props to failed dependency\n for (const name of Object.keys(req.dav.proppatch.props)) {\n req.dav.proppatch.errors.push(PROP({ [`${NS_PREFIX}:${name}`]: null }, req.dav.httpVersion, HttpStatus.FAILED_DEPENDENCY))\n }\n const proppatch = xmlBuild(MULTI_STATUS(PROP_STAT(encodeUrl(req.dav.url), req.dav.proppatch.errors)))\n return res.status(HttpStatus.MULTI_STATUS).type(XML_CONTENT_TYPE).send(proppatch)\n }\n\n // apply modifications\n let atLeastOneError = false\n const states: Record<string, boolean> = {}\n for (const [name, value] of Object.entries(req.dav.proppatch.props)) {\n if (PROPPATCH_MODIFIED_PROPS.indexOf(name) > -1) {\n try {\n await this.filesManager.touch(req.user, req.space, currentTimeStamp(new Date(value)), false)\n } catch (e) {\n this.logger.error(`${this.proppatch.name} - unable to modify mtime on ${req.dav.url} : ${e}`)\n states[name] = false\n atLeastOneError = true\n }\n }\n // hook: we let the known Win32* properties pass to return a consistent result\n states[name] = true\n }\n\n const props = []\n for (const [name, state] of Object.entries(states)) {\n props.push(\n PROP(\n { [`${NS_PREFIX}:${name}`]: null },\n req.dav.httpVersion,\n state ? (atLeastOneError ? HttpStatus.FAILED_DEPENDENCY : HttpStatus.OK) : HttpStatus.BAD_REQUEST\n )\n )\n }\n const proppatch = xmlBuild(MULTI_STATUS(PROP_STAT(encodeUrl(req.dav.url), props)))\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.MULTI_STATUS).send(proppatch)\n }\n\n @IfHeaderDecorator()\n async mkcol(req: FastifyDAVRequest, res: FastifyReply) {\n try {\n await this.filesManager.mkDir(req.user, req.space, false, { depth: req.dav.depth, lockTokens: extractAllTokens(req.dav.ifHeaders) })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res.status(HttpStatus.CREATED).send()\n }\n\n @IfHeaderDecorator()\n async copyMove(req: FastifyDAVRequest, res: FastifyReply) {\n const dstSpace: SpaceEnv = await this.webDAVHandler.spaceEnv(req.user, req.dav.copyMove.destination)\n if (!dstSpace) {\n this.logger.warn(`Space not found for destination : ${req.dav.copyMove.destination}`)\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.copyMove.destination)\n }\n const dstExisted = await isPathExists(dstSpace.realPath)\n // We must evaluate the if-headers on the destination\n const fakeDstReq = {\n dav: { ...req.dav, url: req.dav.copyMove.destination },\n user: req.user,\n space: dstSpace\n } as FastifyDAVRequest\n if (!(await this.evaluateIfHeaders(fakeDstReq, res))) {\n // if there is an error the response is generated inside the `evaluateIfHeaders` function\n return\n }\n try {\n await this.filesManager.copyMove(req.user, req.space, dstSpace, req.dav.copyMove.isMove, req.dav.copyMove.overwrite, false, {\n depth: req.dav.depth,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n })\n } catch (e) {\n return this.handleError(req, res, e, dstSpace.url)\n }\n return res.status(dstExisted ? HttpStatus.NO_CONTENT : HttpStatus.CREATED).send()\n }\n\n protected async evaluateIfHeaders(req: FastifyDAVRequest, res: FastifyReply): Promise<boolean> {\n if (!req.dav.ifHeaders) return true\n const errors: string[] = []\n let lastPath = null\n let lastSpaceEnv: SpaceEnv\n let lastRPath = undefined\n let lastEtag = undefined // for now, we only generate one etag type (weak)\n let atLeastOneOk = false\n\n for (const condition of req.dav.ifHeaders) {\n if (condition.path) {\n if (condition.path !== lastPath) {\n lastPath = condition.path\n lastSpaceEnv = await this.webDAVHandler.spaceEnv(req.user, lastPath)\n }\n // the path will be the same across conditions\n if (!lastSpaceEnv) {\n this.logger.warn(`If Header : path mismatch (${condition.path})`)\n return false\n }\n } else {\n lastPath = req.dav.url\n lastSpaceEnv = req.space\n }\n\n if (condition.haveLock) {\n try {\n const dbFile = dbFileFromSpace(req.user.id, lastSpaceEnv)\n const match = !!(await this.filesLockManager.getLocksByPath(dbFile)).length\n if (condition.haveLock.mustMatch !== match) {\n errors.push(`have lock condition mismatch (${condition.haveLock.mustMatch} != ${match})`)\n continue\n }\n } catch (e) {\n errors.push(`have lock condition mismatch : ${e.message}`)\n continue\n }\n }\n\n if (condition.token) {\n const token = await this.filesLockManager.getLockByToken(condition.token.value)\n const match = token && lastPath.startsWith(token.davLock?.lockroot)\n if (condition.token.mustMatch !== match) {\n if (!token) {\n errors.push(`lock token not found`)\n } else {\n errors.push(`lock token url mismatch (${lastPath} is not a child of ${token.davLock?.lockroot})`)\n }\n continue\n }\n }\n\n if (condition.etag) {\n if (lastEtag === undefined) {\n if (lastRPath === undefined) {\n lastRPath = (await isPathExists(req.space.realPath)) ? req.space.realPath : null\n }\n lastEtag = lastRPath ? genEtag(null, lastRPath) : null\n }\n const match = lastEtag === condition.etag.value\n if (condition.etag.mustMatch !== match) {\n errors.push(`etag mismatch (${condition.etag.value} != ${lastEtag})`)\n continue\n }\n }\n\n atLeastOneOk = true\n break\n }\n\n if (!atLeastOneOk) {\n this.logger.warn(`If header condition failed : ${errors.join(', ')}`)\n res.status(HttpStatus.PRECONDITION_FAILED).send('If header condition failed')\n }\n return atLeastOneOk\n }\n\n private async lockRefresh(req: FastifyDAVRequest, res: FastifyReply, dbFilePath: string) {\n if (req.dav?.ifHeaders?.length !== 1) {\n this.logger.warn('Expected a lock token (only one lock may be refreshed at a time)')\n return res.status(HttpStatus.BAD_REQUEST).send('Expected a lock token (only one lock may be refreshed at a time)')\n }\n\n let token: string\n try {\n token = extractOneToken(req.dav.ifHeaders)\n } catch (e) {\n this.logger.warn(`${this.lockRefresh.name} - unable to extract token : ${JSON.stringify(req.dav.ifHeaders)} (${e})`)\n return res.status(HttpStatus.BAD_REQUEST).send('Unable to extract token')\n }\n\n const lock = await this.filesLockManager.isLockedWithToken(token, dbFilePath)\n if (!lock) {\n this.logger.warn(`Lock token does not exist or not match URL : ${token}`)\n return DAV_ERROR_RES(HttpStatus.PRECONDITION_FAILED, PRECONDITION.LOCK_TOKEN_MISMATCH, res)\n }\n if (lock.owner.id !== req.user.id) {\n this.logger.warn(`Lock token does not match owner : ${lock.owner.login} != ${req.user.login}`)\n return res.status(HttpStatus.FORBIDDEN).send('Lock token does not match owner')\n }\n\n await this.filesLockManager.refreshLockTimeout(lock, req.dav.lock.timeout)\n const lockProp = LOCK_PROP([lock])\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.OK).send(xmlBuild(lockProp))\n }\n\n private handleError(req: FastifyDAVRequest, res: FastifyReply, e: any, toUrl?: string) {\n this.logger.error(`Unable to ${req.method} ${req.dav.url}${toUrl ? ` -> ${toUrl}` : ''} : ${e.message}`)\n // Remove the last part to avoid exposing the path\n const errorMsg = e.message.split(',')[0]\n if (e instanceof LockConflict) {\n return DAV_ERROR_RES(HttpStatus.LOCKED, PRECONDITION.LOCK_CONFLICT, res, e.lock.davLock?.lockroot || e.lock.dbFilePath)\n } else if (e instanceof FileError) {\n return res.status(e.httpCode).send(errorMsg)\n }\n throw new HttpException(errorMsg, HttpStatus.INTERNAL_SERVER_ERROR)\n }\n}\n"],"names":["WebDAVMethods","headOrGet","req","res","repository","SPACE_REPOSITORY","FILES","space","inSharesList","sendFile","filesManager","sendFileFromSpace","checks","stream","e","handleError","logger","warn","status","HttpStatus","FORBIDDEN","send","lock","isLockRefresh","dav","body","rExists","isPathExists","realPath","BAD_REQUEST","lockRefresh","dbFile","path","haveSpaceEnvPermissions","SPACE_OPERATION","ADD","alias","id","url","dirName","CONFLICT","davLock","lockroot","locktoken","lockscope","owner","ok","fileLock","filesLockManager","create","user","depth","timeout","mkFile","lockProp","LOCK_PROP","header","type","XML_CONTENT_TYPE","OK","CREATED","xmlBuild","DAV_ERROR_RES","LOCKED","PRECONDITION","LOCK_CONFLICT","dbFilePath","unlock","NOT_FOUND","isLockedWithToken","token","LOCK_TOKEN_MISMATCH","removeLock","key","NO_CONTENT","propfind","responses","requestedProps","locks","propfindMode","PROPSTAT","PROP","Object","keys","prop","filter","STANDARD_PROPS","indexOf","PROPNAME","DEPTH","RESOURCE","browseLocks","browseParentChildLocks","f","webDAVHandler","fromEntries","map","x","NS_PREFIX","p","fP","LOCK_DISCOVERY_PROP","name","LOCK_DISCOVERY","undefined","push","PROP_STAT","href","httpVersion","MULTI_STATUS","put","saveStream","lockTokens","extractAllTokens","ifHeaders","genEtag","delete","proppatch","checkConflicts","userId","props","errors","action","PROPPATCH_PROP_UPDATE","values","PROPPATCH_METHOD","msg","SET","REMOVE","debug","Array","isArray","value","entries","PROPPATCH_SUPPORTED_PROPS","PROTECTED_PROPERTY","length","FAILED_DEPENDENCY","encodeUrl","atLeastOneError","states","PROPPATCH_MODIFIED_PROPS","touch","currentTimeStamp","Date","error","state","mkcol","mkDir","copyMove","dstSpace","spaceEnv","destination","dstExisted","fakeDstReq","evaluateIfHeaders","isMove","overwrite","lastPath","lastSpaceEnv","lastRPath","lastEtag","atLeastOneOk","condition","haveLock","dbFileFromSpace","match","getLocksByPath","mustMatch","message","getLockByToken","startsWith","etag","join","PRECONDITION_FAILED","extractOneToken","JSON","stringify","login","refreshLockTimeout","toUrl","method","errorMsg","split","LockConflict","FileError","httpCode","HttpException","INTERNAL_SERVER_ERROR","Logger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-methods.service.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 { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { currentTimeStamp, encodeUrl } from '../../../common/shared'\nimport { FileLock, FileLockOptions } from '../../files/interfaces/file-lock.interface'\nimport { FileError } from '../../files/models/file-error'\nimport { LockConflict } from '../../files/models/file-lock-error'\nimport { FilesLockManager } from '../../files/services/files-lock-manager.service'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { dirName, fileName, genEtag, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_OPERATION, SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { dbFileFromSpace } from '../../spaces/utils/paths'\nimport { haveSpaceEnvPermissions } from '../../spaces/utils/permissions'\nimport {\n DEPTH,\n HEADER,\n LOCK_DISCOVERY_PROP,\n NS_PREFIX,\n OPTIONS_HEADERS,\n PRECONDITION,\n PROPPATCH_METHOD,\n PROPPATCH_MODIFIED_PROPS,\n PROPPATCH_PROP_UPDATE,\n PROPPATCH_SUPPORTED_PROPS,\n PROPSTAT,\n STANDARD_PROPS,\n WEBDAV_APP_LOCK,\n XML_CONTENT_TYPE\n} from '../constants/webdav'\nimport { IfHeaderDecorator } from '../decorators/if-header.decorator'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { extractAllTokens, extractOneToken } from '../utils/if-header'\nimport { DAV_ERROR_RES, LOCK_DISCOVERY, LOCK_PROP, MULTI_STATUS, PROP, PROP_STAT } from '../utils/webdav'\nimport { xmlBuild } from '../utils/xml'\nimport { WebDAVSpaces } from './webdav-spaces.service'\n\n@Injectable()\nexport class WebDAVMethods {\n private readonly logger = new Logger(WebDAVMethods.name)\n\n constructor(\n private readonly webDAVHandler: WebDAVSpaces,\n private readonly filesManager: FilesManager,\n private readonly filesLockManager: FilesLockManager\n ) {}\n\n async headOrGet(req: FastifyDAVRequest, res: FastifyReply, repository: string): Promise<StreamableFile> {\n if (repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if ((await isPathExists(req.space.realPath)) && (await isPathIsDir(req.space.realPath))) {\n // Directory case\n return res\n .header('DAV', OPTIONS_HEADERS.DAV)\n .header('Content-Type', 'httpd/unix-directory')\n .header('Content-Length', '0')\n .status(HttpStatus.OK)\n .send()\n }\n const sendFile = this.filesManager.sendFileFromSpace(req.space)\n try {\n await sendFile.checks()\n return await sendFile.stream(req, res)\n } catch (e) {\n return this.handleError(req, res, e)\n }\n }\n this.logger.warn(`Not allowed on this resource : ${repository}`)\n return res.status(HttpStatus.FORBIDDEN).send('Not allowed on this resource')\n }\n\n @IfHeaderDecorator()\n async lock(req: FastifyDAVRequest, res: FastifyReply) {\n const isLockRefresh = !req.dav.body\n const rExists = await isPathExists(req.space.realPath)\n\n if (isLockRefresh) {\n // if the body has no content, the request must refresh the lock\n if (!rExists) {\n this.logger.warn('Lock refresh must specify an existing resource')\n return res.status(HttpStatus.BAD_REQUEST).send('Lock refresh must specify an existing resource')\n }\n return this.lockRefresh(req, res, req.space.dbFile.path)\n }\n if (!rExists) {\n if (!haveSpaceEnvPermissions(req.space, SPACE_OPERATION.ADD)) {\n this.logger.warn(`is not allowed to create on this space : *${req.space.alias}* (${req.space.id}) : ${req.space.url}`)\n return res.status(HttpStatus.FORBIDDEN).send('You are not allowed to do this action')\n }\n if (!(await isPathExists(dirName(req.space.realPath)))) {\n return res.status(HttpStatus.CONFLICT).send('Parent must exists')\n }\n }\n\n const lockOptions: FileLockOptions = {\n lockRoot: req.dav.url,\n lockToken: this.filesLockManager.genDAVToken(),\n lockScope: req.dav.lock.lockscope,\n lockInfo: req.dav.lock?.owner\n }\n\n const [ok, fileLock] = await this.filesLockManager.create(\n req.user,\n req.space.dbFile,\n WEBDAV_APP_LOCK,\n req.dav.depth,\n lockOptions,\n req.dav.lock.timeout\n )\n if (ok) {\n // Locking unmapped URLs: must create an empty resource (that is not a collection)\n if (!rExists) {\n // checkLocks set to false because the conflicts are already checked in the `filesLockManager.create` method\n await this.filesManager.mkFile(req.user, req.space, false, false, false)\n }\n const lockProp = LOCK_PROP([fileLock])\n return res\n .header(HEADER.LOCK_TOKEN, `<${lockOptions.lockToken}>`)\n .type(XML_CONTENT_TYPE)\n .status(rExists ? HttpStatus.OK : HttpStatus.CREATED)\n .send(xmlBuild(lockProp))\n }\n if (fileLock) {\n const lockProp = LOCK_PROP([fileLock])\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.LOCKED).send(xmlBuild(lockProp))\n }\n return DAV_ERROR_RES(HttpStatus.LOCKED, PRECONDITION.LOCK_CONFLICT, res, fileLock.options?.lockRoot || fileLock.dbFilePath)\n }\n\n @IfHeaderDecorator()\n async unlock(req: FastifyDAVRequest, res: FastifyReply) {\n if (!(await isPathExists(req.space.realPath))) {\n this.logger.warn(`Unable to unlock: ${req.dav.url} - resource does not exist`)\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n\n const lock = await this.filesLockManager.isLockedWithToken(req.dav.lock.token, req.space.dbFile.path)\n if (!lock) {\n this.logger.warn(`Lock token does not exist or not match URL : ${req.dav.lock.token}`)\n return DAV_ERROR_RES(HttpStatus.CONFLICT, PRECONDITION.LOCK_TOKEN_MISMATCH, res)\n }\n if (req.user.id !== lock.owner.id) {\n return res.status(HttpStatus.FORBIDDEN).send('Token was created by another user')\n }\n\n await this.filesLockManager.removeLock(lock.key)\n return res.status(HttpStatus.NO_CONTENT).send()\n }\n\n @IfHeaderDecorator()\n async propfind(req: FastifyDAVRequest, res: FastifyReply, repository: string): Promise<string> {\n if (repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if (!(await isPathExists(req.space.realPath))) {\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n }\n\n const responses: any[] = []\n let requestedProps: string[]\n let locks: Record<string, FileLock> = {}\n\n if (req.dav.propfindMode === PROPSTAT.PROP) {\n // ignores all unknown properties (non-RFC compliant but avoids generating too much content, faster)\n requestedProps = Object.keys(req.dav.body.propfind.prop).filter((prop: string) => STANDARD_PROPS.indexOf(prop) > -1)\n } else {\n requestedProps = STANDARD_PROPS\n }\n\n // Searches all child locks (only for real files) & ignores /webdav/shares endpoint (special case)\n if (req.dav.propfindMode !== PROPSTAT.PROPNAME && repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if (req.dav.depth === DEPTH.RESOURCE) {\n // match depth '0'\n locks = await this.filesLockManager.browseLocks(req.space.dbFile)\n } else {\n // match depth '1' or 'infinity'\n locks = await this.filesLockManager.browseParentChildLocks(req.space.dbFile)\n }\n }\n\n for await (const f of this.webDAVHandler.propfind(req, repository)) {\n let prop: any\n if (req.dav.propfindMode === PROPSTAT.PROPNAME) {\n prop = { ...Object.fromEntries(requestedProps.map((x) => [`${NS_PREFIX}:${x}`, ''])) }\n } else {\n prop = {}\n for (const p of requestedProps) {\n let fP: any\n if (p === LOCK_DISCOVERY_PROP) {\n let lockDiscovery: any[] = null\n if (repository === SPACE_REPOSITORY.FILES) {\n if (f.name in locks) {\n lockDiscovery = LOCK_DISCOVERY([locks[f.name]])\n } else {\n // The lock name may correspond to the original file at the space root.\n const fName = fileName(req.space.dbFile.path)\n if (fName in locks) {\n lockDiscovery = LOCK_DISCOVERY([locks[fName]])\n }\n }\n }\n fP = lockDiscovery\n } else {\n fP = f[p]\n }\n if (fP !== undefined) prop[`${NS_PREFIX}:${p}`] = fP\n }\n }\n responses.push(PROP_STAT(f.href, PROP(prop, req.dav.httpVersion, HttpStatus.OK)))\n }\n const propfind = xmlBuild(MULTI_STATUS(responses))\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.MULTI_STATUS).send(propfind)\n }\n\n @IfHeaderDecorator()\n async put(req: FastifyDAVRequest, res: FastifyReply): Promise<FastifyReply> {\n let rExists: boolean\n try {\n rExists = await this.filesManager.saveStream(req.user, req.space, req, {\n dav: {\n depth: req.dav.depth,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n }\n })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res\n .header('etag', genEtag(null, req.space.realPath))\n .status(rExists ? HttpStatus.NO_CONTENT : HttpStatus.CREATED)\n .send()\n }\n\n @IfHeaderDecorator()\n async delete(req: FastifyDAVRequest, res: FastifyReply) {\n try {\n await this.filesManager.delete(req.user, req.space, { lockTokens: extractAllTokens(req.dav.ifHeaders) })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res.status(HttpStatus.NO_CONTENT).send()\n }\n\n @IfHeaderDecorator()\n async proppatch(req: FastifyDAVRequest, res: FastifyReply) {\n /* only support 'time modifications' */\n if (!(await isPathExists(req.space.realPath))) {\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n\n // check locks\n try {\n await this.filesLockManager.checkConflicts(req.space.dbFile, req.dav.depth, {\n userId: req.user.id,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n\n // evaluate props and return multistatus if errors\n req.dav.proppatch = { props: {}, errors: [] }\n for (const action of Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE])) {\n if (Object.values(PROPPATCH_METHOD).indexOf(action) === -1) {\n const msg = `Unknown tag : expected ${PROPPATCH_METHOD.SET} or ${PROPPATCH_METHOD.REMOVE}`\n this.logger.debug(msg)\n return res.status(HttpStatus.BAD_REQUEST).send(msg)\n }\n\n if (Array.isArray(req.dav.body[PROPPATCH_PROP_UPDATE][action])) {\n if (Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE][action][0])[0] === PROPSTAT.PROP) {\n req.dav.body[PROPPATCH_PROP_UPDATE][action] = {\n [PROPSTAT.PROP]: req.dav.body[PROPPATCH_PROP_UPDATE][action].map((e: any) => e[PROPSTAT.PROP])\n }\n }\n }\n\n if (Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE][action])[0] !== PROPSTAT.PROP) {\n const msg = `Unknown tag : expected ${PROPSTAT.PROP}`\n this.logger.debug(msg)\n return res.status(HttpStatus.BAD_REQUEST).send(msg)\n }\n\n if (!Array.isArray(req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP])) {\n req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP] = [req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP]]\n }\n\n for (const prop of req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP] as Record<string, string>[]) {\n for (let [name, value] of Object.entries(prop)) {\n if (action === PROPPATCH_METHOD.REMOVE) {\n value = null\n this.logger.debug(`Proppatch remove method not handled : ${name} -> ${value}`)\n }\n if (PROPPATCH_SUPPORTED_PROPS.indexOf(name) === -1) {\n req.dav.proppatch.errors.push(\n PROP(\n { [`${NS_PREFIX}:${name}`]: null },\n req.dav.httpVersion,\n HttpStatus.FORBIDDEN,\n STANDARD_PROPS.indexOf(name) > -1 ? PRECONDITION.PROTECTED_PROPERTY : undefined\n )\n )\n continue\n }\n req.dav.proppatch.props[name] = value\n }\n }\n }\n\n if (req.dav.proppatch.errors.length) {\n // convert all passed props to failed dependency\n for (const name of Object.keys(req.dav.proppatch.props)) {\n req.dav.proppatch.errors.push(PROP({ [`${NS_PREFIX}:${name}`]: null }, req.dav.httpVersion, HttpStatus.FAILED_DEPENDENCY))\n }\n const proppatch = xmlBuild(MULTI_STATUS(PROP_STAT(encodeUrl(req.dav.url), req.dav.proppatch.errors)))\n return res.status(HttpStatus.MULTI_STATUS).type(XML_CONTENT_TYPE).send(proppatch)\n }\n\n // apply modifications\n let atLeastOneError = false\n const states: Record<string, boolean> = {}\n for (const [name, value] of Object.entries(req.dav.proppatch.props)) {\n if (PROPPATCH_MODIFIED_PROPS.indexOf(name) > -1) {\n try {\n await this.filesManager.touch(req.user, req.space, currentTimeStamp(new Date(value)), false)\n } catch (e) {\n this.logger.error(`${this.proppatch.name} - unable to modify mtime on ${req.dav.url} : ${e}`)\n states[name] = false\n atLeastOneError = true\n }\n }\n // hook: we let the known Win32* properties pass to return a consistent result\n states[name] = true\n }\n\n const props = []\n for (const [name, state] of Object.entries(states)) {\n props.push(\n PROP(\n { [`${NS_PREFIX}:${name}`]: null },\n req.dav.httpVersion,\n state ? (atLeastOneError ? HttpStatus.FAILED_DEPENDENCY : HttpStatus.OK) : HttpStatus.BAD_REQUEST\n )\n )\n }\n const proppatch = xmlBuild(MULTI_STATUS(PROP_STAT(encodeUrl(req.dav.url), props)))\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.MULTI_STATUS).send(proppatch)\n }\n\n @IfHeaderDecorator()\n async mkcol(req: FastifyDAVRequest, res: FastifyReply) {\n try {\n await this.filesManager.mkDir(req.user, req.space, false, { depth: req.dav.depth, lockTokens: extractAllTokens(req.dav.ifHeaders) })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res.status(HttpStatus.CREATED).send()\n }\n\n @IfHeaderDecorator()\n async copyMove(req: FastifyDAVRequest, res: FastifyReply) {\n const dstSpace: SpaceEnv = await this.webDAVHandler.spaceEnv(req.user, req.dav.copyMove.destination)\n if (!dstSpace) {\n this.logger.warn(`Space not found for destination : ${req.dav.copyMove.destination}`)\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.copyMove.destination)\n }\n const dstExisted = await isPathExists(dstSpace.realPath)\n // We must evaluate the if-headers on the destination\n const fakeDstReq = {\n dav: { ...req.dav, url: req.dav.copyMove.destination },\n user: req.user,\n space: dstSpace\n } as FastifyDAVRequest\n if (!(await this.evaluateIfHeaders(fakeDstReq, res))) {\n // if there is an error, the response is generated inside the `evaluateIfHeaders` function\n return\n }\n try {\n await this.filesManager.copyMove(req.user, req.space, dstSpace, req.dav.copyMove.isMove, req.dav.copyMove.overwrite, false, {\n depth: req.dav.depth,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n })\n } catch (e) {\n return this.handleError(req, res, e, dstSpace.url)\n }\n return res.status(dstExisted ? HttpStatus.NO_CONTENT : HttpStatus.CREATED).send()\n }\n\n protected async evaluateIfHeaders(req: FastifyDAVRequest, res: FastifyReply): Promise<boolean> {\n if (!req.dav.ifHeaders) return true\n const errors: string[] = []\n let lastPath = null\n let lastSpaceEnv: SpaceEnv\n let lastRPath = undefined\n let lastEtag = undefined // for now, we only generate one etag type (weak)\n let atLeastOneOk = false\n\n for (const condition of req.dav.ifHeaders) {\n if (condition.path) {\n if (condition.path !== lastPath) {\n lastPath = condition.path\n lastSpaceEnv = await this.webDAVHandler.spaceEnv(req.user, lastPath)\n }\n // the path will be the same across conditions\n if (!lastSpaceEnv) {\n this.logger.warn(`If Header : path mismatch (${condition.path})`)\n return false\n }\n } else {\n lastPath = req.dav.url\n lastSpaceEnv = req.space\n }\n\n if (condition.haveLock) {\n try {\n const dbFile = dbFileFromSpace(req.user.id, lastSpaceEnv)\n const match = !!(await this.filesLockManager.getLocksByPath(dbFile)).length\n if (condition.haveLock.mustMatch !== match) {\n errors.push(`have lock condition mismatch (${condition.haveLock.mustMatch} != ${match})`)\n continue\n }\n } catch (e) {\n errors.push(`have lock condition mismatch : ${e.message}`)\n continue\n }\n }\n\n if (condition.token) {\n const token = await this.filesLockManager.getLockByToken(condition.token.value)\n const match = token && lastPath.startsWith(token.options?.lockRoot)\n if (condition.token.mustMatch !== match) {\n if (!token) {\n errors.push(`lock token not found`)\n } else {\n errors.push(`lock token url mismatch (${lastPath} is not a child of ${token.options?.lockRoot})`)\n }\n continue\n }\n }\n\n if (condition.etag) {\n if (lastEtag === undefined) {\n if (lastRPath === undefined) {\n lastRPath = (await isPathExists(req.space.realPath)) ? req.space.realPath : null\n }\n lastEtag = lastRPath ? genEtag(null, lastRPath) : null\n }\n const match = lastEtag === condition.etag.value\n if (condition.etag.mustMatch !== match) {\n errors.push(`etag mismatch (${condition.etag.value} != ${lastEtag})`)\n continue\n }\n }\n\n atLeastOneOk = true\n break\n }\n\n if (!atLeastOneOk) {\n this.logger.warn(`If header condition failed : ${errors.join(', ')}`)\n res.status(HttpStatus.PRECONDITION_FAILED).send('If header condition failed')\n }\n return atLeastOneOk\n }\n\n private async lockRefresh(req: FastifyDAVRequest, res: FastifyReply, dbFilePath: string) {\n if (req.dav?.ifHeaders?.length !== 1) {\n this.logger.warn('Expected a lock token (only one lock may be refreshed at a time)')\n return res.status(HttpStatus.BAD_REQUEST).send('Expected a lock token (only one lock may be refreshed at a time)')\n }\n\n let token: string\n try {\n token = extractOneToken(req.dav.ifHeaders)\n } catch (e) {\n this.logger.warn(`${this.lockRefresh.name} - unable to extract token : ${JSON.stringify(req.dav.ifHeaders)} (${e})`)\n return res.status(HttpStatus.BAD_REQUEST).send('Unable to extract token')\n }\n\n const lock = await this.filesLockManager.isLockedWithToken(token, dbFilePath)\n if (!lock) {\n this.logger.warn(`Lock token does not exist or not match URL : ${token}`)\n return DAV_ERROR_RES(HttpStatus.PRECONDITION_FAILED, PRECONDITION.LOCK_TOKEN_MISMATCH, res)\n }\n if (lock.owner.id !== req.user.id) {\n this.logger.warn(`Lock token does not match owner : ${lock.owner.login} != ${req.user.login}`)\n return res.status(HttpStatus.FORBIDDEN).send('Lock token does not match owner')\n }\n\n await this.filesLockManager.refreshLockTimeout(lock, req.dav.lock.timeout)\n const lockProp = LOCK_PROP([lock])\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.OK).send(xmlBuild(lockProp))\n }\n\n private handleError(req: FastifyDAVRequest, res: FastifyReply, e: any, toUrl?: string) {\n this.logger.error(`Unable to ${req.method} ${req.dav.url}${toUrl ? ` -> ${toUrl}` : ''} : ${e.message}`)\n // Remove the last part to avoid exposing the path\n const errorMsg = e.message.split(',')[0]\n if (e instanceof LockConflict) {\n return DAV_ERROR_RES(HttpStatus.LOCKED, PRECONDITION.LOCK_CONFLICT, res, e.lock.options?.lockRoot || e.lock.dbFilePath)\n } else if (e instanceof FileError) {\n return res.status(e.httpCode).send(errorMsg)\n }\n throw new HttpException(errorMsg, HttpStatus.INTERNAL_SERVER_ERROR)\n }\n}\n"],"names":["WebDAVMethods","headOrGet","req","res","repository","SPACE_REPOSITORY","FILES","space","inSharesList","isPathExists","realPath","isPathIsDir","header","OPTIONS_HEADERS","DAV","status","HttpStatus","OK","send","sendFile","filesManager","sendFileFromSpace","checks","stream","e","handleError","logger","warn","FORBIDDEN","lock","isLockRefresh","dav","body","rExists","BAD_REQUEST","lockRefresh","dbFile","path","haveSpaceEnvPermissions","SPACE_OPERATION","ADD","alias","id","url","dirName","CONFLICT","lockOptions","lockRoot","lockToken","filesLockManager","genDAVToken","lockScope","lockscope","lockInfo","owner","ok","fileLock","create","user","WEBDAV_APP_LOCK","depth","timeout","mkFile","lockProp","LOCK_PROP","HEADER","LOCK_TOKEN","type","XML_CONTENT_TYPE","CREATED","xmlBuild","LOCKED","DAV_ERROR_RES","PRECONDITION","LOCK_CONFLICT","options","dbFilePath","unlock","NOT_FOUND","isLockedWithToken","token","LOCK_TOKEN_MISMATCH","removeLock","key","NO_CONTENT","propfind","responses","requestedProps","locks","propfindMode","PROPSTAT","PROP","Object","keys","prop","filter","STANDARD_PROPS","indexOf","PROPNAME","DEPTH","RESOURCE","browseLocks","browseParentChildLocks","f","webDAVHandler","fromEntries","map","x","NS_PREFIX","p","fP","LOCK_DISCOVERY_PROP","lockDiscovery","name","LOCK_DISCOVERY","fName","fileName","undefined","push","PROP_STAT","href","httpVersion","MULTI_STATUS","put","saveStream","lockTokens","extractAllTokens","ifHeaders","genEtag","delete","proppatch","checkConflicts","userId","props","errors","action","PROPPATCH_PROP_UPDATE","values","PROPPATCH_METHOD","msg","SET","REMOVE","debug","Array","isArray","value","entries","PROPPATCH_SUPPORTED_PROPS","PROTECTED_PROPERTY","length","FAILED_DEPENDENCY","encodeUrl","atLeastOneError","states","PROPPATCH_MODIFIED_PROPS","touch","currentTimeStamp","Date","error","state","mkcol","mkDir","copyMove","dstSpace","spaceEnv","destination","dstExisted","fakeDstReq","evaluateIfHeaders","isMove","overwrite","lastPath","lastSpaceEnv","lastRPath","lastEtag","atLeastOneOk","condition","haveLock","dbFileFromSpace","match","getLocksByPath","mustMatch","message","getLockByToken","startsWith","etag","join","PRECONDITION_FAILED","extractOneToken","JSON","stringify","login","refreshLockTimeout","toUrl","method","errorMsg","split","LockConflict","FileError","httpCode","HttpException","INTERNAL_SERVER_ERROR","Logger"],"mappings":"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"}
|