@sync-in/server 1.5.2 → 1.6.1
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 +28 -0
- package/README.md +2 -1
- package/environment/environment.dist.min.yaml +1 -0
- package/environment/environment.dist.yaml +88 -30
- package/migrations/0002_sleepy_korath.sql +1 -0
- package/migrations/meta/0002_snapshot.json +2424 -0
- package/migrations/meta/_journal.json +7 -0
- package/package.json +14 -12
- package/server/app.bootstrap.js +1 -1
- package/server/app.bootstrap.js.map +1 -1
- package/server/applications/files/services/files-manager.service.js +1 -2
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-only-office-manager.service.js +5 -6
- package/server/applications/files/services/files-only-office-manager.service.js.map +1 -1
- package/server/applications/files/utils/files.js +6 -4
- package/server/applications/files/utils/files.js.map +1 -1
- package/server/applications/links/links.controller.js +2 -2
- package/server/applications/links/links.controller.js.map +1 -1
- package/server/applications/links/services/links-manager.service.js +2 -1
- package/server/applications/links/services/links-manager.service.js.map +1 -1
- package/server/applications/links/services/links-manager.service.spec.js +6 -3
- package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
- package/server/applications/notifications/constants/notifications.js +9 -0
- package/server/applications/notifications/constants/notifications.js.map +1 -1
- package/server/applications/notifications/i18n/fr.js +10 -1
- package/server/applications/notifications/i18n/fr.js.map +1 -1
- package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
- package/server/applications/notifications/mails/models.js +41 -3
- package/server/applications/notifications/mails/models.js.map +1 -1
- package/server/applications/notifications/mails/templates.js +1 -1
- package/server/applications/notifications/mails/templates.js.map +1 -1
- package/server/applications/notifications/schemas/notifications.schema.js +2 -1
- package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.js +16 -13
- package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.spec.js +9 -8
- package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
- package/server/applications/notifications/services/notifications-queries.service.js +1 -1
- package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +3 -2
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/sync/constants/auth.js +2 -2
- package/server/applications/sync/constants/auth.js.map +1 -1
- package/server/applications/sync/dtos/sync-client-registration.dto.js +5 -0
- package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-operations.dto.js +1 -2
- package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
- package/server/applications/sync/schemas/sync-clients.schema.js +2 -1
- package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
- package/server/applications/sync/schemas/sync-paths.schema.js +2 -1
- package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
- package/server/applications/sync/services/sync-clients-manager.service.js +28 -20
- package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-clients-manager.service.spec.js +24 -18
- package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-queries.service.js +5 -5
- package/server/applications/sync/services/sync-queries.service.js.map +1 -1
- package/server/applications/users/admin-users.controller.js +48 -37
- package/server/applications/users/admin-users.controller.js.map +1 -1
- package/server/applications/users/admin-users.controller.spec.js +15 -0
- package/server/applications/users/admin-users.controller.spec.js.map +1 -1
- package/server/applications/users/constants/routes.js +5 -0
- package/server/applications/users/constants/routes.js.map +1 -1
- package/server/applications/users/constants/user.js +8 -0
- package/server/applications/users/constants/user.js.map +1 -1
- package/server/applications/users/dto/delete-user.dto.js +5 -23
- package/server/applications/users/dto/delete-user.dto.js.map +1 -1
- package/server/applications/users/dto/user-properties.dto.js +38 -3
- package/server/applications/users/dto/user-properties.dto.js.map +1 -1
- package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
- package/server/applications/users/interfaces/user-secrets.interface.js +10 -0
- package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -0
- package/server/applications/users/models/user.model.js +84 -50
- package/server/applications/users/models/user.model.js.map +1 -1
- package/server/applications/users/schemas/user.interface.js.map +1 -1
- package/server/applications/users/schemas/users.schema.js +2 -0
- package/server/applications/users/schemas/users.schema.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.js +7 -19
- package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.spec.js +7 -26
- package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/admin-users-queries.service.js +1 -0
- package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.js +138 -28
- package/server/applications/users/services/users-manager.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.spec.js +11 -9
- package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/users-queries.service.js +63 -57
- package/server/applications/users/services/users-queries.service.js.map +1 -1
- package/server/applications/users/users.controller.js +48 -1
- package/server/applications/users/users.controller.js.map +1 -1
- package/server/applications/users/users.controller.spec.js +8 -1
- package/server/applications/users/users.controller.spec.js.map +1 -1
- package/server/applications/users/users.e2e-spec.js +2 -1
- package/server/applications/users/users.e2e-spec.js.map +1 -1
- package/server/applications/users/utils/avatar.js +48 -0
- package/server/applications/users/utils/avatar.js.map +1 -0
- package/server/authentication/auth.config.js +89 -26
- package/server/authentication/auth.config.js.map +1 -1
- package/server/authentication/auth.controller.js +117 -9
- package/server/authentication/auth.controller.js.map +1 -1
- package/server/authentication/auth.controller.spec.js +16 -1
- package/server/authentication/auth.controller.spec.js.map +1 -1
- package/server/authentication/auth.e2e-spec.js +4 -3
- package/server/authentication/auth.e2e-spec.js.map +1 -1
- package/server/authentication/auth.module.js +4 -1
- package/server/authentication/auth.module.js.map +1 -1
- package/server/authentication/constants/auth-ldap.js +44 -0
- package/server/authentication/constants/auth-ldap.js.map +1 -0
- package/server/authentication/constants/auth.js +37 -4
- package/server/authentication/constants/auth.js.map +1 -1
- package/server/authentication/constants/routes.js +21 -0
- package/server/authentication/constants/routes.js.map +1 -1
- package/server/authentication/constants/scope.js +20 -0
- package/server/authentication/constants/scope.js.map +1 -0
- package/server/authentication/dto/login-response.dto.js +27 -4
- package/server/authentication/dto/login-response.dto.js.map +1 -1
- package/server/authentication/dto/token-response.dto.js +5 -0
- package/server/authentication/dto/token-response.dto.js.map +1 -1
- package/server/{applications/users/dto/user-password.dto.js → authentication/dto/two-fa-verify.dto.js} +27 -9
- package/server/authentication/dto/two-fa-verify.dto.js.map +1 -0
- package/server/authentication/guards/auth-basic.strategy.js +6 -5
- package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-access.strategy.js +3 -2
- package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.strategy.js +3 -2
- package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
- package/server/authentication/guards/auth-two-fa-guard.js +81 -0
- package/server/authentication/guards/auth-two-fa-guard.js.map +1 -0
- package/server/authentication/interfaces/jwt-payload.interface.js +5 -0
- package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
- package/server/authentication/interfaces/token.interface.js +2 -0
- package/server/authentication/interfaces/token.interface.js.map +1 -1
- package/server/authentication/interfaces/two-fa-setup.interface.js +10 -0
- package/server/authentication/interfaces/two-fa-setup.interface.js.map +1 -0
- package/server/authentication/models/auth-method.js.map +1 -1
- package/server/authentication/services/auth-manager.service.js +72 -49
- package/server/authentication/services/auth-manager.service.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.js +3 -3
- package/server/authentication/services/auth-methods/auth-method-database.service.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.spec.js +5 -0
- package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js +151 -66
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +52 -50
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js +251 -0
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +1 -0
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js +41 -0
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +1 -0
- package/server/authentication/utils/crypt-secret.js +68 -0
- package/server/authentication/utils/crypt-secret.js.map +1 -0
- package/server/common/functions.js +18 -2
- package/server/common/functions.js.map +1 -1
- package/server/common/qrcode.js +34 -0
- package/server/common/qrcode.js.map +1 -0
- package/server/common/shared.js +18 -0
- package/server/common/shared.js.map +1 -1
- package/server/configuration/config.environment.js +23 -6
- package/server/configuration/config.environment.js.map +1 -1
- package/server/configuration/config.interfaces.js +10 -0
- package/server/configuration/config.interfaces.js.map +1 -0
- package/server/configuration/config.loader.js.map +1 -1
- package/server/configuration/config.validation.js +13 -13
- package/server/configuration/config.validation.js.map +1 -1
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +6 -6
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/schemas/mysql-cache.schema.js +2 -1
- package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
- package/server/infrastructure/cache/services/cache.service.js.map +1 -1
- package/server/infrastructure/database/columns.js +39 -0
- package/server/infrastructure/database/columns.js.map +1 -0
- package/server/infrastructure/database/database.config.js +0 -1
- package/server/infrastructure/database/database.config.js.map +1 -1
- package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
- package/server/infrastructure/mailer/mailer.config.js +12 -0
- package/server/infrastructure/mailer/mailer.config.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.js +2 -1
- package/server/infrastructure/mailer/mailer.service.js.map +1 -1
- package/static/assets/mimes/text-x-c.svg +1 -0
- package/static/assets/pdfjs/build/pdf.mjs +2522 -914
- package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
- package/static/assets/pdfjs/build/pdf.worker.mjs +1024 -566
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/debugger.mjs +116 -37
- package/static/assets/pdfjs/web/images/comment-popup-editButton.svg +5 -0
- package/static/assets/pdfjs/web/locale/ach/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/af/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/an/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/ar/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/ast/viewer.ftl +0 -19
- package/static/assets/pdfjs/web/locale/az/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/be/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/bg/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/bn/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/bo/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/br/viewer.ftl +0 -22
- package/static/assets/pdfjs/web/locale/brx/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/bs/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/ca/viewer.ftl +12 -23
- package/static/assets/pdfjs/web/locale/cak/viewer.ftl +0 -23
- package/static/assets/pdfjs/web/locale/ckb/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/cs/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/cy/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/da/viewer.ftl +3 -35
- package/static/assets/pdfjs/web/locale/de/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/el/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +25 -13
- package/static/assets/pdfjs/web/locale/eo/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +5 -32
- package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/et/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/eu/viewer.ftl +38 -32
- package/static/assets/pdfjs/web/locale/fa/viewer.ftl +0 -19
- package/static/assets/pdfjs/web/locale/ff/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/fi/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/fr/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/fur/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/ga-IE/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/gd/viewer.ftl +0 -23
- package/static/assets/pdfjs/web/locale/gl/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/gn/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/gu-IN/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/he/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/hi-IN/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/hr/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/hu/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +372 -16
- package/static/assets/pdfjs/web/locale/hye/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/ia/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/id/viewer.ftl +38 -32
- package/static/assets/pdfjs/web/locale/is/viewer.ftl +27 -32
- package/static/assets/pdfjs/web/locale/it/viewer.ftl +0 -33
- package/static/assets/pdfjs/web/locale/ja/viewer.ftl +31 -33
- package/static/assets/pdfjs/web/locale/ka/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/kab/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +31 -32
- package/static/assets/pdfjs/web/locale/km/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/kn/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/ko/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/lij/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/lo/viewer.ftl +0 -23
- package/static/assets/pdfjs/web/locale/lt/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/ltg/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/lv/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/meh/viewer.ftl +0 -14
- package/static/assets/pdfjs/web/locale/mk/viewer.ftl +0 -19
- package/static/assets/pdfjs/web/locale/ml/viewer.ftl +0 -31
- package/static/assets/pdfjs/web/locale/mr/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/ms/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/my/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/ne-NP/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/nl/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/oc/viewer.ftl +0 -24
- package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/pl/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/pt-PT/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/rm/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/ro/viewer.ftl +5 -37
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/sat/viewer.ftl +0 -23
- package/static/assets/pdfjs/web/locale/sc/viewer.ftl +8 -27
- package/static/assets/pdfjs/web/locale/sco/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/si/viewer.ftl +0 -22
- package/static/assets/pdfjs/web/locale/sk/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/skr/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/sl/viewer.ftl +30 -32
- package/static/assets/pdfjs/web/locale/son/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/sq/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/sr/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/szl/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/ta/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/te/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/tg/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/th/viewer.ftl +38 -32
- package/static/assets/pdfjs/web/locale/tl/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/tr/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/trs/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/uk/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/ur/viewer.ftl +0 -16
- package/static/assets/pdfjs/web/locale/uz/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/vi/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/xh/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +0 -32
- package/static/assets/pdfjs/web/viewer.css +586 -437
- package/static/assets/pdfjs/web/viewer.html +12 -23
- package/static/assets/pdfjs/web/viewer.mjs +955 -514
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/assets/pdfjs/web/wasm/openjpeg.wasm +0 -0
- package/static/assets/pdfjs/web/wasm/openjpeg_nowasm_fallback.js +10 -22
- package/static/{chunk-SPTF6FSM.js → chunk-27YQB3TE.js} +1 -1
- package/static/chunk-2I4CUFUA.js +1 -0
- package/static/chunk-2MTM6SWN.js +4 -0
- package/static/{chunk-7VRUZRJG.js → chunk-34MKICK5.js} +2 -2
- package/static/chunk-5O3DIUU3.js +1 -0
- package/static/{chunk-VJRTMDEJ.js → chunk-6NMVZIIT.js} +1 -1
- package/static/{chunk-L6MU6S2V.js → chunk-7DN7ZAPU.js} +1 -1
- package/static/{chunk-MVO4WZLK.js → chunk-7FUM3JGM.js} +1 -1
- package/static/{chunk-RSS6GYNE.js → chunk-7ITZXYYJ.js} +1 -1
- package/static/chunk-7P27WBGC.js +4 -0
- package/static/chunk-ATP3BFHV.js +562 -0
- package/static/chunk-AWQ2YTVC.js +1 -0
- package/static/chunk-DSOE3FEP.js +1 -0
- package/static/{chunk-2R6HHGUR.js → chunk-EFKMBLRE.js} +1 -1
- package/static/chunk-FUFKVHPU.js +1 -0
- package/static/{chunk-MRSWNAVB.js → chunk-HCDLWTMW.js} +1 -1
- package/static/chunk-IPAC4VAF.js +1 -0
- package/static/{chunk-ZC5NIT55.js → chunk-IQOALFYU.js} +1 -1
- package/static/chunk-JASU3CIH.js +1 -0
- package/static/{chunk-6OJZWYRZ.js → chunk-JQ5FTO2M.js} +1 -1
- package/static/chunk-JUNZFADM.js +1 -0
- package/static/{chunk-LLWSLOSX.js → chunk-LJUKI4SQ.js} +1 -1
- package/static/{chunk-WI7FOANP.js → chunk-LUWQFIWR.js} +1 -1
- package/static/{chunk-BIUNUYZ5.js → chunk-ORMRCEGT.js} +1 -1
- package/static/{chunk-IZL7JPTS.js → chunk-Q7D6RN4N.js} +1 -1
- package/static/{chunk-JYXLQRHG.js → chunk-QJX6ITLW.js} +1 -1
- package/static/{chunk-YJMN3B4N.js → chunk-QQ6UQQBR.js} +1 -1
- package/static/chunk-S2HDY3OL.js +1 -0
- package/static/{chunk-NE4NDO45.js → chunk-S75P2FFI.js} +1 -1
- package/static/{chunk-CRQNEHTX.js → chunk-T3EYFSVZ.js} +1 -1
- package/static/{chunk-MCLQFZ3S.js → chunk-U34OZUZ7.js} +1 -1
- package/static/chunk-Y7EH7G5K.js +1 -0
- package/static/{chunk-MGGT6MIJ.js → chunk-ZQQPUYLU.js} +1 -1
- package/static/index.html +2 -2
- package/static/main-7SQDDVMD.js +9 -0
- package/static/{styles-FYUSO6OJ.css → styles-A5VYX3CE.css} +1 -1
- package/server/applications/users/dto/user-password.dto.js.map +0 -1
- package/static/chunk-4U5A2DEP.js +0 -4
- package/static/chunk-54EAZ2UD.js +0 -1
- package/static/chunk-7ZRXJONB.js +0 -1
- package/static/chunk-F2J2IIJE.js +0 -1
- package/static/chunk-FNFGUIQH.js +0 -4
- package/static/chunk-GGLK52CG.js +0 -1
- package/static/chunk-HW2H3ISM.js +0 -559
- package/static/chunk-HX6BBYVD.js +0 -1
- package/static/chunk-JF7S3UYQ.js +0 -1
- package/static/chunk-KSHPKI4G.js +0 -1
- package/static/chunk-VPJ2V27B.js +0 -1
- package/static/chunk-VUI3KV7V.js +0 -1
- package/static/chunk-ZXS4V7J2.js +0 -1
- package/static/main-FFIWFD2F.js +0 -7
|
@@ -99,7 +99,7 @@ let SyncQueries = class SyncQueries {
|
|
|
99
99
|
ownerId: _syncclientsschema.syncClients.ownerId,
|
|
100
100
|
token: _syncclientsschema.syncClients.token,
|
|
101
101
|
tokenExpiration: _syncclientsschema.syncClients.tokenExpiration,
|
|
102
|
-
info:
|
|
102
|
+
info: _syncclientsschema.syncClients.info,
|
|
103
103
|
enabled: _syncclientsschema.syncClients.enabled,
|
|
104
104
|
currentAccess: _syncclientsschema.syncClients.currentAccess,
|
|
105
105
|
currentIp: _syncclientsschema.syncClients.currentIp,
|
|
@@ -114,7 +114,7 @@ let SyncQueries = class SyncQueries {
|
|
|
114
114
|
return this.db.select({
|
|
115
115
|
id: _syncclientsschema.syncClients.id,
|
|
116
116
|
tokenExpiration: _syncclientsschema.syncClients.tokenExpiration,
|
|
117
|
-
info:
|
|
117
|
+
info: _syncclientsschema.syncClients.info,
|
|
118
118
|
enabled: _syncclientsschema.syncClients.enabled,
|
|
119
119
|
currentAccess: _syncclientsschema.syncClients.currentAccess,
|
|
120
120
|
currentIp: _syncclientsschema.syncClients.currentIp,
|
|
@@ -124,7 +124,7 @@ let SyncQueries = class SyncQueries {
|
|
|
124
124
|
isCurrentClient: (0, _drizzleorm.sql)`IF (${clientId} IS NOT NULL AND ${_syncclientsschema.syncClients.id} = ${clientId}, 1, 0)`.mapWith(Boolean),
|
|
125
125
|
paths: (0, _utils.concatDistinctObjectsInArray)(_syncpathsschema.syncPaths.id, {
|
|
126
126
|
id: _syncpathsschema.syncPaths.id,
|
|
127
|
-
settings:
|
|
127
|
+
settings: _syncpathsschema.syncPaths.settings,
|
|
128
128
|
createdAt: _syncpathsschema.syncPaths.createdAt
|
|
129
129
|
})
|
|
130
130
|
}).from(_syncclientsschema.syncClients).leftJoin(_syncpathsschema.syncPaths, (0, _drizzleorm.eq)(_syncpathsschema.syncPaths.clientId, _syncclientsschema.syncClients.id)).where((0, _drizzleorm.eq)(_syncclientsschema.syncClients.ownerId, owner.id)).groupBy(_syncclientsschema.syncClients.id).orderBy((0, _drizzleorm.desc)(_syncclientsschema.syncClients.currentAccess));
|
|
@@ -184,12 +184,12 @@ let SyncQueries = class SyncQueries {
|
|
|
184
184
|
ELSE NULL
|
|
185
185
|
END
|
|
186
186
|
`.as('remotePath'),
|
|
187
|
-
settings:
|
|
187
|
+
settings: _syncpathsschema.syncPaths.settings
|
|
188
188
|
}).from(_syncpathsschema.syncPaths).leftJoin(_filesschema.files, (0, _drizzleorm.eq)(_filesschema.files.id, _syncpathsschema.syncPaths.fileId)).leftJoin(_spacesschema.spaces, (0, _drizzleorm.eq)(_spacesschema.spaces.id, _syncpathsschema.syncPaths.spaceId)).leftJoin(_spacesrootsschema.spacesRoots, (0, _drizzleorm.eq)(_spacesrootsschema.spacesRoots.id, _syncpathsschema.syncPaths.spaceRootId)).leftJoin(spaceRootFile, (0, _drizzleorm.eq)(spaceRootFile.id, _spacesrootsschema.spacesRoots.fileId)).leftJoin(_sharesschema.shares, (0, _drizzleorm.eq)(_sharesschema.shares.id, _syncpathsschema.syncPaths.shareId)).leftJoin(shareFile, (0, _drizzleorm.eq)(shareFile.id, _sharesschema.shares.fileId)).where((0, _drizzleorm.eq)(_syncpathsschema.syncPaths.clientId, clientId));
|
|
189
189
|
}
|
|
190
190
|
async getPathSettings(clientId, pathId) {
|
|
191
191
|
const [path] = await this.db.select({
|
|
192
|
-
settings:
|
|
192
|
+
settings: _syncpathsschema.syncPaths.settings
|
|
193
193
|
}).from(_syncpathsschema.syncPaths).where((0, _drizzleorm.and)((0, _drizzleorm.eq)(_syncpathsschema.syncPaths.clientId, clientId), (0, _drizzleorm.eq)(_syncpathsschema.syncPaths.id, pathId))).limit(1);
|
|
194
194
|
return path ? path.settings : null;
|
|
195
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/sync/services/sync-queries.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 { Inject, Injectable } from '@nestjs/common'\nimport { and, desc, eq, SQL, sql } from 'drizzle-orm'\nimport { alias } from 'drizzle-orm/mysql-core'\nimport crypto from 'node:crypto'\nimport { convertHumanTimeToSeconds } from '../../../common/functions'\nimport { currentTimeStamp } from '../../../common/shared'\nimport { CacheDecorator } from '../../../infrastructure/cache/cache.decorator'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport type { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { concatDistinctObjectsInArray, dbCheckAffectedRows, dbGetInsertedId } from '../../../infrastructure/database/utils'\nimport { filePathSQL, files } from '../../files/schemas/files.schema'\nimport { shares } from '../../shares/schemas/shares.schema'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaces } from '../../spaces/schemas/spaces.schema'\nimport type { UserModel } from '../../users/models/user.model'\nimport { CLIENT_TOKEN_EXPIRATION_TIME } from '../constants/auth'\nimport { SYNC_REPOSITORY } from '../constants/sync'\nimport { SyncClientPaths } from '../interfaces/sync-client-paths.interface'\nimport { SyncClientInfo } from '../interfaces/sync-client.interface'\nimport { SyncDBProps, SyncPathSettings } from '../interfaces/sync-path.interface'\nimport { SyncClient } from '../schemas/sync-client.interface'\nimport { syncClients } from '../schemas/sync-clients.schema'\nimport { SyncPath } from '../schemas/sync-path.interface'\nimport { syncPaths } from '../schemas/sync-paths.schema'\n\n@Injectable()\nexport class SyncQueries {\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n async clientExistsForOwner(ownerId: number, clientId: string): Promise<boolean> {\n const [client] = await this.db\n .select({ id: syncClients.id })\n .from(syncClients)\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1)\n return !!client?.id\n }\n\n async getOrCreateClient(ownerId: number, clientId: string, info: SyncClientInfo, ip: string): Promise<string> {\n const client = await this.getClient(clientId, ownerId)\n if (client) {\n if (currentTimeStamp() < client.tokenExpiration) {\n return client.token\n }\n // renew token if it has expired\n const token = crypto.randomUUID()\n dbCheckAffectedRows(\n await this.db\n .update(syncClients)\n .set({\n token: token,\n tokenExpiration: currentTimeStamp() + convertHumanTimeToSeconds(CLIENT_TOKEN_EXPIRATION_TIME)\n })\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1),\n 1\n )\n return token\n } else {\n // create client\n const token = crypto.randomUUID()\n dbCheckAffectedRows(\n await this.db.insert(syncClients).values({\n id: clientId,\n ownerId: ownerId,\n token: token,\n tokenExpiration: currentTimeStamp() + convertHumanTimeToSeconds(CLIENT_TOKEN_EXPIRATION_TIME),\n info: info,\n currentAccess: new Date(),\n currentIp: ip\n } as SyncClient),\n 1\n )\n return token\n }\n }\n\n async getClient(clientId: string, ownerId?: number, token?: string): Promise<SyncClient> {\n const where: SQL[] = [\n eq(syncClients.id, clientId),\n ...(ownerId ? [eq(syncClients.ownerId, ownerId)] : []),\n ...(token ? [eq(syncClients.token, token)] : [])\n ]\n const [client] = await this.db\n .select({\n id: syncClients.id,\n ownerId: syncClients.ownerId,\n token: syncClients.token,\n tokenExpiration: syncClients.tokenExpiration,\n info: sql`${syncClients.info}`.mapWith(JSON.parse),\n enabled: syncClients.enabled,\n currentAccess: syncClients.currentAccess,\n currentIp: syncClients.currentIp,\n lastAccess: syncClients.lastAccess,\n lastIp: syncClients.lastIp,\n createdAt: syncClients.createdAt\n })\n .from(syncClients)\n .where(and(...where))\n .limit(1)\n return client\n }\n\n async getClients(owner: UserModel): Promise<SyncClientPaths[]> {\n const clientId = owner.clientId || null\n return this.db\n .select({\n id: syncClients.id,\n tokenExpiration: syncClients.tokenExpiration,\n info: sql`${syncClients.info}`.mapWith(JSON.parse),\n enabled: syncClients.enabled,\n currentAccess: syncClients.currentAccess,\n currentIp: syncClients.currentIp,\n lastAccess: syncClients.lastAccess,\n lastIp: syncClients.lastIp,\n createdAt: syncClients.createdAt,\n isCurrentClient: sql<boolean>`IF (${clientId} IS NOT NULL AND ${syncClients.id} = ${clientId}, 1, 0)`.mapWith(Boolean),\n paths: concatDistinctObjectsInArray(syncPaths.id, {\n id: syncPaths.id,\n settings: sql`${syncPaths.settings}`.mapWith(JSON.parse),\n createdAt: syncPaths.createdAt\n })\n })\n .from(syncClients)\n .leftJoin(syncPaths, eq(syncPaths.clientId, syncClients.id))\n .where(eq(syncClients.ownerId, owner.id))\n .groupBy(syncClients.id)\n .orderBy(desc(syncClients.currentAccess))\n }\n\n async deleteClient(ownerId: number, clientId: string) {\n dbCheckAffectedRows(\n await this.db\n .delete(syncClients)\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1),\n 1\n )\n }\n\n async renewClientTokenAndExpiration(clientId: string, token: string, expiration: number) {\n dbCheckAffectedRows(await this.db.update(syncClients).set({ token: token, tokenExpiration: expiration }).where(eq(syncClients.id, clientId)), 1)\n }\n\n async updateClientInfo(client: SyncClient, info: SyncClientInfo, ip: string) {\n await this.db\n .update(syncClients)\n .set({\n lastAccess: client.currentAccess,\n currentAccess: new Date(),\n lastIp: client.currentIp,\n currentIp: ip,\n info: info\n } as SyncClient)\n .where(eq(syncClients.id, client.id))\n }\n\n getPaths(clientId: string): Promise<{ id: number; settings: SyncPathSettings; remotePath: string }[]> {\n const shareFile: any = alias(files, 'shareFile')\n const spaceRootFile: any = alias(files, 'spaceRootFile')\n return this.db\n .select({\n id: syncPaths.id,\n remotePath: sql<string>`\n CASE WHEN ${syncPaths.ownerId} IS NOT NULL THEN CONCAT_WS('/', ${SYNC_REPOSITORY.PERSONAL}, ${filePathSQL(files)})\n WHEN ${syncPaths.spaceId} IS NOT NULL THEN CONCAT_WS('/', \n ${SYNC_REPOSITORY.SPACES}, \n ${spaces.alias}, \n CASE WHEN ${syncPaths.spaceRootId} IS NULL \n THEN CONCAT_WS('/', IF (${files.path} = '.', NULL, ${files.path}), ${files.name})\n ELSE\n CASE WHEN ${syncPaths.fileId} IS NULL \n THEN ${spacesRoots.alias}\n ELSE\n IF (${spacesRoots.externalPath} IS NOT NULL, \n CONCAT_WS('/', ${spacesRoots.alias}, IF (${files.path} = '.', NULL, ${files.path}), ${files.name}), \n CONCAT_WS('/', REGEXP_REPLACE(${files.path}, ${filePathSQL(spaceRootFile)}, ${spacesRoots.alias}), ${files.name})\n )\n END\n END\n )\n WHEN ${syncPaths.shareId} IS NOT NULL THEN CONCAT_WS('/',\n ${SYNC_REPOSITORY.SHARES},\n CASE WHEN ${syncPaths.fileId} IS NULL THEN ${shares.alias}\n ELSE \n IF (${shareFile.id} IS NOT NULL,\n IF (${files.id} = ${shareFile.id}, NULL, REGEXP_REPLACE(${files.path}, ${filePathSQL(shareFile)}, ${shares.alias})),\n CONCAT_WS('/', ${shares.alias}, IF (${files.path} = '.', NULL, ${files.path}))\n )\n END,\n IF (${files.id} = ${shareFile.id}, ${shares.name}, ${files.name})\n )\n ELSE NULL\n END\n `.as('remotePath'),\n settings: sql`${syncPaths.settings}`.mapWith(JSON.parse)\n })\n .from(syncPaths)\n .leftJoin(files, eq(files.id, syncPaths.fileId))\n .leftJoin(spaces, eq(spaces.id, syncPaths.spaceId))\n .leftJoin(spacesRoots, eq(spacesRoots.id, syncPaths.spaceRootId))\n .leftJoin(spaceRootFile, eq(spaceRootFile.id, spacesRoots.fileId))\n .leftJoin(shares, eq(shares.id, syncPaths.shareId))\n .leftJoin(shareFile, eq(shareFile.id, shares.fileId))\n .where(eq(syncPaths.clientId, clientId))\n }\n\n @CacheDecorator(900)\n async getPathSettings(clientId: string, pathId: number): Promise<SyncPathSettings> {\n const [path] = await this.db\n .select({\n settings: sql`${syncPaths.settings}`.mapWith(JSON.parse)\n })\n .from(syncPaths)\n .where(and(eq(syncPaths.clientId, clientId), eq(syncPaths.id, pathId)))\n .limit(1)\n return path ? path.settings : null\n }\n\n async createPath(clientId: string, dbProps: SyncDBProps, settings: SyncPathSettings): Promise<SyncPath['id']> {\n return dbGetInsertedId(await this.db.insert(syncPaths).values({ clientId: clientId, settings: settings, ...dbProps } as SyncPath))\n }\n\n async deletePath(clientId: string, pathId: number): Promise<void> {\n dbCheckAffectedRows(await this.db.delete(syncPaths).where(and(eq(syncPaths.id, pathId), eq(syncPaths.clientId, clientId))), 1)\n }\n\n async updatePathSettings(clientId: string, pathId: number, settings: SyncPathSettings) {\n dbCheckAffectedRows(\n await this.db\n .update(syncPaths)\n .set({ settings: settings })\n .where(and(eq(syncPaths.id, pathId), eq(syncPaths.clientId, clientId))),\n 1\n )\n }\n\n clearCachePathSettings(clientId: string, pathId: number): void {\n this.cache.del(this.cache.genSlugKey(this.constructor.name, this.getPathSettings.name, clientId, pathId)).catch((e: Error) => console.error(e))\n }\n}\n"],"names":["SyncQueries","clientExistsForOwner","ownerId","clientId","client","db","select","id","syncClients","from","where","and","eq","limit","getOrCreateClient","info","ip","getClient","currentTimeStamp","tokenExpiration","token","crypto","randomUUID","dbCheckAffectedRows","update","set","convertHumanTimeToSeconds","CLIENT_TOKEN_EXPIRATION_TIME","insert","values","currentAccess","Date","currentIp","sql","mapWith","JSON","parse","enabled","lastAccess","lastIp","createdAt","getClients","owner","isCurrentClient","Boolean","paths","concatDistinctObjectsInArray","syncPaths","settings","leftJoin","groupBy","orderBy","desc","deleteClient","delete","renewClientTokenAndExpiration","expiration","updateClientInfo","getPaths","shareFile","alias","files","spaceRootFile","remotePath","SYNC_REPOSITORY","PERSONAL","filePathSQL","spaceId","SPACES","spaces","spaceRootId","path","name","fileId","spacesRoots","externalPath","shareId","SHARES","shares","as","getPathSettings","pathId","createPath","dbProps","dbGetInsertedId","deletePath","updatePathSettings","clearCachePathSettings","cache","del","genSlugKey","catch","e","console","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/sync/services/sync-queries.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 { Inject, Injectable } from '@nestjs/common'\nimport { and, desc, eq, SQL, sql } from 'drizzle-orm'\nimport { alias } from 'drizzle-orm/mysql-core'\nimport crypto from 'node:crypto'\nimport { convertHumanTimeToSeconds } from '../../../common/functions'\nimport { currentTimeStamp } from '../../../common/shared'\nimport { CacheDecorator } from '../../../infrastructure/cache/cache.decorator'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport type { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { concatDistinctObjectsInArray, dbCheckAffectedRows, dbGetInsertedId } from '../../../infrastructure/database/utils'\nimport { filePathSQL, files } from '../../files/schemas/files.schema'\nimport { shares } from '../../shares/schemas/shares.schema'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaces } from '../../spaces/schemas/spaces.schema'\nimport type { UserModel } from '../../users/models/user.model'\nimport { CLIENT_TOKEN_EXPIRATION_TIME } from '../constants/auth'\nimport { SYNC_REPOSITORY } from '../constants/sync'\nimport { SyncClientPaths } from '../interfaces/sync-client-paths.interface'\nimport { SyncClientInfo } from '../interfaces/sync-client.interface'\nimport { SyncDBProps, SyncPathSettings } from '../interfaces/sync-path.interface'\nimport { SyncClient } from '../schemas/sync-client.interface'\nimport { syncClients } from '../schemas/sync-clients.schema'\nimport { SyncPath } from '../schemas/sync-path.interface'\nimport { syncPaths } from '../schemas/sync-paths.schema'\n\n@Injectable()\nexport class SyncQueries {\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n async clientExistsForOwner(ownerId: number, clientId: string): Promise<boolean> {\n const [client] = await this.db\n .select({ id: syncClients.id })\n .from(syncClients)\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1)\n return !!client?.id\n }\n\n async getOrCreateClient(ownerId: number, clientId: string, info: SyncClientInfo, ip: string): Promise<string> {\n const client = await this.getClient(clientId, ownerId)\n if (client) {\n if (currentTimeStamp() < client.tokenExpiration) {\n return client.token\n }\n // renew token if it has expired\n const token = crypto.randomUUID()\n dbCheckAffectedRows(\n await this.db\n .update(syncClients)\n .set({\n token: token,\n tokenExpiration: currentTimeStamp() + convertHumanTimeToSeconds(CLIENT_TOKEN_EXPIRATION_TIME)\n })\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1),\n 1\n )\n return token\n } else {\n // create client\n const token = crypto.randomUUID()\n dbCheckAffectedRows(\n await this.db.insert(syncClients).values({\n id: clientId,\n ownerId: ownerId,\n token: token,\n tokenExpiration: currentTimeStamp() + convertHumanTimeToSeconds(CLIENT_TOKEN_EXPIRATION_TIME),\n info: info,\n currentAccess: new Date(),\n currentIp: ip\n } as SyncClient),\n 1\n )\n return token\n }\n }\n\n async getClient(clientId: string, ownerId?: number, token?: string): Promise<SyncClient> {\n const where: SQL[] = [\n eq(syncClients.id, clientId),\n ...(ownerId ? [eq(syncClients.ownerId, ownerId)] : []),\n ...(token ? [eq(syncClients.token, token)] : [])\n ]\n const [client] = await this.db\n .select({\n id: syncClients.id,\n ownerId: syncClients.ownerId,\n token: syncClients.token,\n tokenExpiration: syncClients.tokenExpiration,\n info: syncClients.info,\n enabled: syncClients.enabled,\n currentAccess: syncClients.currentAccess,\n currentIp: syncClients.currentIp,\n lastAccess: syncClients.lastAccess,\n lastIp: syncClients.lastIp,\n createdAt: syncClients.createdAt\n })\n .from(syncClients)\n .where(and(...where))\n .limit(1)\n return client\n }\n\n async getClients(owner: UserModel): Promise<SyncClientPaths[]> {\n const clientId = owner.clientId || null\n return this.db\n .select({\n id: syncClients.id,\n tokenExpiration: syncClients.tokenExpiration,\n info: syncClients.info,\n enabled: syncClients.enabled,\n currentAccess: syncClients.currentAccess,\n currentIp: syncClients.currentIp,\n lastAccess: syncClients.lastAccess,\n lastIp: syncClients.lastIp,\n createdAt: syncClients.createdAt,\n isCurrentClient: sql<boolean>`IF (${clientId} IS NOT NULL AND ${syncClients.id} = ${clientId}, 1, 0)`.mapWith(Boolean),\n paths: concatDistinctObjectsInArray(syncPaths.id, {\n id: syncPaths.id,\n settings: syncPaths.settings,\n createdAt: syncPaths.createdAt\n })\n })\n .from(syncClients)\n .leftJoin(syncPaths, eq(syncPaths.clientId, syncClients.id))\n .where(eq(syncClients.ownerId, owner.id))\n .groupBy(syncClients.id)\n .orderBy(desc(syncClients.currentAccess))\n }\n\n async deleteClient(ownerId: number, clientId: string) {\n dbCheckAffectedRows(\n await this.db\n .delete(syncClients)\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1),\n 1\n )\n }\n\n async renewClientTokenAndExpiration(clientId: string, token: string, expiration: number) {\n dbCheckAffectedRows(await this.db.update(syncClients).set({ token: token, tokenExpiration: expiration }).where(eq(syncClients.id, clientId)), 1)\n }\n\n async updateClientInfo(client: SyncClient, info: SyncClientInfo, ip: string) {\n await this.db\n .update(syncClients)\n .set({\n lastAccess: client.currentAccess,\n currentAccess: new Date(),\n lastIp: client.currentIp,\n currentIp: ip,\n info: info\n } as SyncClient)\n .where(eq(syncClients.id, client.id))\n }\n\n getPaths(clientId: string): Promise<{ id: number; settings: SyncPathSettings; remotePath: string }[]> {\n const shareFile: any = alias(files, 'shareFile')\n const spaceRootFile: any = alias(files, 'spaceRootFile')\n return this.db\n .select({\n id: syncPaths.id,\n remotePath: sql<string>`\n CASE WHEN ${syncPaths.ownerId} IS NOT NULL THEN CONCAT_WS('/', ${SYNC_REPOSITORY.PERSONAL}, ${filePathSQL(files)})\n WHEN ${syncPaths.spaceId} IS NOT NULL THEN CONCAT_WS('/', \n ${SYNC_REPOSITORY.SPACES}, \n ${spaces.alias}, \n CASE WHEN ${syncPaths.spaceRootId} IS NULL \n THEN CONCAT_WS('/', IF (${files.path} = '.', NULL, ${files.path}), ${files.name})\n ELSE\n CASE WHEN ${syncPaths.fileId} IS NULL \n THEN ${spacesRoots.alias}\n ELSE\n IF (${spacesRoots.externalPath} IS NOT NULL, \n CONCAT_WS('/', ${spacesRoots.alias}, IF (${files.path} = '.', NULL, ${files.path}), ${files.name}), \n CONCAT_WS('/', REGEXP_REPLACE(${files.path}, ${filePathSQL(spaceRootFile)}, ${spacesRoots.alias}), ${files.name})\n )\n END\n END\n )\n WHEN ${syncPaths.shareId} IS NOT NULL THEN CONCAT_WS('/',\n ${SYNC_REPOSITORY.SHARES},\n CASE WHEN ${syncPaths.fileId} IS NULL THEN ${shares.alias}\n ELSE \n IF (${shareFile.id} IS NOT NULL,\n IF (${files.id} = ${shareFile.id}, NULL, REGEXP_REPLACE(${files.path}, ${filePathSQL(shareFile)}, ${shares.alias})),\n CONCAT_WS('/', ${shares.alias}, IF (${files.path} = '.', NULL, ${files.path}))\n )\n END,\n IF (${files.id} = ${shareFile.id}, ${shares.name}, ${files.name})\n )\n ELSE NULL\n END\n `.as('remotePath'),\n settings: syncPaths.settings\n })\n .from(syncPaths)\n .leftJoin(files, eq(files.id, syncPaths.fileId))\n .leftJoin(spaces, eq(spaces.id, syncPaths.spaceId))\n .leftJoin(spacesRoots, eq(spacesRoots.id, syncPaths.spaceRootId))\n .leftJoin(spaceRootFile, eq(spaceRootFile.id, spacesRoots.fileId))\n .leftJoin(shares, eq(shares.id, syncPaths.shareId))\n .leftJoin(shareFile, eq(shareFile.id, shares.fileId))\n .where(eq(syncPaths.clientId, clientId))\n }\n\n @CacheDecorator(900)\n async getPathSettings(clientId: string, pathId: number): Promise<SyncPathSettings> {\n const [path] = await this.db\n .select({\n settings: syncPaths.settings\n })\n .from(syncPaths)\n .where(and(eq(syncPaths.clientId, clientId), eq(syncPaths.id, pathId)))\n .limit(1)\n return path ? path.settings : null\n }\n\n async createPath(clientId: string, dbProps: SyncDBProps, settings: SyncPathSettings): Promise<SyncPath['id']> {\n return dbGetInsertedId(await this.db.insert(syncPaths).values({ clientId: clientId, settings: settings, ...dbProps } as SyncPath))\n }\n\n async deletePath(clientId: string, pathId: number): Promise<void> {\n dbCheckAffectedRows(await this.db.delete(syncPaths).where(and(eq(syncPaths.id, pathId), eq(syncPaths.clientId, clientId))), 1)\n }\n\n async updatePathSettings(clientId: string, pathId: number, settings: SyncPathSettings) {\n dbCheckAffectedRows(\n await this.db\n .update(syncPaths)\n .set({ settings: settings })\n .where(and(eq(syncPaths.id, pathId), eq(syncPaths.clientId, clientId))),\n 1\n )\n }\n\n clearCachePathSettings(clientId: string, pathId: number): void {\n this.cache.del(this.cache.genSlugKey(this.constructor.name, this.getPathSettings.name, clientId, pathId)).catch((e: Error) => console.error(e))\n }\n}\n"],"names":["SyncQueries","clientExistsForOwner","ownerId","clientId","client","db","select","id","syncClients","from","where","and","eq","limit","getOrCreateClient","info","ip","getClient","currentTimeStamp","tokenExpiration","token","crypto","randomUUID","dbCheckAffectedRows","update","set","convertHumanTimeToSeconds","CLIENT_TOKEN_EXPIRATION_TIME","insert","values","currentAccess","Date","currentIp","enabled","lastAccess","lastIp","createdAt","getClients","owner","isCurrentClient","sql","mapWith","Boolean","paths","concatDistinctObjectsInArray","syncPaths","settings","leftJoin","groupBy","orderBy","desc","deleteClient","delete","renewClientTokenAndExpiration","expiration","updateClientInfo","getPaths","shareFile","alias","files","spaceRootFile","remotePath","SYNC_REPOSITORY","PERSONAL","filePathSQL","spaceId","SPACES","spaces","spaceRootId","path","name","fileId","spacesRoots","externalPath","shareId","SHARES","shares","as","getPathSettings","pathId","createPath","dbProps","dbGetInsertedId","deletePath","updatePathSettings","clearCachePathSettings","cache","del","genSlugKey","catch","e","console","error"],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "AdminUsersController", {
|
|
|
14
14
|
});
|
|
15
15
|
const _common = require("@nestjs/common");
|
|
16
16
|
const _fastify = require("fastify");
|
|
17
|
+
const _authtwofaguard = require("../../authentication/guards/auth-two-fa-guard");
|
|
17
18
|
const _group = require("./constants/group");
|
|
18
19
|
const _routes = require("./constants/routes");
|
|
19
20
|
const _user = require("./constants/user");
|
|
@@ -23,7 +24,6 @@ const _createorupdategroupdto = require("./dto/create-or-update-group.dto");
|
|
|
23
24
|
const _createorupdateuserdto = require("./dto/create-or-update-user.dto");
|
|
24
25
|
const _deleteuserdto = require("./dto/delete-user.dto");
|
|
25
26
|
const _searchmembersdto = require("./dto/search-members.dto");
|
|
26
|
-
const _userpassworddto = require("./dto/user-password.dto");
|
|
27
27
|
const _rolesguard = require("./guards/roles.guard");
|
|
28
28
|
const _usermodel = require("./models/user.model");
|
|
29
29
|
const _adminusersmanagerservice = require("./services/admin-users-manager.service");
|
|
@@ -43,73 +43,79 @@ function _ts_param(paramIndex, decorator) {
|
|
|
43
43
|
}
|
|
44
44
|
let AdminUsersController = class AdminUsersController {
|
|
45
45
|
listUsers() {
|
|
46
|
-
return this.
|
|
46
|
+
return this.adminUsersManager.listUsers();
|
|
47
47
|
}
|
|
48
48
|
getUser(userId) {
|
|
49
|
-
return this.
|
|
49
|
+
return this.adminUsersManager.getUser(userId);
|
|
50
50
|
}
|
|
51
51
|
createUser(createUserDto) {
|
|
52
|
-
return this.
|
|
52
|
+
return this.adminUsersManager.createUserOrGuest(createUserDto, typeof createUserDto?.role !== 'undefined' ? createUserDto.role : _user.USER_ROLE.USER, true);
|
|
53
53
|
}
|
|
54
54
|
updateUser(userId, updateUserDto) {
|
|
55
|
-
return this.
|
|
55
|
+
return this.adminUsersManager.updateUserOrGuest(userId, updateUserDto);
|
|
56
56
|
}
|
|
57
|
-
deleteUser(
|
|
58
|
-
return this.
|
|
57
|
+
deleteUser(userId, deleteUserDto) {
|
|
58
|
+
return this.adminUsersManager.deleteUserOrGuestFromAdmin(userId, {
|
|
59
|
+
...deleteUserDto,
|
|
60
|
+
isGuest: false
|
|
61
|
+
});
|
|
59
62
|
}
|
|
60
63
|
listGuests() {
|
|
61
|
-
return this.
|
|
64
|
+
return this.adminUsersManager.listGuests();
|
|
62
65
|
}
|
|
63
66
|
getGuest(guestId) {
|
|
64
|
-
return this.
|
|
67
|
+
return this.adminUsersManager.getGuest(guestId);
|
|
65
68
|
}
|
|
66
69
|
createGuest(user, createGuestDto) {
|
|
67
|
-
return this.
|
|
70
|
+
return this.adminUsersManager.createGuest(user, createGuestDto);
|
|
68
71
|
}
|
|
69
72
|
updateGuest(guestId, updateGuestDto) {
|
|
70
|
-
return this.
|
|
73
|
+
return this.adminUsersManager.updateGuest(guestId, updateGuestDto);
|
|
71
74
|
}
|
|
72
|
-
deleteGuest(guestId) {
|
|
73
|
-
return this.
|
|
75
|
+
deleteGuest(guestId, deleteUserDto) {
|
|
76
|
+
return this.adminUsersManager.deleteUserOrGuestFromAdmin(guestId, {
|
|
77
|
+
...deleteUserDto,
|
|
78
|
+
isGuest: true
|
|
79
|
+
});
|
|
74
80
|
}
|
|
75
81
|
searchMembers(searchMembersDto) {
|
|
76
|
-
return this.
|
|
82
|
+
return this.adminUsersManager.searchMembers(searchMembersDto);
|
|
77
83
|
}
|
|
78
84
|
browseGroups(name) {
|
|
79
|
-
return this.
|
|
85
|
+
return this.adminUsersManager.browseGroups(name);
|
|
80
86
|
}
|
|
81
87
|
browsePersonalGroups(name) {
|
|
82
|
-
return this.
|
|
88
|
+
return this.adminUsersManager.browseGroups(name, _group.GROUP_TYPE.PERSONAL);
|
|
83
89
|
}
|
|
84
90
|
getGroup(groupId) {
|
|
85
|
-
return this.
|
|
91
|
+
return this.adminUsersManager.getGroup(groupId);
|
|
86
92
|
}
|
|
87
93
|
createGroup(createGroupDto) {
|
|
88
|
-
return this.
|
|
94
|
+
return this.adminUsersManager.createGroup(createGroupDto);
|
|
89
95
|
}
|
|
90
96
|
updateGroup(groupId, updateGroupDto) {
|
|
91
|
-
return this.
|
|
97
|
+
return this.adminUsersManager.updateGroup(groupId, updateGroupDto);
|
|
92
98
|
}
|
|
93
99
|
deleteGroup(groupId) {
|
|
94
|
-
return this.
|
|
100
|
+
return this.adminUsersManager.deleteGroup(groupId);
|
|
95
101
|
}
|
|
96
102
|
addUsersToGroup(groupId, userIds) {
|
|
97
|
-
return this.
|
|
103
|
+
return this.adminUsersManager.addUsersToGroup(groupId, userIds);
|
|
98
104
|
}
|
|
99
105
|
removeUserFromGroup(groupId, userId) {
|
|
100
|
-
return this.
|
|
106
|
+
return this.adminUsersManager.removeUserFromGroup(groupId, userId);
|
|
101
107
|
}
|
|
102
108
|
updateUserFromGroup(groupId, userId, updateUserFromGroupDto) {
|
|
103
|
-
return this.
|
|
109
|
+
return this.adminUsersManager.updateUserFromGroup(groupId, userId, updateUserFromGroupDto);
|
|
104
110
|
}
|
|
105
|
-
impersonateUser(admin, userId,
|
|
106
|
-
return this.
|
|
111
|
+
impersonateUser(admin, userId, res) {
|
|
112
|
+
return this.adminUsersManager.impersonateUser(admin, userId, res);
|
|
107
113
|
}
|
|
108
114
|
logOutImpersonateUser(user, res) {
|
|
109
|
-
return this.
|
|
115
|
+
return this.adminUsersManager.logoutImpersonateUser(user, res);
|
|
110
116
|
}
|
|
111
|
-
constructor(
|
|
112
|
-
this.
|
|
117
|
+
constructor(adminUsersManager){
|
|
118
|
+
this.adminUsersManager = adminUsersManager;
|
|
113
119
|
}
|
|
114
120
|
};
|
|
115
121
|
_ts_decorate([
|
|
@@ -129,6 +135,7 @@ _ts_decorate([
|
|
|
129
135
|
], AdminUsersController.prototype, "getUser", null);
|
|
130
136
|
_ts_decorate([
|
|
131
137
|
(0, _common.Post)(_routes.ADMIN_USERS_ROUTE.USERS),
|
|
138
|
+
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
|
|
132
139
|
_ts_param(0, (0, _common.Body)()),
|
|
133
140
|
_ts_metadata("design:type", Function),
|
|
134
141
|
_ts_metadata("design:paramtypes", [
|
|
@@ -138,6 +145,7 @@ _ts_decorate([
|
|
|
138
145
|
], AdminUsersController.prototype, "createUser", null);
|
|
139
146
|
_ts_decorate([
|
|
140
147
|
(0, _common.Put)(`${_routes.ADMIN_USERS_ROUTE.USERS}/:id`),
|
|
148
|
+
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
|
|
141
149
|
_ts_param(0, (0, _common.Param)('id', _common.ParseIntPipe)),
|
|
142
150
|
_ts_param(1, (0, _common.Body)()),
|
|
143
151
|
_ts_metadata("design:type", Function),
|
|
@@ -149,14 +157,13 @@ _ts_decorate([
|
|
|
149
157
|
], AdminUsersController.prototype, "updateUser", null);
|
|
150
158
|
_ts_decorate([
|
|
151
159
|
(0, _common.Delete)(`${_routes.ADMIN_USERS_ROUTE.USERS}/:id`),
|
|
152
|
-
|
|
153
|
-
_ts_param(
|
|
154
|
-
_ts_param(
|
|
160
|
+
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuard),
|
|
161
|
+
_ts_param(0, (0, _common.Param)('id', _common.ParseIntPipe)),
|
|
162
|
+
_ts_param(1, (0, _common.Body)()),
|
|
155
163
|
_ts_metadata("design:type", Function),
|
|
156
164
|
_ts_metadata("design:paramtypes", [
|
|
157
|
-
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
|
|
158
165
|
Number,
|
|
159
|
-
typeof _deleteuserdto.
|
|
166
|
+
typeof _deleteuserdto.DeleteUserDto === "undefined" ? Object : _deleteuserdto.DeleteUserDto
|
|
160
167
|
]),
|
|
161
168
|
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
|
|
162
169
|
], AdminUsersController.prototype, "deleteUser", null);
|
|
@@ -177,6 +184,7 @@ _ts_decorate([
|
|
|
177
184
|
], AdminUsersController.prototype, "getGuest", null);
|
|
178
185
|
_ts_decorate([
|
|
179
186
|
(0, _common.Post)(_routes.ADMIN_USERS_ROUTE.GUESTS),
|
|
187
|
+
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
|
|
180
188
|
_ts_param(0, (0, _userdecorator.GetUser)()),
|
|
181
189
|
_ts_param(1, (0, _common.Body)()),
|
|
182
190
|
_ts_metadata("design:type", Function),
|
|
@@ -188,6 +196,7 @@ _ts_decorate([
|
|
|
188
196
|
], AdminUsersController.prototype, "createGuest", null);
|
|
189
197
|
_ts_decorate([
|
|
190
198
|
(0, _common.Put)(`${_routes.ADMIN_USERS_ROUTE.GUESTS}/:id`),
|
|
199
|
+
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
|
|
191
200
|
_ts_param(0, (0, _common.Param)('id', _common.ParseIntPipe)),
|
|
192
201
|
_ts_param(1, (0, _common.Body)()),
|
|
193
202
|
_ts_metadata("design:type", Function),
|
|
@@ -199,10 +208,13 @@ _ts_decorate([
|
|
|
199
208
|
], AdminUsersController.prototype, "updateGuest", null);
|
|
200
209
|
_ts_decorate([
|
|
201
210
|
(0, _common.Delete)(`${_routes.ADMIN_USERS_ROUTE.GUESTS}/:id`),
|
|
211
|
+
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuard),
|
|
202
212
|
_ts_param(0, (0, _common.Param)('id', _common.ParseIntPipe)),
|
|
213
|
+
_ts_param(1, (0, _common.Body)()),
|
|
203
214
|
_ts_metadata("design:type", Function),
|
|
204
215
|
_ts_metadata("design:paramtypes", [
|
|
205
|
-
Number
|
|
216
|
+
Number,
|
|
217
|
+
typeof _deleteuserdto.DeleteUserDto === "undefined" ? Object : _deleteuserdto.DeleteUserDto
|
|
206
218
|
]),
|
|
207
219
|
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
|
|
208
220
|
], AdminUsersController.prototype, "deleteGuest", null);
|
|
@@ -308,17 +320,16 @@ _ts_decorate([
|
|
|
308
320
|
], AdminUsersController.prototype, "updateUserFromGroup", null);
|
|
309
321
|
_ts_decorate([
|
|
310
322
|
(0, _common.Post)(`${_routes.ADMIN_USERS_ROUTE.IMPERSONATE}/:id`),
|
|
323
|
+
(0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuard),
|
|
311
324
|
_ts_param(0, (0, _userdecorator.GetUser)()),
|
|
312
325
|
_ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
|
|
313
|
-
_ts_param(2, (0, _common.
|
|
314
|
-
_ts_param(3, (0, _common.Res)({
|
|
326
|
+
_ts_param(2, (0, _common.Res)({
|
|
315
327
|
passthrough: true
|
|
316
328
|
})),
|
|
317
329
|
_ts_metadata("design:type", Function),
|
|
318
330
|
_ts_metadata("design:paramtypes", [
|
|
319
331
|
typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
|
|
320
332
|
Number,
|
|
321
|
-
typeof _userpassworddto.UserPasswordDto === "undefined" ? Object : _userpassworddto.UserPasswordDto,
|
|
322
333
|
typeof _fastify.FastifyReply === "undefined" ? Object : _fastify.FastifyReply
|
|
323
334
|
]),
|
|
324
335
|
_ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../backend/src/applications/users/admin-users.controller.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 { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, Put, Res, Search, UseGuards } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { GROUP_TYPE } from './constants/group'\nimport { ADMIN_USERS_ROUTE } from './constants/routes'\nimport { USER_ROLE } from './constants/user'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { CreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { AdminDeleteUserDto } from './dto/delete-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserPasswordDto } from './dto/user-password.dto'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { AdminGroup } from './interfaces/admin-group.interface'\nimport { AdminUser } from './interfaces/admin-user.interface'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserModel } from './models/user.model'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\n\n@Controller(ADMIN_USERS_ROUTE.BASE)\n@UserHaveRole(USER_ROLE.ADMINISTRATOR)\n@UseGuards(UserRolesGuard)\nexport class AdminUsersController {\n constructor(private readonly usersAdminManager: AdminUsersManager) {}\n\n @Get(`${ADMIN_USERS_ROUTE.USERS}/${ADMIN_USERS_ROUTE.LIST}`)\n listUsers(): Promise<AdminUser[]> {\n return this.usersAdminManager.listUsers()\n }\n\n @Get(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n getUser(@Param('id', ParseIntPipe) userId: number): Promise<AdminUser> {\n return this.usersAdminManager.getUser(userId)\n }\n\n @Post(ADMIN_USERS_ROUTE.USERS)\n createUser(@Body() createUserDto: CreateUserDto): Promise<AdminUser> {\n return this.usersAdminManager.createUserOrGuest(\n createUserDto,\n typeof createUserDto?.role !== 'undefined' ? createUserDto.role : USER_ROLE.USER,\n true\n )\n }\n\n @Put(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n updateUser(@Param('id', ParseIntPipe) userId: number, @Body() updateUserDto: UpdateUserDto): Promise<AdminUser> {\n return this.usersAdminManager.updateUserOrGuest(userId, updateUserDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n deleteUser(@GetUser() admin: UserModel, @Param('id', ParseIntPipe) userId: number, @Body() adminDeleteUserDto: AdminDeleteUserDto): Promise<void> {\n return this.usersAdminManager.deleteUserFromAdmin(admin, userId, adminDeleteUserDto)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GUESTS}/${ADMIN_USERS_ROUTE.LIST}`)\n listGuests(): Promise<AdminUser[]> {\n return this.usersAdminManager.listGuests()\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n getGuest(@Param('id', ParseIntPipe) guestId: number): Promise<AdminUser> {\n return this.usersAdminManager.getGuest(guestId)\n }\n\n @Post(ADMIN_USERS_ROUTE.GUESTS)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.usersAdminManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n updateGuest(@Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.usersAdminManager.updateGuest(guestId, updateGuestDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n deleteGuest(@Param('id', ParseIntPipe) guestId: number): Promise<void> {\n return this.usersAdminManager.deleteGuest(guestId)\n }\n\n @Search(ADMIN_USERS_ROUTE.MEMBERS)\n searchMembers(@Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.usersAdminManager.searchMembers(searchMembersDto)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GROUPS}/${ADMIN_USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersAdminManager.browseGroups(name)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.PGROUPS}/${ADMIN_USERS_ROUTE.BROWSE}/:name?`)\n browsePersonalGroups(@Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersAdminManager.browseGroups(name, GROUP_TYPE.PERSONAL)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n getGroup(@Param('id', ParseIntPipe) groupId: number): Promise<AdminGroup> {\n return this.usersAdminManager.getGroup(groupId)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.GROUPS}`)\n createGroup(@Body() createGroupDto: CreateOrUpdateGroupDto): Promise<AdminGroup> {\n return this.usersAdminManager.createGroup(createGroupDto)\n }\n\n @Put(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n updateGroup(@Param('id', ParseIntPipe) groupId: number, @Body() updateGroupDto: CreateOrUpdateGroupDto): Promise<AdminGroup> {\n return this.usersAdminManager.updateGroup(groupId, updateGroupDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n deleteGroup(@Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersAdminManager.deleteGroup(groupId)\n }\n\n @Patch(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}`)\n addUsersToGroup(@Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.usersAdminManager.addUsersToGroup(groupId, userIds)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(@Param('groupId', ParseIntPipe) groupId: number, @Param('userId', ParseIntPipe) userId: number): Promise<void> {\n return this.usersAdminManager.removeUserFromGroup(groupId, userId)\n }\n\n @Patch(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}/:userId`)\n updateUserFromGroup(\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.usersAdminManager.updateUserFromGroup(groupId, userId, updateUserFromGroupDto)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.IMPERSONATE}/:id`)\n impersonateUser(\n @GetUser() admin: UserModel,\n @Param('id', ParseIntPipe) userId: number,\n @Body() adminPasswordDto: UserPasswordDto,\n @Res({ passthrough: true }) res: FastifyReply\n ): Promise<LoginResponseDto> {\n return this.usersAdminManager.impersonateUser(admin, userId, adminPasswordDto, res)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.IMPERSONATE}/${ADMIN_USERS_ROUTE.LOGOUT}`)\n @UserHaveRole(USER_ROLE.GUEST)\n logOutImpersonateUser(@GetUser() user: UserModel, @Res({ passthrough: true }) res: FastifyReply): Promise<LoginResponseDto> {\n return this.usersAdminManager.logoutImpersonateUser(user, res)\n }\n}\n"],"names":["AdminUsersController","listUsers","usersAdminManager","getUser","userId","createUser","createUserDto","createUserOrGuest","role","USER_ROLE","USER","updateUser","updateUserDto","updateUserOrGuest","deleteUser","admin","adminDeleteUserDto","deleteUserFromAdmin","listGuests","getGuest","guestId","createGuest","user","createGuestDto","updateGuest","updateGuestDto","deleteGuest","searchMembers","searchMembersDto","browseGroups","name","browsePersonalGroups","GROUP_TYPE","PERSONAL","getGroup","groupId","createGroup","createGroupDto","updateGroup","updateGroupDto","deleteGroup","addUsersToGroup","userIds","removeUserFromGroup","updateUserFromGroup","updateUserFromGroupDto","impersonateUser","adminPasswordDto","res","logOutImpersonateUser","logoutImpersonateUser","ADMIN_USERS_ROUTE","USERS","LIST","GUESTS","MEMBERS","GROUPS","BROWSE","PGROUPS","IMPERSONATE","passthrough","LOGOUT","GUEST","BASE","ADMINISTRATOR"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/users/admin-users.controller.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 { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, Put, Res, Search, UseGuards } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { AuthTwoFaGuard, AuthTwoFaGuardWithoutPassword } from '../../authentication/guards/auth-two-fa-guard'\nimport { GROUP_TYPE } from './constants/group'\nimport { ADMIN_USERS_ROUTE } from './constants/routes'\nimport { USER_ROLE } from './constants/user'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { CreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { DeleteUserDto } from './dto/delete-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { AdminGroup } from './interfaces/admin-group.interface'\nimport { AdminUser } from './interfaces/admin-user.interface'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserModel } from './models/user.model'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\n\n@Controller(ADMIN_USERS_ROUTE.BASE)\n@UserHaveRole(USER_ROLE.ADMINISTRATOR)\n@UseGuards(UserRolesGuard)\nexport class AdminUsersController {\n constructor(private readonly adminUsersManager: AdminUsersManager) {}\n\n @Get(`${ADMIN_USERS_ROUTE.USERS}/${ADMIN_USERS_ROUTE.LIST}`)\n listUsers(): Promise<AdminUser[]> {\n return this.adminUsersManager.listUsers()\n }\n\n @Get(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n getUser(@Param('id', ParseIntPipe) userId: number): Promise<AdminUser> {\n return this.adminUsersManager.getUser(userId)\n }\n\n @Post(ADMIN_USERS_ROUTE.USERS)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n createUser(@Body() createUserDto: CreateUserDto): Promise<AdminUser> {\n return this.adminUsersManager.createUserOrGuest(\n createUserDto,\n typeof createUserDto?.role !== 'undefined' ? createUserDto.role : USER_ROLE.USER,\n true\n )\n }\n\n @Put(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updateUser(@Param('id', ParseIntPipe) userId: number, @Body() updateUserDto: UpdateUserDto): Promise<AdminUser> {\n return this.adminUsersManager.updateUserOrGuest(userId, updateUserDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n @UseGuards(AuthTwoFaGuard)\n deleteUser(@Param('id', ParseIntPipe) userId: number, @Body() deleteUserDto: DeleteUserDto): Promise<void> {\n return this.adminUsersManager.deleteUserOrGuestFromAdmin(userId, { ...deleteUserDto, isGuest: false })\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GUESTS}/${ADMIN_USERS_ROUTE.LIST}`)\n listGuests(): Promise<AdminUser[]> {\n return this.adminUsersManager.listGuests()\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n getGuest(@Param('id', ParseIntPipe) guestId: number): Promise<AdminUser> {\n return this.adminUsersManager.getGuest(guestId)\n }\n\n @Post(ADMIN_USERS_ROUTE.GUESTS)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.adminUsersManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updateGuest(@Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.adminUsersManager.updateGuest(guestId, updateGuestDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n @UseGuards(AuthTwoFaGuard)\n deleteGuest(@Param('id', ParseIntPipe) guestId: number, @Body() deleteUserDto: DeleteUserDto): Promise<void> {\n return this.adminUsersManager.deleteUserOrGuestFromAdmin(guestId, { ...deleteUserDto, isGuest: true })\n }\n\n @Search(ADMIN_USERS_ROUTE.MEMBERS)\n searchMembers(@Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.adminUsersManager.searchMembers(searchMembersDto)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GROUPS}/${ADMIN_USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@Param('name') name?: string): Promise<GroupBrowse> {\n return this.adminUsersManager.browseGroups(name)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.PGROUPS}/${ADMIN_USERS_ROUTE.BROWSE}/:name?`)\n browsePersonalGroups(@Param('name') name?: string): Promise<GroupBrowse> {\n return this.adminUsersManager.browseGroups(name, GROUP_TYPE.PERSONAL)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n getGroup(@Param('id', ParseIntPipe) groupId: number): Promise<AdminGroup> {\n return this.adminUsersManager.getGroup(groupId)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.GROUPS}`)\n createGroup(@Body() createGroupDto: CreateOrUpdateGroupDto): Promise<AdminGroup> {\n return this.adminUsersManager.createGroup(createGroupDto)\n }\n\n @Put(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n updateGroup(@Param('id', ParseIntPipe) groupId: number, @Body() updateGroupDto: CreateOrUpdateGroupDto): Promise<AdminGroup> {\n return this.adminUsersManager.updateGroup(groupId, updateGroupDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n deleteGroup(@Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.adminUsersManager.deleteGroup(groupId)\n }\n\n @Patch(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}`)\n addUsersToGroup(@Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.adminUsersManager.addUsersToGroup(groupId, userIds)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(@Param('groupId', ParseIntPipe) groupId: number, @Param('userId', ParseIntPipe) userId: number): Promise<void> {\n return this.adminUsersManager.removeUserFromGroup(groupId, userId)\n }\n\n @Patch(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}/:userId`)\n updateUserFromGroup(\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.adminUsersManager.updateUserFromGroup(groupId, userId, updateUserFromGroupDto)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.IMPERSONATE}/:id`)\n @UseGuards(AuthTwoFaGuard)\n impersonateUser(\n @GetUser() admin: UserModel,\n @Param('id', ParseIntPipe) userId: number,\n @Res({ passthrough: true }) res: FastifyReply\n ): Promise<LoginResponseDto> {\n return this.adminUsersManager.impersonateUser(admin, userId, res)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.IMPERSONATE}/${ADMIN_USERS_ROUTE.LOGOUT}`)\n @UserHaveRole(USER_ROLE.GUEST)\n logOutImpersonateUser(@GetUser() user: UserModel, @Res({ passthrough: true }) res: FastifyReply): Promise<LoginResponseDto> {\n return this.adminUsersManager.logoutImpersonateUser(user, res)\n }\n}\n"],"names":["AdminUsersController","listUsers","adminUsersManager","getUser","userId","createUser","createUserDto","createUserOrGuest","role","USER_ROLE","USER","updateUser","updateUserDto","updateUserOrGuest","deleteUser","deleteUserDto","deleteUserOrGuestFromAdmin","isGuest","listGuests","getGuest","guestId","createGuest","user","createGuestDto","updateGuest","updateGuestDto","deleteGuest","searchMembers","searchMembersDto","browseGroups","name","browsePersonalGroups","GROUP_TYPE","PERSONAL","getGroup","groupId","createGroup","createGroupDto","updateGroup","updateGroupDto","deleteGroup","addUsersToGroup","userIds","removeUserFromGroup","updateUserFromGroup","updateUserFromGroupDto","impersonateUser","admin","res","logOutImpersonateUser","logoutImpersonateUser","ADMIN_USERS_ROUTE","USERS","LIST","GUESTS","MEMBERS","GROUPS","BROWSE","PGROUPS","IMPERSONATE","passthrough","LOGOUT","GUEST","BASE","ADMINISTRATOR"],"mappings":"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"}
|
|
@@ -9,10 +9,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
const _config = require("@nestjs/config");
|
|
10
10
|
const _jwt = require("@nestjs/jwt");
|
|
11
11
|
const _testing = require("@nestjs/testing");
|
|
12
|
+
const _authtwofaguard = require("../../authentication/guards/auth-two-fa-guard");
|
|
12
13
|
const _authmanagerservice = require("../../authentication/services/auth-manager.service");
|
|
14
|
+
const _authmethodtwofaservice = require("../../authentication/services/auth-methods/auth-method-two-fa.service");
|
|
13
15
|
const _configenvironment = require("../../configuration/config.environment");
|
|
14
16
|
const _cacheservice = require("../../infrastructure/cache/services/cache.service");
|
|
15
17
|
const _constants = require("../../infrastructure/database/constants");
|
|
18
|
+
const _notificationsmanagerservice = require("../notifications/services/notifications-manager.service");
|
|
16
19
|
const _adminuserscontroller = require("./admin-users.controller");
|
|
17
20
|
const _adminusersmanagerservice = require("./services/admin-users-manager.service");
|
|
18
21
|
const _adminusersqueriesservice = require("./services/admin-users-queries.service");
|
|
@@ -42,6 +45,18 @@ describe(_adminuserscontroller.AdminUsersController.name, ()=>{
|
|
|
42
45
|
provide: _cacheservice.Cache,
|
|
43
46
|
useValue: {}
|
|
44
47
|
},
|
|
48
|
+
{
|
|
49
|
+
provide: _authmethodtwofaservice.AuthMethod2FA,
|
|
50
|
+
useValue: {}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
provide: _authtwofaguard.AuthTwoFaGuard,
|
|
54
|
+
useValue: {}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
provide: _notificationsmanagerservice.NotificationsManager,
|
|
58
|
+
useValue: {}
|
|
59
|
+
},
|
|
45
60
|
_jwt.JwtService,
|
|
46
61
|
_authmanagerservice.AuthManager,
|
|
47
62
|
_adminusersmanagerservice.AdminUsersManager,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../backend/src/applications/users/admin-users.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 { ConfigModule } from '@nestjs/config'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { AuthManager } from '../../authentication/services/auth-manager.service'\nimport { exportConfiguration } from '../../configuration/config.environment'\nimport { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../infrastructure/database/constants'\nimport { AdminUsersController } from './admin-users.controller'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\nimport { AdminUsersQueries } from './services/admin-users-queries.service'\nimport { UsersManager } from './services/users-manager.service'\nimport { UsersQueries } from './services/users-queries.service'\n\ndescribe(AdminUsersController.name, () => {\n let controller: AdminUsersController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [await ConfigModule.forRoot({ load: [exportConfiguration], isGlobal: true })],\n controllers: [AdminUsersController],\n providers: [\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n {\n provide: Cache,\n useValue: {}\n },\n JwtService,\n AuthManager,\n AdminUsersManager,\n AdminUsersQueries,\n UsersManager,\n UsersQueries\n ]\n }).compile()\n\n controller = module.get<AdminUsersController>(AdminUsersController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","AdminUsersController","name","controller","beforeAll","module","Test","createTestingModule","imports","ConfigModule","forRoot","load","exportConfiguration","isGlobal","controllers","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","JwtService","AuthManager","AdminUsersManager","AdminUsersQueries","UsersManager","UsersQueries","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;wBAE4B;qBACF;yBACS;
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/users/admin-users.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 { ConfigModule } from '@nestjs/config'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { AuthTwoFaGuard } from '../../authentication/guards/auth-two-fa-guard'\nimport { AuthManager } from '../../authentication/services/auth-manager.service'\nimport { AuthMethod2FA } from '../../authentication/services/auth-methods/auth-method-two-fa.service'\nimport { exportConfiguration } from '../../configuration/config.environment'\nimport { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../infrastructure/database/constants'\nimport { NotificationsManager } from '../notifications/services/notifications-manager.service'\nimport { AdminUsersController } from './admin-users.controller'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\nimport { AdminUsersQueries } from './services/admin-users-queries.service'\nimport { UsersManager } from './services/users-manager.service'\nimport { UsersQueries } from './services/users-queries.service'\n\ndescribe(AdminUsersController.name, () => {\n let controller: AdminUsersController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [await ConfigModule.forRoot({ load: [exportConfiguration], isGlobal: true })],\n controllers: [AdminUsersController],\n providers: [\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n {\n provide: Cache,\n useValue: {}\n },\n { provide: AuthMethod2FA, useValue: {} },\n { provide: AuthTwoFaGuard, useValue: {} },\n { provide: NotificationsManager, useValue: {} },\n JwtService,\n AuthManager,\n AdminUsersManager,\n AdminUsersQueries,\n UsersManager,\n UsersQueries\n ]\n }).compile()\n\n controller = module.get<AdminUsersController>(AdminUsersController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","AdminUsersController","name","controller","beforeAll","module","Test","createTestingModule","imports","ConfigModule","forRoot","load","exportConfiguration","isGlobal","controllers","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","AuthMethod2FA","AuthTwoFaGuard","NotificationsManager","JwtService","AuthManager","AdminUsersManager","AdminUsersQueries","UsersManager","UsersQueries","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;wBAE4B;qBACF;yBACS;gCACL;oCACH;wCACE;mCACM;8BACd;2BACY;6CACG;sCACA;0CACH;0CACA;qCACL;qCACA;AAE7BA,SAASC,0CAAoB,CAACC,IAAI,EAAE;IAClC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,SAAS;gBAAC,MAAMC,oBAAY,CAACC,OAAO,CAAC;oBAAEC,MAAM;wBAACC,sCAAmB;qBAAC;oBAAEC,UAAU;gBAAK;aAAG;YACtFC,aAAa;gBAACb,0CAAoB;aAAC;YACnCc,WAAW;gBACT;oBAAEC,SAASC,4BAAiB;oBAAEC,UAAU,CAAC;gBAAE;gBAC3C;oBACEF,SAASG,mBAAK;oBACdD,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASI,qCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvC;oBAAEF,SAASK,8BAAc;oBAAEH,UAAU,CAAC;gBAAE;gBACxC;oBAAEF,SAASM,iDAAoB;oBAAEJ,UAAU,CAAC;gBAAE;gBAC9CK,eAAU;gBACVC,+BAAW;gBACXC,2CAAiB;gBACjBC,2CAAiB;gBACjBC,iCAAY;gBACZC,iCAAY;aACb;QACH,GAAGC,OAAO;QAEV1B,aAAaE,OAAOyB,GAAG,CAAuB7B,0CAAoB;IACpE;IAEA8B,GAAG,qBAAqB;QACtBC,OAAO7B,YAAY8B,WAAW;IAChC;AACF"}
|
|
@@ -55,6 +55,9 @@ _export(exports, {
|
|
|
55
55
|
get API_USERS_ME () {
|
|
56
56
|
return API_USERS_ME;
|
|
57
57
|
},
|
|
58
|
+
get API_USERS_MY_APP_PASSWORDS () {
|
|
59
|
+
return API_USERS_MY_APP_PASSWORDS;
|
|
60
|
+
},
|
|
58
61
|
get API_USERS_MY_AVATAR () {
|
|
59
62
|
return API_USERS_MY_AVATAR;
|
|
60
63
|
},
|
|
@@ -89,6 +92,7 @@ const USERS_ROUTE = {
|
|
|
89
92
|
ME: 'me',
|
|
90
93
|
LANGUAGE: 'language',
|
|
91
94
|
PASSWORD: 'password',
|
|
95
|
+
APP_PASSWORDS: 'app_passwords',
|
|
92
96
|
NOTIFICATION: 'notification',
|
|
93
97
|
AVATAR: 'avatar',
|
|
94
98
|
GROUPS: 'groups',
|
|
@@ -100,6 +104,7 @@ const USERS_ROUTE = {
|
|
|
100
104
|
const API_USERS_ME = `${USERS_ROUTE.BASE}/${USERS_ROUTE.ME}`;
|
|
101
105
|
const API_USERS_MY_LANGUAGE = `${API_USERS_ME}/${USERS_ROUTE.LANGUAGE}`;
|
|
102
106
|
const API_USERS_MY_PASSWORD = `${API_USERS_ME}/${USERS_ROUTE.PASSWORD}`;
|
|
107
|
+
const API_USERS_MY_APP_PASSWORDS = `${API_USERS_ME}/${USERS_ROUTE.APP_PASSWORDS}`;
|
|
103
108
|
const API_USERS_MY_NOTIFICATION = `${API_USERS_ME}/${USERS_ROUTE.NOTIFICATION}`;
|
|
104
109
|
const API_USERS_MY_AVATAR = `${API_USERS_ME}/${USERS_ROUTE.AVATAR}`;
|
|
105
110
|
const API_USERS_MY_GROUPS = `${API_USERS_ME}/${USERS_ROUTE.GROUPS}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/users/constants/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 { ADMIN_ROUTE } from '../../admin/constants/routes'\n\nexport const USERS_ROUTE = {\n BASE: '/api/users',\n ME: 'me',\n LANGUAGE: 'language',\n PASSWORD: 'password',\n NOTIFICATION: 'notification',\n AVATAR: 'avatar',\n GROUPS: 'groups',\n USERS: 'users',\n GUESTS: 'guests',\n BROWSE: 'browse',\n GROUPS_LEAVE: 'leave'\n} as const\n\nexport const API_USERS_ME = `${USERS_ROUTE.BASE}/${USERS_ROUTE.ME}`\nexport const API_USERS_MY_LANGUAGE = `${API_USERS_ME}/${USERS_ROUTE.LANGUAGE}`\nexport const API_USERS_MY_PASSWORD = `${API_USERS_ME}/${USERS_ROUTE.PASSWORD}`\nexport const API_USERS_MY_NOTIFICATION = `${API_USERS_ME}/${USERS_ROUTE.NOTIFICATION}`\nexport const API_USERS_MY_AVATAR = `${API_USERS_ME}/${USERS_ROUTE.AVATAR}`\nexport const API_USERS_MY_GROUPS = `${API_USERS_ME}/${USERS_ROUTE.GROUPS}`\nexport const API_USERS_MY_GROUPS_BROWSE = `${API_USERS_MY_GROUPS}/${USERS_ROUTE.BROWSE}`\nexport const API_USERS_MY_GROUPS_LEAVE = `${API_USERS_MY_GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}`\nexport const API_USERS_MY_GUESTS = `${API_USERS_ME}/${USERS_ROUTE.GUESTS}`\nexport const API_USERS_AVATAR = `${USERS_ROUTE.BASE}/${USERS_ROUTE.AVATAR}`\n\nexport const ADMIN_USERS_ROUTE = {\n BASE: ADMIN_ROUTE.BASE,\n LIST: 'list',\n USERS: 'users',\n GUESTS: 'guests',\n GROUPS: 'groups',\n PGROUPS: 'personal_groups',\n MEMBERS: 'members',\n IMPERSONATE: 'impersonate',\n LOGOUT: 'logout',\n BROWSE: 'browse'\n} as const\nexport const API_ADMIN_USERS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.USERS}`\nexport const API_ADMIN_USERS_LIST = `${API_ADMIN_USERS}/${ADMIN_USERS_ROUTE.LIST}`\nexport const API_ADMIN_GUESTS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.GUESTS}`\nexport const API_ADMIN_GUESTS_LIST = `${API_ADMIN_GUESTS}/${ADMIN_USERS_ROUTE.LIST}`\nexport const API_ADMIN_GROUPS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.GROUPS}`\nexport const API_ADMIN_PGROUPS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.PGROUPS}`\nexport const API_ADMIN_GROUPS_BROWSE = `${API_ADMIN_GROUPS}/${ADMIN_USERS_ROUTE.BROWSE}`\nexport const API_ADMIN_PERSONAL_GROUPS_BROWSE = `${API_ADMIN_PGROUPS}/${ADMIN_USERS_ROUTE.BROWSE}`\nexport const API_ADMIN_MEMBERS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.MEMBERS}`\nexport const API_ADMIN_IMPERSONATE = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.IMPERSONATE}`\nexport const API_ADMIN_IMPERSONATE_LOGOUT = `${API_ADMIN_IMPERSONATE}/${ADMIN_USERS_ROUTE.LOGOUT}`\n"],"names":["ADMIN_USERS_ROUTE","API_ADMIN_GROUPS","API_ADMIN_GROUPS_BROWSE","API_ADMIN_GUESTS","API_ADMIN_GUESTS_LIST","API_ADMIN_IMPERSONATE","API_ADMIN_IMPERSONATE_LOGOUT","API_ADMIN_MEMBERS","API_ADMIN_PERSONAL_GROUPS_BROWSE","API_ADMIN_PGROUPS","API_ADMIN_USERS","API_ADMIN_USERS_LIST","API_USERS_AVATAR","API_USERS_ME","API_USERS_MY_AVATAR","API_USERS_MY_GROUPS","API_USERS_MY_GROUPS_BROWSE","API_USERS_MY_GROUPS_LEAVE","API_USERS_MY_GUESTS","API_USERS_MY_LANGUAGE","API_USERS_MY_NOTIFICATION","API_USERS_MY_PASSWORD","USERS_ROUTE","BASE","ME","LANGUAGE","PASSWORD","NOTIFICATION","AVATAR","GROUPS","USERS","GUESTS","BROWSE","GROUPS_LEAVE","ADMIN_ROUTE","LIST","PGROUPS","MEMBERS","IMPERSONATE","LOGOUT"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/users/constants/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 { ADMIN_ROUTE } from '../../admin/constants/routes'\n\nexport const USERS_ROUTE = {\n BASE: '/api/users',\n ME: 'me',\n LANGUAGE: 'language',\n PASSWORD: 'password',\n APP_PASSWORDS: 'app_passwords',\n NOTIFICATION: 'notification',\n AVATAR: 'avatar',\n GROUPS: 'groups',\n USERS: 'users',\n GUESTS: 'guests',\n BROWSE: 'browse',\n GROUPS_LEAVE: 'leave'\n} as const\n\nexport const API_USERS_ME = `${USERS_ROUTE.BASE}/${USERS_ROUTE.ME}`\nexport const API_USERS_MY_LANGUAGE = `${API_USERS_ME}/${USERS_ROUTE.LANGUAGE}`\nexport const API_USERS_MY_PASSWORD = `${API_USERS_ME}/${USERS_ROUTE.PASSWORD}`\nexport const API_USERS_MY_APP_PASSWORDS = `${API_USERS_ME}/${USERS_ROUTE.APP_PASSWORDS}`\nexport const API_USERS_MY_NOTIFICATION = `${API_USERS_ME}/${USERS_ROUTE.NOTIFICATION}`\nexport const API_USERS_MY_AVATAR = `${API_USERS_ME}/${USERS_ROUTE.AVATAR}`\nexport const API_USERS_MY_GROUPS = `${API_USERS_ME}/${USERS_ROUTE.GROUPS}`\nexport const API_USERS_MY_GROUPS_BROWSE = `${API_USERS_MY_GROUPS}/${USERS_ROUTE.BROWSE}`\nexport const API_USERS_MY_GROUPS_LEAVE = `${API_USERS_MY_GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}`\nexport const API_USERS_MY_GUESTS = `${API_USERS_ME}/${USERS_ROUTE.GUESTS}`\nexport const API_USERS_AVATAR = `${USERS_ROUTE.BASE}/${USERS_ROUTE.AVATAR}`\n\nexport const ADMIN_USERS_ROUTE = {\n BASE: ADMIN_ROUTE.BASE,\n LIST: 'list',\n USERS: 'users',\n GUESTS: 'guests',\n GROUPS: 'groups',\n PGROUPS: 'personal_groups',\n MEMBERS: 'members',\n IMPERSONATE: 'impersonate',\n LOGOUT: 'logout',\n BROWSE: 'browse'\n} as const\nexport const API_ADMIN_USERS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.USERS}`\nexport const API_ADMIN_USERS_LIST = `${API_ADMIN_USERS}/${ADMIN_USERS_ROUTE.LIST}`\nexport const API_ADMIN_GUESTS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.GUESTS}`\nexport const API_ADMIN_GUESTS_LIST = `${API_ADMIN_GUESTS}/${ADMIN_USERS_ROUTE.LIST}`\nexport const API_ADMIN_GROUPS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.GROUPS}`\nexport const API_ADMIN_PGROUPS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.PGROUPS}`\nexport const API_ADMIN_GROUPS_BROWSE = `${API_ADMIN_GROUPS}/${ADMIN_USERS_ROUTE.BROWSE}`\nexport const API_ADMIN_PERSONAL_GROUPS_BROWSE = `${API_ADMIN_PGROUPS}/${ADMIN_USERS_ROUTE.BROWSE}`\nexport const API_ADMIN_MEMBERS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.MEMBERS}`\nexport const API_ADMIN_IMPERSONATE = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.IMPERSONATE}`\nexport const API_ADMIN_IMPERSONATE_LOGOUT = `${API_ADMIN_IMPERSONATE}/${ADMIN_USERS_ROUTE.LOGOUT}`\n"],"names":["ADMIN_USERS_ROUTE","API_ADMIN_GROUPS","API_ADMIN_GROUPS_BROWSE","API_ADMIN_GUESTS","API_ADMIN_GUESTS_LIST","API_ADMIN_IMPERSONATE","API_ADMIN_IMPERSONATE_LOGOUT","API_ADMIN_MEMBERS","API_ADMIN_PERSONAL_GROUPS_BROWSE","API_ADMIN_PGROUPS","API_ADMIN_USERS","API_ADMIN_USERS_LIST","API_USERS_AVATAR","API_USERS_ME","API_USERS_MY_APP_PASSWORDS","API_USERS_MY_AVATAR","API_USERS_MY_GROUPS","API_USERS_MY_GROUPS_BROWSE","API_USERS_MY_GROUPS_LEAVE","API_USERS_MY_GUESTS","API_USERS_MY_LANGUAGE","API_USERS_MY_NOTIFICATION","API_USERS_MY_PASSWORD","USERS_ROUTE","BASE","ME","LANGUAGE","PASSWORD","APP_PASSWORDS","NOTIFICATION","AVATAR","GROUPS","USERS","GUESTS","BROWSE","GROUPS_LEAVE","ADMIN_ROUTE","LIST","PGROUPS","MEMBERS","IMPERSONATE","LOGOUT"],"mappings":"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"}
|
|
@@ -51,6 +51,9 @@ _export(exports, {
|
|
|
51
51
|
},
|
|
52
52
|
get USER_ROLE () {
|
|
53
53
|
return USER_ROLE;
|
|
54
|
+
},
|
|
55
|
+
get USER_SECRET () {
|
|
56
|
+
return USER_SECRET;
|
|
54
57
|
}
|
|
55
58
|
});
|
|
56
59
|
const USER_PASSWORD_MIN_LENGTH = 8;
|
|
@@ -114,5 +117,10 @@ const USER_NOTIFICATION_TEXT = {
|
|
|
114
117
|
APPLICATION: 'application',
|
|
115
118
|
APPLICATION_EMAIL: 'application & email'
|
|
116
119
|
};
|
|
120
|
+
const USER_SECRET = {
|
|
121
|
+
TWO_FA_SECRET: 'twoFaSecret',
|
|
122
|
+
RECOVERY_CODES: 'recoveryCodes',
|
|
123
|
+
APP_PASSWORDS: 'appPasswords'
|
|
124
|
+
};
|
|
117
125
|
|
|
118
126
|
//# sourceMappingURL=user.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/users/constants/user.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\nexport const USER_PASSWORD_MIN_LENGTH = 8\nexport const USER_MAX_PASSWORD_ATTEMPTS = 10\nexport const USER_LOGIN_VALIDATION = /^[a-zA-Z0-9\\-\\\\._]{2,255}$/\n\nexport const USER_PATH = {\n TMP: 'tmp',\n TASKS: 'tasks'\n} as const\n\nexport enum USER_ROLE {\n ADMINISTRATOR,\n USER,\n GUEST,\n LINK\n}\n\nexport enum USER_GROUP_ROLE {\n MEMBER,\n MANAGER\n}\n\nexport const USER_PERMS_SEP = ','\n\nexport enum USER_PERMISSION {\n PERSONAL_SPACE = 'personal_space',\n SPACES = 'spaces_access',\n SPACES_ADMIN = 'spaces_admin',\n SHARES = 'shares_access',\n SHARES_ADMIN = 'shares_admin',\n GUESTS_ADMIN = 'guests_admin',\n PERSONAL_GROUPS_ADMIN = 'personal_groups_admin',\n DESKTOP_APP = 'desktop_app_access',\n DESKTOP_APP_SYNC = 'desktop_app_sync',\n WEBDAV = 'webdav_access'\n}\n\nexport enum GUEST_PERMISSION {\n SPACES = USER_PERMISSION.SPACES,\n SHARES = USER_PERMISSION.SHARES,\n WEBDAV = USER_PERMISSION.WEBDAV\n}\n\nexport enum USER_ONLINE_STATUS {\n AVAILABLE,\n BUSY,\n ABSENT,\n OFFLINE\n}\n\nexport const USER_ONLINE_STATUS_LIST = ['available', 'busy', 'absent', 'offline']\n\nexport enum USER_NOTIFICATION {\n APPLICATION,\n APPLICATION_EMAIL\n}\n\nexport const USER_NOTIFICATION_TEXT = {\n APPLICATION: 'application',\n APPLICATION_EMAIL: 'application & email'\n} as const\n"],"names":["GUEST_PERMISSION","USER_GROUP_ROLE","USER_LOGIN_VALIDATION","USER_MAX_PASSWORD_ATTEMPTS","USER_NOTIFICATION","USER_NOTIFICATION_TEXT","USER_ONLINE_STATUS","USER_ONLINE_STATUS_LIST","USER_PASSWORD_MIN_LENGTH","USER_PATH","USER_PERMISSION","USER_PERMS_SEP","USER_ROLE","TMP","TASKS","APPLICATION","APPLICATION_EMAIL"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsCWA;eAAAA;;QApBAC;eAAAA;;QAdCC;eAAAA;;QADAC;eAAAA;;QAkDDC;eAAAA;;QAKCC;eAAAA;;QAdDC;eAAAA;;QAOCC;eAAAA;;QAjDAC;eAAAA;;QAIAC;eAAAA;;QAmBDC;eAAAA;;QAFCC;eAAAA;;QAZDC;eAAAA;;;
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/users/constants/user.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\nexport const USER_PASSWORD_MIN_LENGTH = 8\nexport const USER_MAX_PASSWORD_ATTEMPTS = 10\nexport const USER_LOGIN_VALIDATION = /^[a-zA-Z0-9\\-\\\\._]{2,255}$/\n\nexport const USER_PATH = {\n TMP: 'tmp',\n TASKS: 'tasks'\n} as const\n\nexport enum USER_ROLE {\n ADMINISTRATOR,\n USER,\n GUEST,\n LINK\n}\n\nexport enum USER_GROUP_ROLE {\n MEMBER,\n MANAGER\n}\n\nexport const USER_PERMS_SEP = ','\n\nexport enum USER_PERMISSION {\n PERSONAL_SPACE = 'personal_space',\n SPACES = 'spaces_access',\n SPACES_ADMIN = 'spaces_admin',\n SHARES = 'shares_access',\n SHARES_ADMIN = 'shares_admin',\n GUESTS_ADMIN = 'guests_admin',\n PERSONAL_GROUPS_ADMIN = 'personal_groups_admin',\n DESKTOP_APP = 'desktop_app_access',\n DESKTOP_APP_SYNC = 'desktop_app_sync',\n WEBDAV = 'webdav_access'\n}\n\nexport enum GUEST_PERMISSION {\n SPACES = USER_PERMISSION.SPACES,\n SHARES = USER_PERMISSION.SHARES,\n WEBDAV = USER_PERMISSION.WEBDAV\n}\n\nexport enum USER_ONLINE_STATUS {\n AVAILABLE,\n BUSY,\n ABSENT,\n OFFLINE\n}\n\nexport const USER_ONLINE_STATUS_LIST = ['available', 'busy', 'absent', 'offline']\n\nexport enum USER_NOTIFICATION {\n APPLICATION,\n APPLICATION_EMAIL\n}\n\nexport const USER_NOTIFICATION_TEXT = {\n APPLICATION: 'application',\n APPLICATION_EMAIL: 'application & email'\n} as const\n\nexport const USER_SECRET = {\n TWO_FA_SECRET: 'twoFaSecret',\n RECOVERY_CODES: 'recoveryCodes',\n APP_PASSWORDS: 'appPasswords'\n} as const\n"],"names":["GUEST_PERMISSION","USER_GROUP_ROLE","USER_LOGIN_VALIDATION","USER_MAX_PASSWORD_ATTEMPTS","USER_NOTIFICATION","USER_NOTIFICATION_TEXT","USER_ONLINE_STATUS","USER_ONLINE_STATUS_LIST","USER_PASSWORD_MIN_LENGTH","USER_PATH","USER_PERMISSION","USER_PERMS_SEP","USER_ROLE","USER_SECRET","TMP","TASKS","APPLICATION","APPLICATION_EMAIL","TWO_FA_SECRET","RECOVERY_CODES","APP_PASSWORDS"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsCWA;eAAAA;;QApBAC;eAAAA;;QAdCC;eAAAA;;QADAC;eAAAA;;QAkDDC;eAAAA;;QAKCC;eAAAA;;QAdDC;eAAAA;;QAOCC;eAAAA;;QAjDAC;eAAAA;;QAIAC;eAAAA;;QAmBDC;eAAAA;;QAFCC;eAAAA;;QAZDC;eAAAA;;QAoDCC;eAAAA;;;AA7DN,MAAML,2BAA2B;AACjC,MAAML,6BAA6B;AACnC,MAAMD,wBAAwB;AAE9B,MAAMO,YAAY;IACvBK,KAAK;IACLC,OAAO;AACT;AAEO,IAAA,AAAKH,mCAAAA;;;;;WAAAA;;AAOL,IAAA,AAAKX,yCAAAA;;;WAAAA;;AAKL,MAAMU,iBAAiB;AAEvB,IAAA,AAAKD,yCAAAA;;;;;;;;;;;WAAAA;;AAaL,IAAA,AAAKV,0CAAAA;;;;WAAAA;;AAML,IAAA,AAAKM,4CAAAA;;;;;WAAAA;;AAOL,MAAMC,0BAA0B;IAAC;IAAa;IAAQ;IAAU;CAAU;AAE1E,IAAA,AAAKH,2CAAAA;;;WAAAA;;AAKL,MAAMC,yBAAyB;IACpCW,aAAa;IACbC,mBAAmB;AACrB;AAEO,MAAMJ,cAAc;IACzBK,eAAe;IACfC,gBAAgB;IAChBC,eAAe;AACjB"}
|
|
@@ -6,17 +6,9 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", {
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
_export(exports, {
|
|
16
|
-
get AdminDeleteUserDto () {
|
|
17
|
-
return AdminDeleteUserDto;
|
|
18
|
-
},
|
|
19
|
-
get DeleteUserDto () {
|
|
9
|
+
Object.defineProperty(exports, "DeleteUserDto", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function() {
|
|
20
12
|
return DeleteUserDto;
|
|
21
13
|
}
|
|
22
14
|
});
|
|
@@ -31,24 +23,14 @@ function _ts_metadata(k, v) {
|
|
|
31
23
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
32
24
|
}
|
|
33
25
|
let DeleteUserDto = class DeleteUserDto {
|
|
34
|
-
constructor(){
|
|
35
|
-
this.isGuest = false;
|
|
36
|
-
}
|
|
37
26
|
};
|
|
38
27
|
_ts_decorate([
|
|
39
28
|
(0, _classvalidator.IsBoolean)(),
|
|
40
29
|
_ts_metadata("design:type", Boolean)
|
|
41
30
|
], DeleteUserDto.prototype, "deleteSpace", void 0);
|
|
42
31
|
_ts_decorate([
|
|
43
|
-
(0, _classvalidator.
|
|
44
|
-
(
|
|
32
|
+
(0, _classvalidator.IsBoolean)(),
|
|
33
|
+
_ts_metadata("design:type", Boolean)
|
|
45
34
|
], DeleteUserDto.prototype, "isGuest", void 0);
|
|
46
|
-
let AdminDeleteUserDto = class AdminDeleteUserDto extends DeleteUserDto {
|
|
47
|
-
};
|
|
48
|
-
_ts_decorate([
|
|
49
|
-
(0, _classvalidator.IsNotEmpty)(),
|
|
50
|
-
(0, _classvalidator.IsString)(),
|
|
51
|
-
_ts_metadata("design:type", String)
|
|
52
|
-
], AdminDeleteUserDto.prototype, "adminPassword", void 0);
|
|
53
35
|
|
|
54
36
|
//# sourceMappingURL=delete-user.dto.js.map
|