@sync-in/server 1.7.0 → 1.8.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 +173 -58
- package/environment/environment.dist.yaml +6 -3
- package/migrations/0003_giant_luckman.sql +6 -0
- package/migrations/meta/0003_snapshot.json +2463 -0
- package/migrations/meta/_journal.json +7 -0
- package/package.json +19 -17
- package/server/app.bootstrap.js +5 -2
- package/server/app.bootstrap.js.map +1 -1
- package/server/app.constants.js +0 -4
- package/server/app.constants.js.map +1 -1
- package/server/app.service.js +7 -6
- package/server/app.service.js.map +1 -1
- package/server/applications/files/constants/only-office.js +12 -0
- package/server/applications/files/constants/only-office.js.map +1 -1
- package/server/applications/files/files.config.js +5 -0
- package/server/applications/files/files.config.js.map +1 -1
- package/server/applications/files/files.controller.js +12 -4
- package/server/applications/files/files.controller.js.map +1 -1
- package/server/applications/files/files.controller.spec.js +18 -4
- package/server/applications/files/files.controller.spec.js.map +1 -1
- package/server/applications/files/services/files-content-manager.service.js +6 -6
- package/server/applications/files/services/files-content-manager.service.js.map +1 -1
- package/server/applications/files/services/files-manager.service.js +4 -4
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-methods.service.js +4 -7
- package/server/applications/files/services/files-methods.service.js.map +1 -1
- package/server/applications/files/services/files-only-office-manager.service.js +2 -2
- package/server/applications/files/services/files-only-office-manager.service.js.map +1 -1
- package/server/applications/files/services/files-parser.service.js +6 -3
- package/server/applications/files/services/files-parser.service.js.map +1 -1
- package/server/applications/files/services/files-scheduler.service.js +51 -3
- package/server/applications/files/services/files-scheduler.service.js.map +1 -1
- package/server/applications/files/services/files-search-manager.service.js +4 -0
- package/server/applications/files/services/files-search-manager.service.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/pdf.js +6 -8
- package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
- package/server/applications/notifications/i18n/de.js +56 -0
- package/server/applications/notifications/i18n/de.js.map +1 -0
- package/server/applications/notifications/i18n/es.js +52 -0
- package/server/applications/notifications/i18n/es.js.map +1 -0
- package/server/applications/notifications/i18n/hi.js +52 -0
- package/server/applications/notifications/i18n/hi.js.map +1 -0
- package/server/applications/notifications/i18n/index.js +73 -8
- package/server/applications/notifications/i18n/index.js.map +1 -1
- package/server/applications/notifications/i18n/it.js +52 -0
- package/server/applications/notifications/i18n/it.js.map +1 -0
- package/server/applications/notifications/i18n/ja.js +52 -0
- package/server/applications/notifications/i18n/ja.js.map +1 -0
- package/server/applications/notifications/i18n/ko.js +52 -0
- package/server/applications/notifications/i18n/ko.js.map +1 -0
- package/server/applications/notifications/i18n/pl.js +52 -0
- package/server/applications/notifications/i18n/pl.js.map +1 -0
- package/server/applications/notifications/i18n/pt.js +52 -0
- package/server/applications/notifications/i18n/pt.js.map +1 -0
- package/server/applications/notifications/i18n/pt_br.js +52 -0
- package/server/applications/notifications/i18n/pt_br.js.map +1 -0
- package/server/applications/notifications/i18n/ru.js +52 -0
- package/server/applications/notifications/i18n/ru.js.map +1 -0
- package/server/applications/notifications/i18n/tr.js +52 -0
- package/server/applications/notifications/i18n/tr.js.map +1 -0
- package/server/applications/notifications/i18n/zh.js +52 -0
- package/server/applications/notifications/i18n/zh.js.map +1 -0
- package/server/applications/notifications/mails/models.js +6 -7
- package/server/applications/notifications/mails/models.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
- package/server/applications/shares/dto/create-or-update-share.dto.js +11 -0
- package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
- package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
- package/server/applications/shares/schemas/share.interface.js.map +1 -1
- package/server/applications/shares/schemas/shares.schema.js +9 -0
- package/server/applications/shares/schemas/shares.schema.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +46 -17
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/shares/services/shares-queries.service.js +24 -5
- package/server/applications/shares/services/shares-queries.service.js.map +1 -1
- package/server/applications/spaces/constants/cache.js +4 -0
- package/server/applications/spaces/constants/cache.js.map +1 -1
- package/server/applications/spaces/dto/create-or-update-space.dto.js +5 -0
- package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.js +3 -3
- package/server/applications/spaces/guards/space.guard.js.map +1 -1
- package/server/applications/spaces/models/space-props.model.js.map +1 -1
- package/server/applications/spaces/models/space.model.js.map +1 -1
- package/server/applications/spaces/schemas/space.interface.js.map +1 -1
- package/server/applications/spaces/schemas/spaces.schema.js +1 -0
- package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.js +34 -31
- package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-queries.service.js +23 -7
- package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-scheduler.service.js +21 -20
- package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
- package/server/applications/spaces/spaces.controller.js +4 -2
- package/server/applications/spaces/spaces.controller.js.map +1 -1
- package/server/applications/spaces/utils/paths.js +14 -16
- package/server/applications/spaces/utils/paths.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.js +4 -3
- package/server/applications/sync/services/sync-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.js +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.spec.js +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
- package/server/applications/sync/sync.controller.js +2 -1
- package/server/applications/sync/sync.controller.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 +0 -16
- package/server/applications/users/constants/user.js.map +1 -1
- package/server/applications/users/dto/user-properties.dto.js +10 -0
- package/server/applications/users/dto/user-properties.dto.js.map +1 -1
- 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 +3 -2
- package/server/applications/users/schemas/users.schema.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.js +1 -0
- package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.spec.js +2 -1
- package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/users-manager.service.js +7 -2
- package/server/applications/users/services/users-manager.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.spec.js +1 -0
- package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/users-queries.service.js +18 -4
- package/server/applications/users/services/users-queries.service.js.map +1 -1
- package/server/applications/users/users.controller.js +15 -0
- package/server/applications/users/users.controller.js.map +1 -1
- package/server/applications/users/users.gateway.js +6 -0
- package/server/applications/users/users.gateway.js.map +1 -1
- package/server/applications/users/utils/test.js +2 -2
- package/server/applications/users/utils/test.js.map +1 -1
- package/server/applications/webdav/constants/routes.js +2 -2
- package/server/applications/webdav/constants/routes.js.map +1 -1
- package/server/applications/webdav/constants/webdav.js +2 -2
- package/server/applications/webdav/constants/webdav.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.js +2 -2
- package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.spec.js +2 -2
- package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.js +3 -2
- package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
- package/server/applications/webdav/utils/webdav.js +1 -2
- package/server/applications/webdav/utils/webdav.js.map +1 -1
- package/server/authentication/auth.config.js +2 -2
- package/server/authentication/auth.config.js.map +1 -1
- package/server/authentication/guards/auth-basic.strategy.js +2 -2
- package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
- package/server/common/i18n.js +52 -0
- package/server/common/i18n.js.map +1 -0
- package/server/common/image.js +63 -43
- package/server/common/image.js.map +1 -1
- package/server/common/interfaces.js.map +1 -1
- package/server/common/shared.js +5 -2
- package/server/common/shared.js.map +1 -1
- package/server/configuration/config.validation.js +3 -3
- package/server/configuration/config.validation.js.map +1 -1
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +8 -6
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/adapters/redis-cache.adapter.js +22 -17
- package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/cache.e2e-spec.js +1 -0
- package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
- package/server/infrastructure/cache/cache.module.js +1 -14
- package/server/infrastructure/cache/cache.module.js.map +1 -1
- package/server/infrastructure/cache/services/cache.service.js.map +1 -1
- package/server/infrastructure/database/database.module.js +20 -1
- package/server/infrastructure/database/database.module.js.map +1 -1
- package/server/infrastructure/database/utils.js +48 -0
- package/server/infrastructure/database/utils.js.map +1 -1
- package/server/infrastructure/scheduler/scheduler.module.js +1 -1
- package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
- package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -3
- package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
- package/static/3rdpartylicenses.txt +137 -163
- package/static/chunk-2KLC4T2Z.js +1 -0
- package/static/chunk-2VMSXRCB.js +12 -0
- package/static/chunk-3GMLWAFZ.js +1 -0
- package/static/chunk-3OHSRRKH.js +4 -0
- package/static/chunk-3R4WKOHQ.js +1 -0
- package/static/{chunk-7ITZXYYJ.js → chunk-3R74L4UU.js} +1 -1
- package/static/chunk-3XVM35O2.js +1 -0
- package/static/chunk-3YVRP3VM.js +2 -0
- package/static/chunk-5NMSIIQB.js +1 -0
- package/static/chunk-5UKZLU5H.js +1 -0
- package/static/chunk-AF24EYXU.js +1 -0
- package/static/chunk-AKQVEHO6.js +2 -0
- package/static/chunk-BCVX464U.js +2 -0
- package/static/chunk-BQV4FRM6.js +1 -0
- package/static/{chunk-EVIE5F2U.js → chunk-CETH7UYS.js} +1 -1
- package/static/chunk-CHJ64RJM.js +1 -0
- package/static/chunk-DIT6W7VM.js +562 -0
- package/static/chunk-DKSEQTMX.js +1 -0
- package/static/chunk-DM4NXKEP.js +1 -0
- package/static/chunk-DPUVSXRB.js +1 -0
- package/static/chunk-DSWEWLXJ.js +1 -0
- package/static/chunk-FJE6BOFL.js +1 -0
- package/static/chunk-FZ3JPGYZ.js +1 -0
- package/static/chunk-IQSKQXC3.js +1 -0
- package/static/chunk-ITUFI2BJ.js +1 -0
- package/static/chunk-JPT5WEAT.js +1 -0
- package/static/chunk-LCTZJ537.js +1 -0
- package/static/chunk-LK2UCQJ6.js +1 -0
- package/static/chunk-LNTUR3GU.js +1 -0
- package/static/chunk-LP5TBXEN.js +7 -0
- package/static/{chunk-IPAC4VAF.js → chunk-LVSNIS5P.js} +1 -1
- package/static/{chunk-SIPE37PA.js → chunk-MTVSJTIW.js} +1 -1
- package/static/chunk-N3U6637P.js +1 -0
- package/static/chunk-NNV4OXSB.js +1 -0
- package/static/chunk-O6FYXVHI.js +1 -0
- package/static/chunk-OOGP4WSH.js +2 -0
- package/static/chunk-PB4AIT7O.js +1 -0
- package/static/chunk-PCWDQPOM.js +2 -0
- package/static/chunk-PNR6M34W.js +1 -0
- package/static/chunk-PVDHBQRM.js +1 -0
- package/static/chunk-Q5KM7LTX.js +1 -0
- package/static/chunk-QHC6ZPQ4.js +1 -0
- package/static/chunk-QMRBZHE4.js +1 -0
- package/static/chunk-QO6BTONN.js +1 -0
- package/static/chunk-QSJRY3TF.js +1 -0
- package/static/chunk-QUUIRSYT.js +1 -0
- package/static/chunk-RFH46UW3.js +1 -0
- package/static/{chunk-PTGDOWV3.js → chunk-RSXHRKM5.js} +1 -1
- package/static/chunk-RV3VZJPZ.js +1 -0
- package/static/{chunk-QNJFQVYI.js → chunk-S7HNXVRB.js} +1 -1
- package/static/chunk-SBZ572Q4.js +2 -0
- package/static/chunk-SJR5R3Y4.js +1 -0
- package/static/chunk-SLHTEGRU.js +1 -0
- package/static/{chunk-SH5EVL4E.js → chunk-SSFF27P2.js} +1 -1
- package/static/chunk-UNCPXHHT.js +1 -0
- package/static/chunk-URHTCJ7G.js +1 -0
- package/static/chunk-V3LHHZYN.js +1 -0
- package/static/{chunk-DJYJ66UF.js → chunk-VJTXJ43D.js} +1 -1
- package/static/chunk-VQQKMY2C.js +1 -0
- package/static/{chunk-IQOALFYU.js → chunk-WSSU2HXE.js} +1 -1
- package/static/chunk-XDZGW64M.js +3 -0
- package/static/chunk-XTRDKGKG.js +1 -0
- package/static/chunk-YLWTEC3X.js +1 -0
- package/static/chunk-Z5J5F5SX.js +1 -0
- package/static/chunk-ZIJQRARU.js +1 -0
- package/static/index.html +2 -2
- package/static/main-4H5BJY3J.js +9 -0
- package/static/scripts-WRDOQIU5.js +24 -0
- package/static/{styles-A5VYX3CE.css → styles-2C2UNCNB.css} +1 -1
- package/server/applications/spaces/interfaces/space-quota.interface.js +0 -10
- package/server/applications/spaces/interfaces/space-quota.interface.js.map +0 -1
- package/static/chunk-22EANI6R.js +0 -1
- package/static/chunk-3GFGJYMK.js +0 -1
- package/static/chunk-4YGJGZZZ.js +0 -1
- package/static/chunk-5K7HEX3C.js +0 -27
- package/static/chunk-5KLMS6A4.js +0 -1
- package/static/chunk-ATP3BFHV.js +0 -562
- package/static/chunk-BB4G55KE.js +0 -1
- package/static/chunk-EWKSX76T.js +0 -1
- package/static/chunk-FHLACA7V.js +0 -1
- package/static/chunk-GCATNU55.js +0 -1
- package/static/chunk-GYODPCIE.js +0 -1
- package/static/chunk-HZTFYLM5.js +0 -1
- package/static/chunk-JSUKJT6Z.js +0 -1
- package/static/chunk-JXZCNFW7.js +0 -1
- package/static/chunk-LTGFCQR7.js +0 -1
- package/static/chunk-LV3PYKWO.js +0 -1
- package/static/chunk-N2WFNW6M.js +0 -7
- package/static/chunk-ORMRCEGT.js +0 -1
- package/static/chunk-OUTBJSMW.js +0 -1
- package/static/chunk-RS2PX32L.js +0 -1
- package/static/chunk-RSSWH3S2.js +0 -1
- package/static/chunk-RTRJ3KFH.js +0 -1
- package/static/chunk-TKTCBDOG.js +0 -1
- package/static/chunk-V6K2N46L.js +0 -1
- package/static/chunk-XLCCZSQL.js +0 -4
- package/static/chunk-YPEH66GG.js +0 -1
- package/static/chunk-YPOIUQ57.js +0 -1
- package/static/chunk-ZKCFO2OA.js +0 -4
- package/static/main-MZ7HWZXO.js +0 -9
- package/static/scripts-VZVAP2P4.js +0 -30
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/shares/services/shares-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, Logger } from '@nestjs/common'\nimport { and, count, eq, inArray, isNotNull, isNull, ne, or, SelectedFields, SQL, sql } from 'drizzle-orm'\nimport { alias, MySqlSelectDynamic, union } from 'drizzle-orm/mysql-core'\nimport { MySql2PreparedQuery, MySqlQueryResult } from 'drizzle-orm/mysql2'\nimport { ACTION } from '../../../common/constants'\nimport { uniquePermissions } from '../../../common/functions'\nimport { createSlug, popFromObject } 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 {\n concatDistinctObjectsInArray,\n convertToWhere,\n dateTimeUTC,\n dbCheckAffectedRows,\n dbGetInsertedId\n} from '../../../infrastructure/database/utils'\nimport { fileHasCommentsSubquerySQL } from '../../comments/schemas/comments.schema'\nimport type { FileProps } from '../../files/interfaces/file-props.interface'\nimport type { FileSpace } from '../../files/interfaces/file-space.interface'\nimport { filePathSQL, files } from '../../files/schemas/files.schema'\nimport { links } from '../../links/schemas/links.schema'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaceGroupConcatPermissions, spaces } from '../../spaces/schemas/spaces.schema'\nimport { syncClients } from '../../sync/schemas/sync-clients.schema'\nimport { syncPaths } from '../../sync/schemas/sync-paths.schema'\nimport { GROUP_TYPE } from '../../users/constants/group'\nimport { MEMBER_TYPE } from '../../users/constants/member'\nimport { USER_ROLE } from '../../users/constants/user'\nimport type { Owner } from '../../users/interfaces/owner.interface'\nimport type { UserModel } from '../../users/models/user.model'\nimport { groups } from '../../users/schemas/groups.schema'\nimport { usersGroups } from '../../users/schemas/users-groups.schema'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport { SHARE_ALL_OPERATIONS, SHARE_TYPE } from '../constants/shares'\nimport type { ShareMemberDto } from '../dto/create-or-update-share.dto'\nimport type { ShareChildMember, ShareChildQuery } from '../interfaces/share-child.interface'\nimport type { ShareEnv } from '../interfaces/share-env.interface'\nimport type { ShareFile } from '../interfaces/share-file.interface'\nimport type { ShareLink } from '../interfaces/share-link.interface'\nimport type { ShareProps } from '../interfaces/share-props.interface'\nimport { ShareChild } from '../models/share-child.model'\nimport type { ShareMembers } from '../schemas/share-members.interface'\nimport type { Share } from '../schemas/share.interface'\nimport { sharesMembers } from '../schemas/shares-members.schema'\nimport { shares } from '../schemas/shares.schema'\n\n@Injectable()\nexport class SharesQueries {\n private readonly logger = new Logger(SharesQueries.name)\n private sharesListQuery: MySql2PreparedQuery<any> = null\n private shareIdsQuery: MySql2PreparedQuery<any> = null\n private shareLinksListQuery: MySql2PreparedQuery<any> = null\n private shareWithMembersQuery: MySql2PreparedQuery<any> = null\n private sharePermissionsQuery: MySql2PreparedQuery<any> = null\n private shareRootFilesQuery: MySql2PreparedQuery<any> = null\n\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n async uniqueShareAlias(name: string): Promise<string> {\n let alias = createSlug(name, true)\n let count = 0\n // Personal space name is reserved\n while (await this.shareExistsForAlias(alias)) {\n count += 1\n alias = `${name}-${count}`\n }\n return alias\n }\n\n shareExistsForOwner(userId: number, shareId: number): any | undefined {\n return this.db.query.shares.findFirst({ columns: { id: true }, where: and(eq(shares.id, shareId), eq(shares.ownerId, userId)) })\n }\n\n async childExistsForShareOwner(userId: number, shareId: number, childId: number, isAdmin: boolean = false): Promise<number> {\n const childShare: any = alias(shares, 'childShare')\n const withChildren: any = sql`\n WITH RECURSIVE child (id, parentId) AS\n (SELECT ${shares.id},\n ${shares.parentId}\n FROM ${shares}\n WHERE ${shares.id} = ${shareId}\n AND (${shares.ownerId} = ${userId} OR (${shares.ownerId} IS NULL AND ${+isAdmin} = 1))\n UNION\n SELECT ${childShare.id},\n ${childShare.parentId}\n FROM ${shares} AS childShare\n INNER JOIN child AS cs ON ${childShare.parentId} = cs.id)\n SELECT child.id\n FROM child\n WHERE child.id = ${childId}\n LIMIT 1\n `\n const [r]: { id: number }[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.length ? r[0].id : null\n }\n\n async findHighestParentShare(childShareId: number): Promise<number> {\n const parentShare: any = alias(shares, 'parentShare')\n const withParents: any = sql`\n WITH RECURSIVE parent (id, parentId) AS\n (SELECT ${shares.id},\n ${shares.parentId}\n FROM ${shares}\n WHERE ${shares.id} = ${childShareId}\n UNION\n SELECT ${parentShare.id},\n ${parentShare.parentId}\n FROM ${shares} AS parentShare\n INNER JOIN parent AS cs ON ${parentShare.id} = cs.parentId)\n SELECT parent.id\n FROM parent\n WHERE parent.parentId is NULL\n LIMIT 1\n `\n const [r]: { id: number }[][] = (await this.db.execute(withParents)) as MySqlQueryResult\n return r.length ? r[0].id : null\n }\n\n selectShares(props: Partial<Record<keyof Share, any>>): Promise<Partial<Share>[]> {\n const where: SQL[] = convertToWhere(shares, props)\n return this.db\n .select({ id: shares.id, ownerId: shares.ownerId, alias: shares.alias, name: shares.name })\n .from(shares)\n .where(and(...where))\n }\n\n selectParentSharesFromSpaceId(spaceId: number, ownerIds?: number[]): Promise<Partial<Share>[]> {\n const where: SQL[] = [eq(shares.spaceId, spaceId), isNull(shares.spaceRootId), isNull(shares.parentId)]\n if (ownerIds && ownerIds.length) {\n where.push(inArray(shares.ownerId, ownerIds))\n }\n return this.db\n .select({ id: shares.id, ownerId: shares.ownerId })\n .from(shares)\n .where(and(...where))\n }\n\n async listShareLinks(user: UserModel, shareId: number, asAdmin?: boolean): Promise<ShareLink>\n\n async listShareLinks(user: UserModel, shareId?: number, asAdmin?: boolean): Promise<ShareLink[]>\n\n async listShareLinks(user: UserModel, shareId?: number, asAdmin: boolean = false): Promise<ShareLink[] | ShareLink> {\n if (!this.shareLinksListQuery) {\n const [selectFile, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers] = this.shareFileSelect()\n const linkGuest: any = alias(users, 'linkGuest')\n const select: ShareLink | SelectedFields<any, any> = {\n id: shares.id,\n ownerId: shares.ownerId,\n name: shares.name,\n externalPath: sql`IF (${shares.externalPath} IS NOT NULL AND ${shares.ownerId} IS NOT NULL, '.', ${shares.externalPath})`,\n description: shares.description,\n parent: {\n id: parentShare.id,\n ownerId: parentShare.ownerId,\n alias: parentShare.alias,\n name: parentShare.name\n },\n file: selectFile,\n link: {\n id: links.id,\n name: links.name,\n email: links.email,\n uuid: links.uuid,\n requireAuth: links.requireAuth,\n nbAccess: links.nbAccess,\n limitAccess: links.limitAccess,\n permissions: shareMembers.permissions,\n isActive: linkGuest.isActive,\n language: linkGuest.language,\n expiresAt: links.expiresAt,\n createdAt: links.createdAt,\n currentAccess: linkGuest.currentAccess,\n lastAccess: linkGuest.lastAccess,\n currentIp: linkGuest.currentIp,\n lastIp: linkGuest.lastIp\n }\n }\n this.shareLinksListQuery = this.shareFileJoin(select, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers)\n .innerJoin(links, eq(links.id, shareMembers.linkId))\n .innerJoin(linkGuest, eq(linkGuest.id, links.userId))\n .where(\n and(\n eq(shares.type, SHARE_TYPE.LINK),\n or(eq(sql.placeholder('shareId'), 0), eq(shares.id, sql.placeholder('shareId'))),\n or(\n eq(sql.placeholder('asAdmin'), 1),\n eq(shares.ownerId, sql.placeholder('userId')),\n and(eq(sql.placeholder('isAdmin'), 1), isNull(shares.ownerId))\n )\n )\n )\n .prepare()\n }\n const shareLinks: ShareLink[] = await this.shareLinksListQuery.execute({\n userId: user.id,\n shareId: shareId || 0,\n isAdmin: +user.isAdmin,\n asAdmin: +asAdmin\n })\n if (shareId) {\n return shareLinks.length ? shareLinks[0] : null\n }\n return shareLinks\n }\n\n async getShareWithMembers(user: UserModel, shareId: number, asAdmin = false): Promise<ShareProps> {\n // asAdmin : true if the user is the owner of the parent share or if the share is requested from the administration\n if (!this.shareWithMembersQuery) {\n const [selectFile, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers] = this.shareFileSelect()\n const linkUsers: any = alias(users, 'linkUsers')\n const select: ShareProps | SelectedFields<any, any> = {\n id: shares.id,\n ownerId: shares.ownerId,\n name: shares.name,\n alias: shares.alias,\n externalPath: sql`IF (${shares.externalPath} IS NOT NULL AND ${shares.ownerId} IS NOT NULL, '.', ${shares.externalPath})`,\n enabled: shares.enabled,\n description: shares.description,\n createdAt: shares.createdAt,\n modifiedAt: shares.modifiedAt,\n disabledAt: shares.disabledAt,\n parent: {\n id: parentShare.id,\n ownerId: parentShare.ownerId,\n alias: parentShare.alias,\n name: parentShare.name\n },\n file: selectFile,\n users: concatDistinctObjectsInArray(users.id, {\n id: users.id,\n login: users.login,\n name: userFullNameSQL(users),\n type: sql`IF (${users.role} = ${USER_ROLE.GUEST}, ${MEMBER_TYPE.GUEST}, ${MEMBER_TYPE.USER})`,\n description: users.email,\n permissions: shareMembers.permissions,\n createdAt: dateTimeUTC(shareMembers.createdAt)\n }),\n groups: concatDistinctObjectsInArray(groups.id, {\n id: groups.id,\n name: groups.name,\n type: sql`IF (${groups.type} = ${GROUP_TYPE.PERSONAL}, ${MEMBER_TYPE.PGROUP}, ${MEMBER_TYPE.GROUP})`,\n description: groups.description,\n permissions: shareMembers.permissions,\n createdAt: dateTimeUTC(shareMembers.createdAt)\n }),\n links: concatDistinctObjectsInArray(linkUsers.id, {\n id: linkUsers.id,\n linkId: links.id,\n login: linkUsers.login,\n name: links.name,\n type: sql.raw(`'${MEMBER_TYPE.USER}'`),\n description: links.email,\n permissions: shareMembers.permissions,\n createdAt: dateTimeUTC(shareMembers.createdAt)\n })\n }\n this.shareWithMembersQuery = this.shareFileJoin(select, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers)\n .leftJoin(users, and(isNull(shareMembers.linkId), eq(users.id, shareMembers.userId)))\n .leftJoin(groups, eq(groups.id, shareMembers.groupId))\n .leftJoin(linkUsers, and(isNotNull(shareMembers.linkId), eq(linkUsers.id, shareMembers.userId)))\n .leftJoin(links, and(eq(links.userId, linkUsers.id), eq(links.id, shareMembers.linkId)))\n .where(\n and(\n eq(shares.id, sql.placeholder('shareId')),\n or(\n eq(sql.placeholder('asAdmin'), 1),\n eq(shares.ownerId, sql.placeholder('userId')),\n and(eq(sql.placeholder('isAdmin'), 1), isNull(shares.ownerId))\n )\n )\n )\n .groupBy(shares.id)\n .limit(1)\n .prepare()\n }\n const [share] = await this.shareWithMembersQuery.execute({ userId: user.id, shareId, isAdmin: +user.isAdmin, asAdmin: +asAdmin })\n if (!share) return null\n // merge members\n share.members = [...popFromObject('users', share), ...popFromObject('links', share), ...popFromObject('groups', share)]\n return share as ShareProps\n }\n\n async createShare(share: Partial<Share>): Promise<number> {\n return dbGetInsertedId(await this.db.insert(shares).values(share as Share))\n }\n\n async updateShare(set: Partial<Record<keyof Share, any>>, filters: Partial<Record<keyof Share, any>>) {\n const where: SQL[] = convertToWhere(shares, filters)\n try {\n dbCheckAffectedRows(\n await this.db\n .update(shares)\n .set(set)\n .where(and(...where))\n .limit(1),\n 1\n )\n this.logger.debug(`${this.updateShare.name} - ${JSON.stringify(filters)} was updated : ${JSON.stringify(set)}`)\n } catch (e) {\n this.logger.error(`${this.updateShare.name} - ${JSON.stringify(filters)} was not updated : ${JSON.stringify(set)} : ${e}`)\n }\n }\n\n async deleteShare(shareId: number): Promise<boolean> {\n return dbCheckAffectedRows(await this.db.delete(shares).where(eq(shares.id, shareId)), 1)\n }\n\n async updateMember(set: Partial<Record<keyof ShareMembers, any>>, filters: Partial<Record<keyof ShareMembers, any>>): Promise<boolean> {\n const where: SQL[] = convertToWhere(sharesMembers, filters)\n try {\n dbCheckAffectedRows(\n await this.db\n .update(sharesMembers)\n .set(set)\n .where(and(...where))\n .limit(1),\n 1\n )\n this.logger.debug(`${this.updateMember.name} - ${JSON.stringify(filters)} was updated : ${JSON.stringify(set)}`)\n return true\n } catch (e) {\n this.logger.error(`${this.updateMember.name} - ${JSON.stringify(filters)} was not updated : ${JSON.stringify(set)} : ${e}`)\n return false\n }\n }\n\n async updateMembers(\n shareId: number,\n add: ShareMemberDto[],\n update: Record<string | 'object', Partial<ShareMembers> | ShareMemberDto>[],\n remove: ShareMemberDto[]\n ): Promise<Record<Exclude<ACTION, ACTION.DELETE_PERMANENTLY>, { userIds: number[]; groupIds: number[] }>> {\n // store status\n const status: Record<Exclude<ACTION, ACTION.DELETE_PERMANENTLY>, { userIds: number[]; groupIds: number[] }> = {\n [ACTION.ADD]: { userIds: [], groupIds: [] },\n [ACTION.UPDATE]: { userIds: [], groupIds: [] },\n [ACTION.DELETE]: { userIds: [], groupIds: [] }\n }\n // add\n for (const m of add) {\n try {\n dbCheckAffectedRows(\n await this.db.insert(sharesMembers).values({\n shareId: shareId,\n ...(m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? { userId: m.id } : { groupId: m.id }),\n permissions: m.permissions\n } as ShareMembers),\n 1\n )\n status[ACTION.ADD][`${m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? 'userIds' : 'groupIds'}`].push(m.id)\n this.logger.debug(`${this.updateMembers.name} - ${m.type} (${m.id}) added to the share (${shareId})`)\n } catch (e) {\n this.logger.error(`${this.updateMembers.name} - ${m.type} (${m.id}) was not added to the share (${shareId}) -> : ${e}`)\n }\n }\n // update\n for (const props of update) {\n const m: ShareMemberDto = popFromObject('object', props)\n try {\n dbCheckAffectedRows(\n await this.db\n .update(sharesMembers)\n .set(props)\n .where(\n and(\n eq(sharesMembers.shareId, shareId),\n eq(m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? sharesMembers.userId : sharesMembers.groupId, m.id)\n )\n )\n .limit(1),\n 1\n )\n status[ACTION.UPDATE][`${m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? 'userIds' : 'groupIds'}`].push(m.id)\n this.logger.debug(`${this.updateMembers.name} - ${m.type} (${m.id}) was updated on share (${shareId}) : ${JSON.stringify(props)}`)\n } catch (e) {\n this.logger.error(`${this.updateMembers.name} - ${m.type} (${m.id}) was not updated on share (${shareId}) : ${JSON.stringify(props)} : ${e}`)\n }\n }\n // remove\n for (const m of remove) {\n try {\n dbCheckAffectedRows(\n await this.db\n .delete(sharesMembers)\n .where(\n and(\n eq(sharesMembers.shareId, shareId),\n eq(m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? sharesMembers.userId : sharesMembers.groupId, m.id)\n )\n ),\n 1\n )\n status[ACTION.DELETE][`${m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? 'userIds' : 'groupIds'}`].push(m.id)\n this.logger.debug(`${this.updateMembers.name} - ${m.type} (${m.id}) removed from share (${shareId})`)\n } catch (e) {\n this.logger.error(`${this.updateMembers.name} - ${m.type} (${m.id}) was not removed from share (${shareId}) : ${e}`)\n }\n }\n return status\n }\n\n async shareEnv(shareId: number): Promise<Partial<ShareEnv>> {\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const select: ShareEnv | SelectedFields<any, any> = {\n id: shares.id,\n alias: shares.alias,\n enabled: shares.enabled,\n fileId: shares.fileId,\n spaceId: shares.spaceId,\n spaceRootId: shares.spaceRootId,\n inSharesRepository: sql`${1}`.mapWith(Boolean),\n root: {\n id: files.id,\n owner: { id: users.id, login: users.login },\n file: {\n path: sql`IF (${files.id} IS NOT NULL, ${filePathSQL(files)}, NULL)`,\n inTrash: files.inTrash,\n space: { id: spaces.id, alias: spaces.alias },\n root: {\n id: sql`IF (${spacesRoots.id} IS NULL, ${shareSpaceRoot.id}, ${spacesRoots.id})`,\n externalPath: sql`IF (${spacesRoots.externalPath} IS NULL,\n ${shareSpaceRoot.externalPath}, ${spacesRoots.externalPath})`\n }\n },\n externalPath: shares.externalPath\n }\n }\n const [shareEnv] = await this.db\n .select(select)\n .from(shares)\n .leftJoin(shareSpaceRoot, and(isNull(shares.externalPath), isNull(shares.fileId), eq(shareSpaceRoot.id, shares.spaceRootId)))\n .leftJoin(\n files,\n and(\n isNull(shares.externalPath),\n or(and(isNotNull(shares.fileId), eq(files.id, shares.fileId)), and(isNotNull(shareSpaceRoot.fileId), eq(files.id, shareSpaceRoot.fileId)))\n )\n )\n .leftJoin(\n spaces,\n and(\n isNull(shares.externalPath),\n or(\n and(isNotNull(files.spaceId), eq(spaces.id, files.spaceId)),\n and(isNotNull(shareSpaceRoot.spaceId), eq(spaces.id, shareSpaceRoot.spaceId))\n )\n )\n )\n .leftJoin(spacesRoots, and(isNull(shares.externalPath), isNotNull(files.spaceExternalRootId), eq(spacesRoots.id, files.spaceExternalRootId)))\n .leftJoin(users, eq(users.id, files.ownerId))\n .where(eq(shares.id, shareId))\n .execute()\n return shareEnv\n }\n\n @CacheDecorator()\n async shareIds(userId: number, isAdmin: number): Promise<number[]> {\n if (!this.shareIdsQuery) {\n const unionAlias = union(\n this.fromUserQuery({ id: shares.id }),\n this.fromGroupsQuery({ id: shares.id }),\n this.fromAdminSharesQuery({ id: shares.id })\n ).as('unionAlias')\n this.shareIdsQuery = this.db.select({ id: unionAlias.id }).from(unionAlias).groupBy(unionAlias.id).prepare()\n }\n return (await this.shareIdsQuery.execute({ userId: userId, isAdmin: +isAdmin })).map((r: { id: number }) => r.id)\n }\n\n async listShares(user: UserModel): Promise<ShareFile[]> {\n if (!this.sharesListQuery) {\n const [selectFile, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers] = this.shareFileSelect()\n const select: ShareFile | SelectedFields<any, any> = {\n id: shares.id,\n name: shares.name,\n alias: shares.alias,\n externalPath: sql`IF (${shares.externalPath} IS NOT NULL, 1, 0)`.mapWith(Boolean),\n description: shares.description,\n enabled: shares.enabled,\n createdAt: shares.createdAt,\n modifiedAt: shares.modifiedAt,\n parent: {\n id: isNotNull(parentShare.id),\n alias: parentShare.alias,\n name: parentShare.name\n },\n file: selectFile,\n hasComments: fileHasCommentsSubquerySQL(\n sql`IF (${shares.fileId} IS NULL AND ${shareRootFile.id} IS NOT NULL, ${shareRootFile.id}, ${files.id})`\n ),\n counts: {\n users: count(sql`CASE WHEN ${shareMembers.userId} IS NOT NULL AND ${shareMembers.linkId} IS NULL THEN 1 END`),\n groups: count(shareMembers.groupId),\n links: count(shareMembers.linkId)\n }\n }\n this.sharesListQuery = this.shareFileJoin(select, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers)\n .where(\n and(\n eq(shares.type, sql.placeholder('shareType')),\n or(eq(shares.ownerId, sql.placeholder('userId')), and(eq(sql.placeholder('isAdmin'), 1), isNull(shares.ownerId)))\n )\n )\n .groupBy(shares.id)\n .prepare()\n }\n const r: ShareFile[] = await this.sharesListQuery.execute({ userId: user.id, shareType: SHARE_TYPE.COMMON, isAdmin: +user.isAdmin })\n await this.setShareCounts(r)\n return r\n }\n\n async listChildShares(userId: number, shareId: number, isAdmin: number): Promise<ShareChild[]> {\n const childShare: any = alias(shares, 'childShare')\n const withChildren: any = sql`\n WITH RECURSIVE child (id, parentId, ownerId, type, name, alias, fileId) AS\n (SELECT ${shares.id},\n ${shares.parentId},\n ${shares.ownerId},\n ${shares.type},\n ${shares.name},\n ${shares.alias},\n ${shares.fileId}\n FROM ${shares}\n WHERE ${shares.id} = ${shareId}\n AND (${shares.ownerId} = ${userId} OR (${isAdmin} = 1 AND ${shares.ownerId} IS NULL))\n UNION\n SELECT ${childShare.id},\n ${childShare.parentId},\n ${childShare.ownerId},\n ${childShare.type},\n ${childShare.name},\n ${childShare.alias},\n ${childShare.fileId}\n FROM ${shares} AS childShare\n INNER JOIN child AS cs ON ${childShare.parentId} = cs.id)\n SELECT child.id,\n child.alias,\n child.name,\n child.type,\n child.parentId,\n ${users.login} AS ownerLogin,\n ${userFullNameSQL(users)} AS ownerFullName,\n ${users.email} AS ownerEmail,\n ${files.mime} AS fileMime\n FROM child\n LEFT JOIN ${users} ON child.ownerId = ${users.id}\n LEFT JOIN ${files} ON child.fileId = ${files.id}\n WHERE child.id != ${shareId}\n `\n const [r]: ShareChildQuery[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.map((s) => new ShareChild(s))\n }\n\n async listSpaceShares(spaceId: number): Promise<ShareChild[]> {\n const childShare: any = alias(shares, 'childShare')\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const childShareSpaceRoot: any = alias(spacesRoots, 'childShareSpaceRoot')\n const withChildren: any = sql`\n WITH RECURSIVE child (id, parentId, ownerId, type, name, alias, fileId) AS\n (SELECT ${shares.id},\n ${shares.parentId},\n ${shares.ownerId},\n ${shares.type},\n ${shares.name},\n ${shares.alias},\n COALESCE(${shares.fileId}, ${shareSpaceRoot.fileId}) AS fileId\n FROM ${shares}\n LEFT JOIN ${spacesRoots} AS shareSpaceRoot ON ${shares.spaceRootId} = ${shareSpaceRoot.id}\n WHERE ${shares.spaceId} = ${spaceId}\n UNION\n SELECT ${childShare.id},\n ${childShare.parentId},\n ${childShare.ownerId},\n ${childShare.type},\n ${childShare.name},\n ${childShare.alias},\n COALESCE(${childShare.fileId}, ${childShareSpaceRoot.fileId}) AS fileId\n FROM ${shares} AS childShare\n INNER JOIN child AS cs ON ${childShare.parentId} = cs.id\n LEFT JOIN ${spacesRoots} AS childShareSpaceRoot ON ${childShare.spaceRootId} = ${childShareSpaceRoot.id})\n SELECT child.id,\n child.alias,\n child.name,\n child.type,\n child.parentId,\n ${users.login} AS ownerLogin,\n ${userFullNameSQL(users)} AS ownerFullName,\n ${users.email} AS ownerEmail,\n ${files.mime} AS fileMime\n FROM child\n LEFT JOIN ${users} ON child.ownerId = ${users.id}\n LEFT JOIN ${files} ON child.fileId = ${files.id}\n `\n const [r]: ShareChildQuery[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.map((s) => new ShareChild(s))\n }\n\n async membersFromChildSharesPermissions(\n shareId: number,\n userIds: number[] | 'all',\n matchPermRegexp?: string,\n asParent: boolean = true\n ): Promise<ShareChildMember[]> {\n const childShare: any = alias(shares, 'childShare')\n const withChildren: any = sql`\n WITH RECURSIVE children (id, alias, name) AS\n (SELECT ${shares.id}, ${shares.alias}, ${shares.name}\n FROM ${shares}\n WHERE ${asParent ? shares.parentId : shares.id} = ${shareId}\n AND ${userIds === 'all' ? 1 : inArray(shares.ownerId, userIds)}\n UNION\n SELECT ${childShare.id}, ${childShare.alias}, ${childShare.name}\n FROM ${shares} AS childShare\n INNER JOIN children AS cs ON ${childShare.parentId} = cs.id)\n SELECT ${sharesMembers.id} as id,\n ${sharesMembers.userId} as userId,\n ${sharesMembers.permissions} as userPermissions,\n ${sharesMembers.shareId},\n children.alias as shareAlias,\n children.name as shareName\n FROM children\n INNER JOIN ${sharesMembers} ON children.id = ${sharesMembers.shareId}\n `\n if (matchPermRegexp) {\n withChildren.append(sql`WHERE ${sharesMembers.permissions} REGEXP ${matchPermRegexp}`)\n }\n const [r]: ShareChildMember[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r\n }\n\n async shareRootFiles(user: UserModel, options: { withShares?: boolean; withHasComments?: boolean; withSyncs?: boolean }): Promise<FileProps[]> {\n if (!this.shareRootFilesQuery) {\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const originOwner: any = alias(users, 'originOwner')\n const childShare: any = alias(shares, 'childShare')\n const selectUnion: FileProps | SelectedFields<any, any> = {\n id: files.id,\n path: sql`IF (${files.id} IS NOT NULL, ${filePathSQL(files)}, '')`.as('path'),\n isDir: files.isDir,\n inTrash: files.inTrash,\n size: files.size,\n ctime: files.ctime,\n mtime: files.mtime,\n mime: files.mime,\n originOwnerLogin: sql`${originOwner.login}`.as('originOwnerLogin'),\n originSpaceAlias: sql`${spaces.alias}`.as('originSpaceAlias'),\n originSpaceRootExternalPath: sql`IF (${spacesRoots.externalPath} IS NULL,\n ${shareSpaceRoot.externalPath}, ${spacesRoots.externalPath})`.as('originSpaceRootExternalPath'),\n rootId: sql`${shares.id}`.as('rootId'),\n rootAlias: shares.alias,\n rootName: shares.name,\n rootDescription: shares.description,\n rootEnabled: shares.enabled,\n rootExternalPath: shares.externalPath,\n rootPermissions: sharesMembers.permissions,\n rootOwnerLogin: sql`${users.login}`.as('rootOwnerLogin'),\n rootOwnerEmail: sql`${users.email}`.as('rootOwnerEmail'),\n rootOwnerFullName: userFullNameSQL(users).as('rootOwnerFullName'),\n childShareId: sql`${childShare.id}`.as('childShareId'),\n childShareAlias: sql`${childShare.alias}`.as('childShareAlias'),\n childShareName: sql`${childShare.name}`.as('childShareName'),\n childShareType: sql`${childShare.type}`.as('childShareType'),\n syncPathId: sql`${syncPaths.id}`.as('syncPathId'),\n syncPathClientId: sql`${syncClients.id}`.as('syncPathClientId'),\n syncPathClientName: sql`JSON_VALUE(${syncClients.info}, '$.node')`.as('syncPathClientName')\n }\n const filters: SQL[] = [or(isNull(shares.ownerId), ne(shares.ownerId, sql.placeholder('userId')))]\n const fromUser = this.fromUserQuery(selectUnion, filters).$dynamic()\n const fromGroups = this.fromGroupsQuery(selectUnion, filters).$dynamic()\n const fromAdminShares = this.fromAdminSharesQuery({ ...selectUnion, rootPermissions: sql.raw(`'${SHARE_ALL_OPERATIONS}'`) }, filters).$dynamic()\n for (const q of [fromUser, fromGroups, fromAdminShares]) {\n q.leftJoin(shareSpaceRoot, and(isNull(shares.externalPath), isNull(shares.fileId), eq(shareSpaceRoot.id, shares.spaceRootId)))\n .leftJoin(\n files,\n or(\n // if the child share is from a share with an external path, the child share should have an external path and a fileId\n and(isNotNull(shares.fileId), eq(files.id, shares.fileId)),\n and(isNull(shares.externalPath), isNull(shares.fileId), isNotNull(shareSpaceRoot.fileId), eq(files.id, shareSpaceRoot.fileId))\n )\n )\n .leftJoin(spaces, and(isNull(shares.externalPath), isNotNull(files.spaceId), eq(spaces.id, files.spaceId)))\n .leftJoin(spacesRoots, and(isNull(shares.externalPath), eq(spacesRoots.id, files.spaceExternalRootId)))\n .leftJoin(\n childShare,\n and(\n eq(sql.placeholder('withShares'), sql.raw('1')),\n eq(childShare.ownerId, sql.placeholder('userId')),\n eq(childShare.parentId, shares.id),\n or(\n and(isNull(childShare.externalPath), isNotNull(childShare.fileId), eq(childShare.fileId, shares.fileId)),\n and(\n isNull(childShare.externalPath),\n isNull(childShare.fileId),\n eq(childShare.spaceId, shares.spaceId),\n eq(childShare.spaceRootId, shares.spaceRootId)\n ),\n and(isNotNull(childShare.externalPath), isNull(childShare.fileId), eq(shares.externalPath, childShare.externalPath))\n )\n )\n )\n .leftJoin(syncClients, and(eq(sql.placeholder('withSyncs'), sql.raw('1')), eq(syncClients.ownerId, sql.placeholder('userId'))))\n .leftJoin(\n syncPaths,\n and(\n eq(sql.placeholder('withSyncs'), sql.raw('1')),\n eq(syncPaths.clientId, syncClients.id),\n isNull(syncPaths.fileId),\n eq(syncPaths.shareId, shares.id)\n )\n )\n .leftJoin(users, eq(users.id, shares.ownerId))\n .leftJoin(originOwner, and(isNull(shares.externalPath), eq(originOwner.id, files.ownerId)))\n }\n const unionAlias = union(fromUser, fromGroups, fromAdminShares).as('union_alias')\n const select: FileProps | SelectedFields<any, any> = {\n id: unionAlias.id,\n path: unionAlias.path,\n isDir: unionAlias.isDir,\n inTrash: unionAlias.inTrash,\n size: unionAlias.size,\n ctime: unionAlias.ctime,\n mtime: unionAlias.mtime,\n mime: unionAlias.mime,\n origin: {\n ownerLogin: unionAlias.originOwnerLogin,\n spaceAlias: unionAlias.originSpaceAlias,\n spaceRootExternalPath: unionAlias.originSpaceRootExternalPath\n },\n root: {\n id: unionAlias.rootId,\n alias: unionAlias.rootAlias,\n name: unionAlias.rootName,\n description: unionAlias.rootDescription,\n enabled: unionAlias.rootEnabled,\n externalPath: unionAlias.rootExternalPath,\n permissions: spaceGroupConcatPermissions(unionAlias.rootPermissions),\n owner: { login: unionAlias.rootOwnerLogin, email: unionAlias.rootOwnerEmail, fullName: unionAlias.rootOwnerFullName } as Owner\n },\n shares: sql`IF (${sql.placeholder('withShares')}, ${concatDistinctObjectsInArray(unionAlias.childShareId, {\n id: unionAlias.childShareId,\n alias: unionAlias.childShareAlias,\n name: unionAlias.childShareName,\n type: unionAlias.childShareType\n })}, '[]')`.mapWith(JSON.parse),\n syncs: sql`IF (${sql.placeholder('withSyncs')}, ${concatDistinctObjectsInArray(unionAlias.syncPathId, {\n id: unionAlias.syncPathId,\n clientId: unionAlias.syncPathClientId,\n clientName: unionAlias.syncPathClientName\n })}, '[]')`.mapWith(JSON.parse),\n hasComments: sql<boolean>`IF (${sql.placeholder('withHasComments')}, ${fileHasCommentsSubquerySQL(unionAlias.id)}, 0)`.mapWith(Boolean)\n }\n this.shareRootFilesQuery = this.db.select(select).from(unionAlias).groupBy(unionAlias.rootId).prepare()\n }\n const fps: FileProps[] = await this.shareRootFilesQuery.execute({\n userId: user.id,\n isAdmin: +user.isAdmin,\n withHasComments: +!!options.withHasComments,\n withShares: +!!options.withShares,\n withSyncs: +!!options.withSyncs\n })\n for (const f of fps) {\n f.root.permissions = uniquePermissions(f.root.permissions)\n }\n return fps\n }\n\n @CacheDecorator()\n async permissions(userId: number, shareAlias: string, isAdmin: number = 0): Promise<Partial<SpaceEnv>> {\n if (!this.sharePermissionsQuery) {\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const selectUnion: SpaceEnv | SelectedFields<any, any> = {\n id: shares.id,\n alias: shares.alias,\n name: shares.name,\n enabled: shares.enabled,\n permissions: sharesMembers.permissions,\n rootId: sql`${files.id}`.as('rootId'),\n rootOwnerId: sql`${users.id}`.as('rootOwnerId'),\n rootOwnerLogin: users.login,\n rootSpaceId: sql`${spaces.id}`.as('rootSpaceId'),\n rootSpaceAlias: sql`${spaces.alias}`.as('rootSpaceAlias'),\n rootPath: sql`IF (${files.id} IS NOT NULL, ${filePathSQL(files)}, NULL)`.as('rootPath'),\n rootInTrash: files.inTrash,\n rootExternalPath: shares.externalPath,\n rootExternalParentShareId: sql`IF (${shares.externalPath} IS NOT NULL, ${shares.parentId}, NULL)`.as('rootExternalParentShareId'),\n rootSpaceRootId: sql`IF (${spacesRoots.id} IS NULL, ${shareSpaceRoot.id}, ${spacesRoots.id})`.as('rootSpaceRootId'),\n rootSpaceRootExternalPath: sql`IF (${spacesRoots.externalPath} IS NULL,\n ${shareSpaceRoot.externalPath}, ${spacesRoots.externalPath})`.as('rootSpaceRootExternalPath')\n }\n const filters: SQL[] = [eq(shares.alias, sql.placeholder('shareAlias'))]\n const fromUser = this.fromUserQuery(selectUnion, filters).$dynamic()\n const fromGroups = this.fromGroupsQuery(selectUnion, filters).$dynamic()\n const fromAdminShares = this.fromAdminSharesQuery({ ...selectUnion, permissions: sql.raw(`'${SHARE_ALL_OPERATIONS}'`) }, filters).$dynamic()\n for (const q of [fromUser, fromGroups, fromAdminShares]) {\n q.leftJoin(shareSpaceRoot, and(isNull(shares.externalPath), isNull(shares.fileId), eq(shareSpaceRoot.id, shares.spaceRootId)))\n .leftJoin(\n files,\n or(\n // in case of share child from a share with external path, child share should have an external path and a fileId\n and(isNotNull(shares.fileId), eq(files.id, shares.fileId)),\n and(isNull(shares.externalPath), isNotNull(shareSpaceRoot.fileId), eq(files.id, shareSpaceRoot.fileId))\n )\n )\n .leftJoin(\n spaces,\n and(\n isNull(shares.externalPath),\n or(\n and(isNotNull(files.spaceId), eq(spaces.id, files.spaceId)),\n and(isNotNull(shareSpaceRoot.spaceId), eq(spaces.id, shareSpaceRoot.spaceId))\n )\n )\n )\n .leftJoin(spacesRoots, and(isNull(shares.externalPath), eq(spacesRoots.id, files.spaceExternalRootId)))\n .leftJoin(users, eq(users.id, files.ownerId))\n }\n const unionAlias = union(fromUser, fromGroups, fromAdminShares).as('union_alias')\n const select: SpaceEnv | SelectedFields<any, any> = {\n id: unionAlias.id,\n alias: unionAlias.alias,\n name: unionAlias.name,\n enabled: unionAlias.enabled,\n permissions: spaceGroupConcatPermissions(unionAlias.permissions),\n root: {\n id: unionAlias.rootId,\n owner: { id: unionAlias.rootOwnerId, login: unionAlias.rootOwnerLogin },\n file: {\n path: unionAlias.rootPath,\n inTrash: unionAlias.rootInTrash,\n space: { id: unionAlias.rootSpaceId, alias: unionAlias.rootSpaceAlias },\n root: { id: unionAlias.rootSpaceRootId, externalPath: unionAlias.rootSpaceRootExternalPath }\n },\n externalPath: unionAlias.rootExternalPath,\n externalParentShareId: unionAlias.rootExternalParentShareId\n }\n }\n this.sharePermissionsQuery = this.db.select(select).from(unionAlias).groupBy(unionAlias.id).limit(1).prepare()\n }\n const [r]: Partial<SpaceEnv>[] = await this.sharePermissionsQuery.execute({ userId, shareAlias, isAdmin })\n if (r) {\n r.permissions = uniquePermissions(r.permissions)\n }\n return r\n }\n\n @CacheDecorator(900, true)\n async childSharesCount(shareId: number): Promise<number> {\n const childShare: any = alias(shares, 'childShare')\n const withChildren: any = sql`\n WITH RECURSIVE children (id, parentId) AS\n (SELECT ${shares.id}, ${shares.parentId}\n FROM ${shares}\n WHERE ${shares.parentId} IS NOT NULL\n AND ${shares.parentId} = ${shareId}\n UNION\n SELECT ${childShare.id}, cs.parentId\n FROM ${shares} AS childShare\n INNER JOIN children AS cs ON ${childShare.parentId} = cs.id)\n SELECT COUNT(children.id) as count\n FROM children\n GROUP BY parentId\n `\n const [r]: { count: number }[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.length ? r[0].count : 0\n }\n\n async clearCachePermissions(shareAlias: string, userIds: number[]) {\n // `permissions` argument must match with `this.permissions.name` function\n for (const userId of userIds) {\n const pattern = this.cache.genSlugKey(this.constructor.name, this.permissions.name, userId, shareAlias, '*')\n const keys = await this.cache.keys(pattern)\n if (keys.length) {\n this.logger.verbose(`${this.clearCachePermissions.name} - ${JSON.stringify(keys)}`)\n this.cache.mdel(keys).catch((e: Error) => this.logger.error(`${this.clearCachePermissions.name} - ${e}`))\n }\n }\n }\n\n private shareExistsForAlias(alias: string): any | undefined {\n return this.db.query.shares.findFirst({ columns: { id: true }, where: eq(shares.alias, alias) })\n }\n\n private fromUserQuery(select: SelectedFields<any, any>, filters: SQL[] = []) {\n const where: SQL[] = [eq(sharesMembers.userId, sql.placeholder('userId')), ...filters]\n return this.db\n .select(select)\n .from(sharesMembers)\n .innerJoin(shares, eq(sharesMembers.shareId, shares.id))\n .where(and(...where))\n }\n\n private fromGroupsQuery(select: SelectedFields<any, any>, filters: SQL[] = []) {\n const where: SQL[] = [eq(sharesMembers.groupId, usersGroups.groupId), ...filters]\n return this.db\n .select(select)\n .from(sharesMembers)\n .innerJoin(usersGroups, eq(usersGroups.userId, sql.placeholder('userId')))\n .innerJoin(shares, eq(sharesMembers.shareId, shares.id))\n .where(and(...where))\n }\n\n private fromAdminSharesQuery(select: SelectedFields<any, any>, filters: SQL[] = []) {\n const where: SQL[] = [eq(sql.placeholder('isAdmin'), sql.raw('1')), isNull(shares.ownerId), ...filters]\n return this.db\n .select(select)\n .from(shares)\n .where(and(...where))\n }\n\n private shareFileSelect(): any[] {\n const shareRootFile: any = alias(files, 'shareRootFile')\n const parentShare: any = alias(shares, 'parentShare')\n const parentShareFile: any = alias(files, 'parentShareFile')\n const childShareFromRoot: any = alias(spacesRoots, 'childShareFromRoot')\n const shareMembers: any = alias(sharesMembers, 'shareMembers')\n const selectFile: FileSpace | SelectedFields<any, any> = {\n id: sql`IF (${shares.fileId} IS NULL AND ${shareRootFile.id} IS NOT NULL,\n ${shareRootFile.id}, ${files.id})`.as('fileId'),\n ownerId: sql`IF (${shares.spaceId} IS NOT NULL,\n NULL, ${files.ownerId})`.as('fileOwnerId'),\n name: sql`IF (${shares.fileId} IS NULL AND ${spacesRoots.id} IS NOT NULL,\n ${spacesRoots.name},\n IF(${childShareFromRoot.id} IS NOT NULL\n OR ${shares.fileId} = ${parentShare.fileId}, ${parentShare.name}, ${files.name}))`.as('fileName'),\n path: sql`IF (${shareRootFile.id} IS NOT NULL AND ${shares.fileId} IS NOT NULL,\n REGEXP_REPLACE(${filePathSQL(files)}, CONCAT(${filePathSQL(shareRootFile)}, '/'), ''),\n IF(${parentShareFile.id} IS NOT NULL AND ${shares.fileId} IS NOT NULL,\n IF(${parentShareFile.id} = ${shares.fileId}, '.',\n REGEXP_REPLACE(${filePathSQL(files)}, CONCAT(${filePathSQL(parentShareFile)}, '/'), '')),\n IF(${shares.fileId} IS NOT NULL, ${filePathSQL(files)}, '.')))`.as('filePath'),\n isDir: sql`IF (${shares.fileId} IS NULL AND ${shares.spaceRootId} IS NOT NULL,\n ${shareRootFile.isDir}, ${files.isDir})`.as('fileIsDir'),\n inTrash: sql`IF (${shares.fileId} IS NULL AND ${shares.spaceRootId} IS NOT NULL,\n ${shareRootFile.inTrash}, ${files.inTrash})`.as('fileInTrash'),\n mime: sql`IF (${shares.fileId} IS NULL AND ${shares.spaceRootId} IS NOT NULL,\n ${shareRootFile.mime}, ${files.mime})`.as('fileMime'),\n space: {\n alias: spaces.alias,\n name: spaces.name,\n root: {\n alias: sql`IF (${shares.parentId} IS NULL, ${spacesRoots.alias}, NULL)`,\n name: sql`IF (${shares.parentId} IS NULL, ${spacesRoots.name}, NULL)`\n }\n }\n }\n return [selectFile, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers]\n }\n\n private shareFileJoin(\n select: any,\n shareRootFile: any,\n parentShare: any,\n parentShareFile: any,\n childShareFromRoot: any,\n shareMembers: any\n ): MySqlSelectDynamic<any> {\n return this.db\n .select(select)\n .from(shares)\n .leftJoin(files, and(isNotNull(shares.fileId), eq(files.id, shares.fileId)))\n .leftJoin(spaces, and(isNull(shares.externalPath), isNull(shares.parentId), isNotNull(shares.spaceId), eq(spaces.id, shares.spaceId)))\n .leftJoin(\n spacesRoots,\n and(isNull(shares.externalPath), isNull(shares.parentId), isNotNull(shares.spaceRootId), eq(spacesRoots.id, shares.spaceRootId))\n )\n .leftJoin(\n childShareFromRoot,\n and(\n isNull(shares.externalPath),\n isNotNull(shares.parentId),\n isNull(shares.fileId),\n isNotNull(shares.spaceRootId),\n eq(childShareFromRoot.id, shares.spaceRootId)\n )\n )\n .leftJoin(\n shareRootFile,\n and(\n isNull(shares.externalPath),\n isNotNull(shares.spaceRootId),\n or(\n and(isNull(shares.parentId), eq(shareRootFile.id, spacesRoots.fileId)),\n and(isNotNull(shares.parentId), eq(shareRootFile.id, childShareFromRoot.fileId))\n )\n )\n )\n .leftJoin(parentShare, and(isNotNull(shares.parentId), eq(parentShare.id, shares.parentId)))\n .leftJoin(parentShareFile, and(isNotNull(shares.parentId), isNotNull(parentShare.fileId), eq(parentShareFile.id, parentShare.fileId)))\n .leftJoin(shareMembers, eq(shareMembers.shareId, shares.id))\n .$dynamic()\n }\n\n private async setShareCounts(shares: ShareFile[]) {\n if (!shares.length) return\n for (const share of shares) {\n share.counts.shares = await this.childSharesCount(share.id)\n }\n }\n}\n"],"names":["SharesQueries","uniqueShareAlias","name","alias","createSlug","count","shareExistsForAlias","shareExistsForOwner","userId","shareId","db","query","shares","findFirst","columns","id","where","and","eq","ownerId","childExistsForShareOwner","childId","isAdmin","childShare","withChildren","sql","parentId","r","execute","length","findHighestParentShare","childShareId","parentShare","withParents","selectShares","props","convertToWhere","select","from","selectParentSharesFromSpaceId","spaceId","ownerIds","isNull","spaceRootId","push","inArray","listShareLinks","user","asAdmin","shareLinksListQuery","selectFile","shareRootFile","parentShareFile","childShareFromRoot","shareMembers","shareFileSelect","linkGuest","users","externalPath","description","parent","file","link","links","email","uuid","requireAuth","nbAccess","limitAccess","permissions","isActive","language","expiresAt","createdAt","currentAccess","lastAccess","currentIp","lastIp","shareFileJoin","innerJoin","linkId","type","SHARE_TYPE","LINK","or","placeholder","prepare","shareLinks","getShareWithMembers","shareWithMembersQuery","linkUsers","enabled","modifiedAt","disabledAt","concatDistinctObjectsInArray","login","userFullNameSQL","role","USER_ROLE","GUEST","MEMBER_TYPE","USER","dateTimeUTC","groups","GROUP_TYPE","PERSONAL","PGROUP","GROUP","raw","leftJoin","groupId","isNotNull","groupBy","limit","share","members","popFromObject","createShare","dbGetInsertedId","insert","values","updateShare","set","filters","dbCheckAffectedRows","update","logger","debug","JSON","stringify","e","error","deleteShare","delete","updateMember","sharesMembers","updateMembers","add","remove","status","ACTION","ADD","userIds","groupIds","UPDATE","DELETE","m","shareEnv","shareSpaceRoot","spacesRoots","fileId","inSharesRepository","mapWith","Boolean","root","files","owner","path","filePathSQL","inTrash","space","spaces","spaceExternalRootId","shareIds","shareIdsQuery","unionAlias","union","fromUserQuery","fromGroupsQuery","fromAdminSharesQuery","as","map","listShares","sharesListQuery","hasComments","fileHasCommentsSubquerySQL","counts","shareType","COMMON","setShareCounts","listChildShares","mime","s","ShareChild","listSpaceShares","childShareSpaceRoot","membersFromChildSharesPermissions","matchPermRegexp","asParent","append","shareRootFiles","options","shareRootFilesQuery","originOwner","selectUnion","isDir","size","ctime","mtime","originOwnerLogin","originSpaceAlias","originSpaceRootExternalPath","rootId","rootAlias","rootName","rootDescription","rootEnabled","rootExternalPath","rootPermissions","rootOwnerLogin","rootOwnerEmail","rootOwnerFullName","childShareAlias","childShareName","childShareType","syncPathId","syncPaths","syncPathClientId","syncClients","syncPathClientName","info","ne","fromUser","$dynamic","fromGroups","fromAdminShares","SHARE_ALL_OPERATIONS","q","clientId","origin","ownerLogin","spaceAlias","spaceRootExternalPath","spaceGroupConcatPermissions","fullName","parse","syncs","clientName","fps","withHasComments","withShares","withSyncs","f","uniquePermissions","shareAlias","sharePermissionsQuery","rootOwnerId","rootSpaceId","rootSpaceAlias","rootPath","rootInTrash","rootExternalParentShareId","rootSpaceRootId","rootSpaceRootExternalPath","externalParentShareId","childSharesCount","clearCachePermissions","pattern","cache","genSlugKey","keys","verbose","mdel","catch","usersGroups","Logger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/shares/services/shares-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, Logger } from '@nestjs/common'\nimport { and, count, eq, inArray, isNotNull, isNull, ne, or, SelectedFields, SQL, sql } from 'drizzle-orm'\nimport { alias, MySqlSelectDynamic, union } from 'drizzle-orm/mysql-core'\nimport { MySql2PreparedQuery, MySqlQueryResult } from 'drizzle-orm/mysql2'\nimport { ACTION } from '../../../common/constants'\nimport { uniquePermissions } from '../../../common/functions'\nimport { createSlug, popFromObject } 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 {\n concatDistinctObjectsInArray,\n convertToWhere,\n dateTimeUTC,\n dbCheckAffectedRows,\n dbGetInsertedId\n} from '../../../infrastructure/database/utils'\nimport { fileHasCommentsSubquerySQL } from '../../comments/schemas/comments.schema'\nimport type { FileProps } from '../../files/interfaces/file-props.interface'\nimport type { FileSpace } from '../../files/interfaces/file-space.interface'\nimport { filePathSQL, files } from '../../files/schemas/files.schema'\nimport { links } from '../../links/schemas/links.schema'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaceGroupConcatPermissions, spaces } from '../../spaces/schemas/spaces.schema'\nimport { syncClients } from '../../sync/schemas/sync-clients.schema'\nimport { syncPaths } from '../../sync/schemas/sync-paths.schema'\nimport { GROUP_TYPE } from '../../users/constants/group'\nimport { MEMBER_TYPE } from '../../users/constants/member'\nimport { USER_ROLE } from '../../users/constants/user'\nimport type { Owner } from '../../users/interfaces/owner.interface'\nimport type { UserModel } from '../../users/models/user.model'\nimport { groups } from '../../users/schemas/groups.schema'\nimport { usersGroups } from '../../users/schemas/users-groups.schema'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport { SHARE_ALL_OPERATIONS, SHARE_TYPE } from '../constants/shares'\nimport type { ShareMemberDto } from '../dto/create-or-update-share.dto'\nimport type { ShareChildMember, ShareChildQuery } from '../interfaces/share-child.interface'\nimport type { ShareEnv } from '../interfaces/share-env.interface'\nimport type { ShareFile } from '../interfaces/share-file.interface'\nimport type { ShareLink } from '../interfaces/share-link.interface'\nimport type { ShareProps } from '../interfaces/share-props.interface'\nimport { ShareChild } from '../models/share-child.model'\nimport type { ShareMembers } from '../schemas/share-members.interface'\nimport type { Share } from '../schemas/share.interface'\nimport { sharesMembers } from '../schemas/shares-members.schema'\nimport { shares } from '../schemas/shares.schema'\n\n@Injectable()\nexport class SharesQueries {\n private readonly logger = new Logger(SharesQueries.name)\n private sharesListQuery: MySql2PreparedQuery<any> = null\n private shareIdsQuery: MySql2PreparedQuery<any> = null\n private shareLinksListQuery: MySql2PreparedQuery<any> = null\n private shareWithMembersQuery: MySql2PreparedQuery<any> = null\n private sharePermissionsQuery: MySql2PreparedQuery<any> = null\n private shareRootFilesQuery: MySql2PreparedQuery<any> = null\n\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n public readonly cache: Cache\n ) {}\n\n async uniqueShareAlias(name: string): Promise<string> {\n let alias = createSlug(name, true)\n let count = 0\n // Personal space name is reserved\n while (await this.shareExistsForAlias(alias)) {\n count += 1\n alias = `${name}-${count}`\n }\n return alias\n }\n\n shareExistsForOwner(userId: number, shareId: number): any | undefined {\n return this.db.query.shares.findFirst({ columns: { id: true }, where: and(eq(shares.id, shareId), eq(shares.ownerId, userId)) })\n }\n\n async childExistsForShareOwner(userId: number, shareId: number, childId: number, isAdmin: boolean = false): Promise<number> {\n const childShare: any = alias(shares, 'childShare')\n const withChildren: any = sql`\n WITH RECURSIVE child (id, parentId) AS\n (SELECT ${shares.id},\n ${shares.parentId}\n FROM ${shares}\n WHERE ${shares.id} = ${shareId}\n AND (${shares.ownerId} = ${userId} OR (${shares.ownerId} IS NULL AND ${+isAdmin} = 1))\n UNION\n SELECT ${childShare.id},\n ${childShare.parentId}\n FROM ${shares} AS childShare\n INNER JOIN child AS cs ON ${childShare.parentId} = cs.id)\n SELECT child.id\n FROM child\n WHERE child.id = ${childId}\n LIMIT 1\n `\n const [r]: { id: number }[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.length ? r[0].id : null\n }\n\n async findHighestParentShare(childShareId: number): Promise<number> {\n const parentShare: any = alias(shares, 'parentShare')\n const withParents: any = sql`\n WITH RECURSIVE parent (id, parentId) AS\n (SELECT ${shares.id},\n ${shares.parentId}\n FROM ${shares}\n WHERE ${shares.id} = ${childShareId}\n UNION\n SELECT ${parentShare.id},\n ${parentShare.parentId}\n FROM ${shares} AS parentShare\n INNER JOIN parent AS cs ON ${parentShare.id} = cs.parentId)\n SELECT parent.id\n FROM parent\n WHERE parent.parentId is NULL\n LIMIT 1\n `\n const [r]: { id: number }[][] = (await this.db.execute(withParents)) as MySqlQueryResult\n return r.length ? r[0].id : null\n }\n\n selectShares(props: Partial<Record<keyof Share, any>>): Promise<Partial<Share>[]> {\n const where: SQL[] = convertToWhere(shares, props)\n return this.db\n .select({ id: shares.id, ownerId: shares.ownerId, alias: shares.alias, name: shares.name })\n .from(shares)\n .where(and(...where))\n }\n\n selectParentSharesFromSpaceId(spaceId: number, ownerIds?: number[]): Promise<Partial<Share>[]> {\n const where: SQL[] = [eq(shares.spaceId, spaceId), isNull(shares.spaceRootId), isNull(shares.parentId)]\n if (ownerIds && ownerIds.length) {\n where.push(inArray(shares.ownerId, ownerIds))\n }\n return this.db\n .select({ id: shares.id, ownerId: shares.ownerId })\n .from(shares)\n .where(and(...where))\n }\n\n sharesQuotaExternalPaths(shareId?: number): Promise<Partial<Share>[]> {\n return this.db\n .select({\n id: shares.id,\n alias: shares.alias,\n storageUsage: shares.storageUsage,\n storageQuota: shares.storageQuota,\n externalPath: shares.externalPath\n })\n .from(shares)\n .where(and(isNotNull(shares.externalPath), ...[...(shareId ? [eq(shares.id, shareId)] : [])]))\n }\n\n async listShareLinks(user: UserModel, shareId: number, asAdmin?: boolean): Promise<ShareLink>\n\n async listShareLinks(user: UserModel, shareId?: number, asAdmin?: boolean): Promise<ShareLink[]>\n\n async listShareLinks(user: UserModel, shareId?: number, asAdmin: boolean = false): Promise<ShareLink[] | ShareLink> {\n if (!this.shareLinksListQuery) {\n const [selectFile, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers] = this.shareFileSelect()\n const linkGuest: any = alias(users, 'linkGuest')\n const select: ShareLink | SelectedFields<any, any> = {\n id: shares.id,\n ownerId: shares.ownerId,\n name: shares.name,\n externalPath: sql`IF (${shares.externalPath} IS NOT NULL AND ${shares.ownerId} IS NOT NULL, '.', ${shares.externalPath})`,\n description: shares.description,\n parent: {\n id: parentShare.id,\n ownerId: parentShare.ownerId,\n alias: parentShare.alias,\n name: parentShare.name\n },\n file: selectFile,\n link: {\n id: links.id,\n name: links.name,\n email: links.email,\n uuid: links.uuid,\n requireAuth: links.requireAuth,\n nbAccess: links.nbAccess,\n limitAccess: links.limitAccess,\n permissions: shareMembers.permissions,\n isActive: linkGuest.isActive,\n language: linkGuest.language,\n expiresAt: links.expiresAt,\n createdAt: links.createdAt,\n currentAccess: linkGuest.currentAccess,\n lastAccess: linkGuest.lastAccess,\n currentIp: linkGuest.currentIp,\n lastIp: linkGuest.lastIp\n }\n }\n this.shareLinksListQuery = this.shareFileJoin(select, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers)\n .innerJoin(links, eq(links.id, shareMembers.linkId))\n .innerJoin(linkGuest, eq(linkGuest.id, links.userId))\n .where(\n and(\n eq(shares.type, SHARE_TYPE.LINK),\n or(eq(sql.placeholder('shareId'), 0), eq(shares.id, sql.placeholder('shareId'))),\n or(\n eq(sql.placeholder('asAdmin'), 1),\n eq(shares.ownerId, sql.placeholder('userId')),\n and(eq(sql.placeholder('isAdmin'), 1), isNull(shares.ownerId))\n )\n )\n )\n .prepare()\n }\n const shareLinks: ShareLink[] = await this.shareLinksListQuery.execute({\n userId: user.id,\n shareId: shareId || 0,\n isAdmin: +user.isAdmin,\n asAdmin: +asAdmin\n })\n if (shareId) {\n return shareLinks.length ? shareLinks[0] : null\n }\n return shareLinks\n }\n\n async getShareWithMembers(user: UserModel, shareId: number, asAdmin = false): Promise<ShareProps> {\n // asAdmin : true if the user is the owner of the parent share or if the share is requested from the administration\n if (!this.shareWithMembersQuery) {\n const [selectFile, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers] = this.shareFileSelect()\n const linkUsers: any = alias(users, 'linkUsers')\n const select: ShareProps | SelectedFields<any, any> = {\n id: shares.id,\n ownerId: shares.ownerId,\n name: shares.name,\n alias: shares.alias,\n externalPath: sql`IF (${shares.externalPath} IS NOT NULL AND ${shares.ownerId} IS NOT NULL, '.', ${shares.externalPath})`,\n enabled: shares.enabled,\n description: shares.description,\n storageUsage: shares.storageUsage,\n storageQuota: shares.storageQuota,\n storageIndexing: shares.storageIndexing,\n createdAt: shares.createdAt,\n modifiedAt: shares.modifiedAt,\n disabledAt: shares.disabledAt,\n parent: {\n id: parentShare.id,\n ownerId: parentShare.ownerId,\n alias: parentShare.alias,\n name: parentShare.name\n },\n file: selectFile,\n users: concatDistinctObjectsInArray(users.id, {\n id: users.id,\n login: users.login,\n name: userFullNameSQL(users),\n type: sql`IF (${users.role} = ${USER_ROLE.GUEST}, ${MEMBER_TYPE.GUEST}, ${MEMBER_TYPE.USER})`,\n description: users.email,\n permissions: shareMembers.permissions,\n createdAt: dateTimeUTC(shareMembers.createdAt)\n }),\n groups: concatDistinctObjectsInArray(groups.id, {\n id: groups.id,\n name: groups.name,\n type: sql`IF (${groups.type} = ${GROUP_TYPE.PERSONAL}, ${MEMBER_TYPE.PGROUP}, ${MEMBER_TYPE.GROUP})`,\n description: groups.description,\n permissions: shareMembers.permissions,\n createdAt: dateTimeUTC(shareMembers.createdAt)\n }),\n links: concatDistinctObjectsInArray(linkUsers.id, {\n id: linkUsers.id,\n linkId: links.id,\n login: linkUsers.login,\n name: links.name,\n type: sql.raw(`'${MEMBER_TYPE.USER}'`),\n description: links.email,\n permissions: shareMembers.permissions,\n createdAt: dateTimeUTC(shareMembers.createdAt)\n })\n }\n this.shareWithMembersQuery = this.shareFileJoin(select, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers)\n .leftJoin(users, and(isNull(shareMembers.linkId), eq(users.id, shareMembers.userId)))\n .leftJoin(groups, eq(groups.id, shareMembers.groupId))\n .leftJoin(linkUsers, and(isNotNull(shareMembers.linkId), eq(linkUsers.id, shareMembers.userId)))\n .leftJoin(links, and(eq(links.userId, linkUsers.id), eq(links.id, shareMembers.linkId)))\n .where(\n and(\n eq(shares.id, sql.placeholder('shareId')),\n or(\n eq(sql.placeholder('asAdmin'), 1),\n eq(shares.ownerId, sql.placeholder('userId')),\n and(eq(sql.placeholder('isAdmin'), 1), isNull(shares.ownerId))\n )\n )\n )\n .groupBy(shares.id)\n .limit(1)\n .prepare()\n }\n const [share] = await this.shareWithMembersQuery.execute({ userId: user.id, shareId, isAdmin: +user.isAdmin, asAdmin: +asAdmin })\n if (!share) return null\n // merge members\n share.members = [...popFromObject('users', share), ...popFromObject('links', share), ...popFromObject('groups', share)]\n return share as ShareProps\n }\n\n async createShare(share: Partial<Share>): Promise<number> {\n return dbGetInsertedId(await this.db.insert(shares).values(share as Share))\n }\n\n async updateShare(id: number, set: Partial<Record<keyof Share, any>>): Promise<boolean> {\n try {\n dbCheckAffectedRows(await this.db.update(shares).set(set).where(eq(shares.id, id)).limit(1), 1)\n this.logger.debug(`${this.updateShare.name} - share (${id}) was updated : ${JSON.stringify(set)}`)\n return true\n } catch (e) {\n this.logger.error(`${this.updateShare.name} - share (${id}) was not updated : ${JSON.stringify(set)} : ${e}`)\n return false\n }\n }\n\n async deleteShare(shareId: number): Promise<boolean> {\n return dbCheckAffectedRows(await this.db.delete(shares).where(eq(shares.id, shareId)), 1)\n }\n\n async updateMember(set: Partial<Record<keyof ShareMembers, any>>, filters: Partial<Record<keyof ShareMembers, any>>): Promise<boolean> {\n const where: SQL[] = convertToWhere(sharesMembers, filters)\n try {\n dbCheckAffectedRows(\n await this.db\n .update(sharesMembers)\n .set(set)\n .where(and(...where))\n .limit(1),\n 1\n )\n this.logger.debug(`${this.updateMember.name} - ${JSON.stringify(filters)} was updated : ${JSON.stringify(set)}`)\n return true\n } catch (e) {\n this.logger.error(`${this.updateMember.name} - ${JSON.stringify(filters)} was not updated : ${JSON.stringify(set)} : ${e}`)\n return false\n }\n }\n\n async updateMembers(\n shareId: number,\n add: ShareMemberDto[],\n update: Record<string | 'object', Partial<ShareMembers> | ShareMemberDto>[],\n remove: ShareMemberDto[]\n ): Promise<Record<Exclude<ACTION, ACTION.DELETE_PERMANENTLY>, { userIds: number[]; groupIds: number[] }>> {\n // store status\n const status: Record<Exclude<ACTION, ACTION.DELETE_PERMANENTLY>, { userIds: number[]; groupIds: number[] }> = {\n [ACTION.ADD]: { userIds: [], groupIds: [] },\n [ACTION.UPDATE]: { userIds: [], groupIds: [] },\n [ACTION.DELETE]: { userIds: [], groupIds: [] }\n }\n // add\n for (const m of add) {\n try {\n dbCheckAffectedRows(\n await this.db.insert(sharesMembers).values({\n shareId: shareId,\n ...(m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? { userId: m.id } : { groupId: m.id }),\n permissions: m.permissions\n } as ShareMembers),\n 1\n )\n status[ACTION.ADD][`${m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? 'userIds' : 'groupIds'}`].push(m.id)\n this.logger.debug(`${this.updateMembers.name} - ${m.type} (${m.id}) added to the share (${shareId})`)\n } catch (e) {\n this.logger.error(`${this.updateMembers.name} - ${m.type} (${m.id}) was not added to the share (${shareId}) -> : ${e}`)\n }\n }\n // update\n for (const props of update) {\n const m: ShareMemberDto = popFromObject('object', props)\n try {\n dbCheckAffectedRows(\n await this.db\n .update(sharesMembers)\n .set(props)\n .where(\n and(\n eq(sharesMembers.shareId, shareId),\n eq(m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? sharesMembers.userId : sharesMembers.groupId, m.id)\n )\n )\n .limit(1),\n 1\n )\n status[ACTION.UPDATE][`${m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? 'userIds' : 'groupIds'}`].push(m.id)\n this.logger.debug(`${this.updateMembers.name} - ${m.type} (${m.id}) was updated on share (${shareId}) : ${JSON.stringify(props)}`)\n } catch (e) {\n this.logger.error(`${this.updateMembers.name} - ${m.type} (${m.id}) was not updated on share (${shareId}) : ${JSON.stringify(props)} : ${e}`)\n }\n }\n // remove\n for (const m of remove) {\n try {\n dbCheckAffectedRows(\n await this.db\n .delete(sharesMembers)\n .where(\n and(\n eq(sharesMembers.shareId, shareId),\n eq(m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? sharesMembers.userId : sharesMembers.groupId, m.id)\n )\n ),\n 1\n )\n status[ACTION.DELETE][`${m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST ? 'userIds' : 'groupIds'}`].push(m.id)\n this.logger.debug(`${this.updateMembers.name} - ${m.type} (${m.id}) removed from share (${shareId})`)\n } catch (e) {\n this.logger.error(`${this.updateMembers.name} - ${m.type} (${m.id}) was not removed from share (${shareId}) : ${e}`)\n }\n }\n return status\n }\n\n async shareEnv(shareId: number): Promise<Partial<ShareEnv>> {\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const select: ShareEnv | SelectedFields<any, any> = {\n id: shares.id,\n alias: shares.alias,\n enabled: shares.enabled,\n fileId: shares.fileId,\n spaceId: shares.spaceId,\n spaceRootId: shares.spaceRootId,\n inSharesRepository: sql`${1}`.mapWith(Boolean),\n root: {\n id: files.id,\n owner: { id: users.id, login: users.login },\n file: {\n path: sql`IF (${files.id} IS NOT NULL, ${filePathSQL(files)}, NULL)`,\n inTrash: files.inTrash,\n space: { id: spaces.id, alias: spaces.alias },\n root: {\n id: sql`IF (${spacesRoots.id} IS NULL, ${shareSpaceRoot.id}, ${spacesRoots.id})`,\n externalPath: sql`IF (${spacesRoots.externalPath} IS NULL,\n ${shareSpaceRoot.externalPath}, ${spacesRoots.externalPath})`\n }\n },\n externalPath: shares.externalPath\n }\n }\n const [shareEnv] = await this.db\n .select(select)\n .from(shares)\n .leftJoin(shareSpaceRoot, and(isNull(shares.externalPath), isNull(shares.fileId), eq(shareSpaceRoot.id, shares.spaceRootId)))\n .leftJoin(\n files,\n and(\n isNull(shares.externalPath),\n or(and(isNotNull(shares.fileId), eq(files.id, shares.fileId)), and(isNotNull(shareSpaceRoot.fileId), eq(files.id, shareSpaceRoot.fileId)))\n )\n )\n .leftJoin(\n spaces,\n and(\n isNull(shares.externalPath),\n or(\n and(isNotNull(files.spaceId), eq(spaces.id, files.spaceId)),\n and(isNotNull(shareSpaceRoot.spaceId), eq(spaces.id, shareSpaceRoot.spaceId))\n )\n )\n )\n .leftJoin(spacesRoots, and(isNull(shares.externalPath), isNotNull(files.spaceExternalRootId), eq(spacesRoots.id, files.spaceExternalRootId)))\n .leftJoin(users, eq(users.id, files.ownerId))\n .where(eq(shares.id, shareId))\n .execute()\n return shareEnv\n }\n\n @CacheDecorator()\n async shareIds(userId: number, isAdmin: number): Promise<number[]> {\n if (!this.shareIdsQuery) {\n const unionAlias = union(\n this.fromUserQuery({ id: shares.id }),\n this.fromGroupsQuery({ id: shares.id }),\n this.fromAdminSharesQuery({ id: shares.id })\n ).as('unionAlias')\n this.shareIdsQuery = this.db.select({ id: unionAlias.id }).from(unionAlias).groupBy(unionAlias.id).prepare()\n }\n return (await this.shareIdsQuery.execute({ userId: userId, isAdmin: +isAdmin })).map((r: { id: number }) => r.id)\n }\n\n async listShares(user: UserModel): Promise<ShareFile[]> {\n if (!this.sharesListQuery) {\n const [selectFile, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers] = this.shareFileSelect()\n const select: ShareFile | SelectedFields<any, any> = {\n id: shares.id,\n name: shares.name,\n alias: shares.alias,\n externalPath: sql`IF (${shares.externalPath} IS NOT NULL, 1, 0)`.mapWith(Boolean),\n description: shares.description,\n enabled: shares.enabled,\n createdAt: shares.createdAt,\n modifiedAt: shares.modifiedAt,\n parent: {\n id: isNotNull(parentShare.id),\n alias: parentShare.alias,\n name: parentShare.name\n },\n file: selectFile,\n hasComments: fileHasCommentsSubquerySQL(\n sql`IF (${shares.fileId} IS NULL AND ${shareRootFile.id} IS NOT NULL, ${shareRootFile.id}, ${files.id})`\n ),\n counts: {\n users: count(sql`CASE WHEN ${shareMembers.userId} IS NOT NULL AND ${shareMembers.linkId} IS NULL THEN 1 END`),\n groups: count(shareMembers.groupId),\n links: count(shareMembers.linkId)\n }\n }\n this.sharesListQuery = this.shareFileJoin(select, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers)\n .where(\n and(\n eq(shares.type, sql.placeholder('shareType')),\n or(eq(shares.ownerId, sql.placeholder('userId')), and(eq(sql.placeholder('isAdmin'), 1), isNull(shares.ownerId)))\n )\n )\n .groupBy(shares.id)\n .prepare()\n }\n const r: ShareFile[] = await this.sharesListQuery.execute({ userId: user.id, shareType: SHARE_TYPE.COMMON, isAdmin: +user.isAdmin })\n await this.setShareCounts(r)\n return r\n }\n\n async listChildShares(userId: number, shareId: number, isAdmin: number): Promise<ShareChild[]> {\n const childShare: any = alias(shares, 'childShare')\n const withChildren: any = sql`\n WITH RECURSIVE child (id, parentId, ownerId, type, name, alias, fileId) AS\n (SELECT ${shares.id},\n ${shares.parentId},\n ${shares.ownerId},\n ${shares.type},\n ${shares.name},\n ${shares.alias},\n ${shares.fileId}\n FROM ${shares}\n WHERE ${shares.id} = ${shareId}\n AND (${shares.ownerId} = ${userId} OR (${isAdmin} = 1 AND ${shares.ownerId} IS NULL))\n UNION\n SELECT ${childShare.id},\n ${childShare.parentId},\n ${childShare.ownerId},\n ${childShare.type},\n ${childShare.name},\n ${childShare.alias},\n ${childShare.fileId}\n FROM ${shares} AS childShare\n INNER JOIN child AS cs ON ${childShare.parentId} = cs.id)\n SELECT child.id,\n child.alias,\n child.name,\n child.type,\n child.parentId,\n ${users.login} AS ownerLogin,\n ${userFullNameSQL(users)} AS ownerFullName,\n ${users.email} AS ownerEmail,\n ${files.mime} AS fileMime\n FROM child\n LEFT JOIN ${users} ON child.ownerId = ${users.id}\n LEFT JOIN ${files} ON child.fileId = ${files.id}\n WHERE child.id != ${shareId}\n `\n const [r]: ShareChildQuery[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.map((s) => new ShareChild(s))\n }\n\n async listSpaceShares(spaceId: number): Promise<ShareChild[]> {\n const childShare: any = alias(shares, 'childShare')\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const childShareSpaceRoot: any = alias(spacesRoots, 'childShareSpaceRoot')\n const withChildren: any = sql`\n WITH RECURSIVE child (id, parentId, ownerId, type, name, alias, fileId) AS\n (SELECT ${shares.id},\n ${shares.parentId},\n ${shares.ownerId},\n ${shares.type},\n ${shares.name},\n ${shares.alias},\n COALESCE(${shares.fileId}, ${shareSpaceRoot.fileId}) AS fileId\n FROM ${shares}\n LEFT JOIN ${spacesRoots} AS shareSpaceRoot ON ${shares.spaceRootId} = ${shareSpaceRoot.id}\n WHERE ${shares.spaceId} = ${spaceId}\n UNION\n SELECT ${childShare.id},\n ${childShare.parentId},\n ${childShare.ownerId},\n ${childShare.type},\n ${childShare.name},\n ${childShare.alias},\n COALESCE(${childShare.fileId}, ${childShareSpaceRoot.fileId}) AS fileId\n FROM ${shares} AS childShare\n INNER JOIN child AS cs ON ${childShare.parentId} = cs.id\n LEFT JOIN ${spacesRoots} AS childShareSpaceRoot ON ${childShare.spaceRootId} = ${childShareSpaceRoot.id})\n SELECT child.id,\n child.alias,\n child.name,\n child.type,\n child.parentId,\n ${users.login} AS ownerLogin,\n ${userFullNameSQL(users)} AS ownerFullName,\n ${users.email} AS ownerEmail,\n ${files.mime} AS fileMime\n FROM child\n LEFT JOIN ${users} ON child.ownerId = ${users.id}\n LEFT JOIN ${files} ON child.fileId = ${files.id}\n `\n const [r]: ShareChildQuery[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.map((s) => new ShareChild(s))\n }\n\n async membersFromChildSharesPermissions(\n shareId: number,\n userIds: number[] | 'all',\n matchPermRegexp?: string,\n asParent: boolean = true\n ): Promise<ShareChildMember[]> {\n const childShare: any = alias(shares, 'childShare')\n const withChildren: any = sql`\n WITH RECURSIVE children (id, alias, name) AS\n (SELECT ${shares.id}, ${shares.alias}, ${shares.name}\n FROM ${shares}\n WHERE ${asParent ? shares.parentId : shares.id} = ${shareId}\n AND ${userIds === 'all' ? 1 : inArray(shares.ownerId, userIds)}\n UNION\n SELECT ${childShare.id}, ${childShare.alias}, ${childShare.name}\n FROM ${shares} AS childShare\n INNER JOIN children AS cs ON ${childShare.parentId} = cs.id)\n SELECT ${sharesMembers.id} as id,\n ${sharesMembers.userId} as userId,\n ${sharesMembers.permissions} as userPermissions,\n ${sharesMembers.shareId},\n children.alias as shareAlias,\n children.name as shareName\n FROM children\n INNER JOIN ${sharesMembers} ON children.id = ${sharesMembers.shareId}\n `\n if (matchPermRegexp) {\n withChildren.append(sql`WHERE ${sharesMembers.permissions} REGEXP ${matchPermRegexp}`)\n }\n const [r]: ShareChildMember[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r\n }\n\n async shareRootFiles(user: UserModel, options: { withShares?: boolean; withHasComments?: boolean; withSyncs?: boolean }): Promise<FileProps[]> {\n if (!this.shareRootFilesQuery) {\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const originOwner: any = alias(users, 'originOwner')\n const childShare: any = alias(shares, 'childShare')\n const selectUnion: FileProps | SelectedFields<any, any> = {\n id: files.id,\n path: sql`IF (${files.id} IS NOT NULL, ${filePathSQL(files)}, '')`.as('path'),\n isDir: files.isDir,\n inTrash: files.inTrash,\n size: files.size,\n ctime: files.ctime,\n mtime: files.mtime,\n mime: files.mime,\n originOwnerLogin: sql`${originOwner.login}`.as('originOwnerLogin'),\n originSpaceAlias: sql`${spaces.alias}`.as('originSpaceAlias'),\n originSpaceRootExternalPath: sql`IF (${spacesRoots.externalPath} IS NULL,\n ${shareSpaceRoot.externalPath}, ${spacesRoots.externalPath})`.as('originSpaceRootExternalPath'),\n rootId: sql`${shares.id}`.as('rootId'),\n rootAlias: shares.alias,\n rootName: shares.name,\n rootDescription: shares.description,\n rootEnabled: shares.enabled,\n rootExternalPath: shares.externalPath,\n rootPermissions: sharesMembers.permissions,\n rootOwnerLogin: sql`${users.login}`.as('rootOwnerLogin'),\n rootOwnerEmail: sql`${users.email}`.as('rootOwnerEmail'),\n rootOwnerFullName: userFullNameSQL(users).as('rootOwnerFullName'),\n childShareId: sql`${childShare.id}`.as('childShareId'),\n childShareAlias: sql`${childShare.alias}`.as('childShareAlias'),\n childShareName: sql`${childShare.name}`.as('childShareName'),\n childShareType: sql`${childShare.type}`.as('childShareType'),\n syncPathId: sql`${syncPaths.id}`.as('syncPathId'),\n syncPathClientId: sql`${syncClients.id}`.as('syncPathClientId'),\n syncPathClientName: sql`JSON_VALUE(${syncClients.info}, '$.node')`.as('syncPathClientName')\n }\n const filters: SQL[] = [or(isNull(shares.ownerId), ne(shares.ownerId, sql.placeholder('userId')))]\n const fromUser = this.fromUserQuery(selectUnion, filters).$dynamic()\n const fromGroups = this.fromGroupsQuery(selectUnion, filters).$dynamic()\n const fromAdminShares = this.fromAdminSharesQuery({ ...selectUnion, rootPermissions: sql.raw(`'${SHARE_ALL_OPERATIONS}'`) }, filters).$dynamic()\n for (const q of [fromUser, fromGroups, fromAdminShares]) {\n q.leftJoin(shareSpaceRoot, and(isNull(shares.externalPath), isNull(shares.fileId), eq(shareSpaceRoot.id, shares.spaceRootId)))\n .leftJoin(\n files,\n or(\n // if the child share is from a share with an external path, the child share should have an external path and a fileId\n and(isNotNull(shares.fileId), eq(files.id, shares.fileId)),\n and(isNull(shares.externalPath), isNull(shares.fileId), isNotNull(shareSpaceRoot.fileId), eq(files.id, shareSpaceRoot.fileId))\n )\n )\n .leftJoin(spaces, and(isNull(shares.externalPath), isNotNull(files.spaceId), eq(spaces.id, files.spaceId)))\n .leftJoin(spacesRoots, and(isNull(shares.externalPath), eq(spacesRoots.id, files.spaceExternalRootId)))\n .leftJoin(\n childShare,\n and(\n eq(sql.placeholder('withShares'), sql.raw('1')),\n eq(childShare.ownerId, sql.placeholder('userId')),\n eq(childShare.parentId, shares.id),\n or(\n and(isNull(childShare.externalPath), isNotNull(childShare.fileId), eq(childShare.fileId, shares.fileId)),\n and(\n isNull(childShare.externalPath),\n isNull(childShare.fileId),\n eq(childShare.spaceId, shares.spaceId),\n eq(childShare.spaceRootId, shares.spaceRootId)\n ),\n and(isNotNull(childShare.externalPath), isNull(childShare.fileId), eq(shares.externalPath, childShare.externalPath))\n )\n )\n )\n .leftJoin(syncClients, and(eq(sql.placeholder('withSyncs'), sql.raw('1')), eq(syncClients.ownerId, sql.placeholder('userId'))))\n .leftJoin(\n syncPaths,\n and(\n eq(sql.placeholder('withSyncs'), sql.raw('1')),\n eq(syncPaths.clientId, syncClients.id),\n isNull(syncPaths.fileId),\n eq(syncPaths.shareId, shares.id)\n )\n )\n .leftJoin(users, eq(users.id, shares.ownerId))\n .leftJoin(originOwner, and(isNull(shares.externalPath), eq(originOwner.id, files.ownerId)))\n }\n const unionAlias = union(fromUser, fromGroups, fromAdminShares).as('union_alias')\n const select: FileProps | SelectedFields<any, any> = {\n id: unionAlias.id,\n path: unionAlias.path,\n isDir: unionAlias.isDir,\n inTrash: unionAlias.inTrash,\n size: unionAlias.size,\n ctime: unionAlias.ctime,\n mtime: unionAlias.mtime,\n mime: unionAlias.mime,\n origin: {\n ownerLogin: unionAlias.originOwnerLogin,\n spaceAlias: unionAlias.originSpaceAlias,\n spaceRootExternalPath: unionAlias.originSpaceRootExternalPath\n },\n root: {\n id: unionAlias.rootId,\n alias: unionAlias.rootAlias,\n name: unionAlias.rootName,\n description: unionAlias.rootDescription,\n enabled: unionAlias.rootEnabled,\n externalPath: unionAlias.rootExternalPath,\n permissions: spaceGroupConcatPermissions(unionAlias.rootPermissions),\n owner: { login: unionAlias.rootOwnerLogin, email: unionAlias.rootOwnerEmail, fullName: unionAlias.rootOwnerFullName } as Owner\n },\n shares: sql`IF (${sql.placeholder('withShares')}, ${concatDistinctObjectsInArray(unionAlias.childShareId, {\n id: unionAlias.childShareId,\n alias: unionAlias.childShareAlias,\n name: unionAlias.childShareName,\n type: unionAlias.childShareType\n })}, '[]')`.mapWith(JSON.parse),\n syncs: sql`IF (${sql.placeholder('withSyncs')}, ${concatDistinctObjectsInArray(unionAlias.syncPathId, {\n id: unionAlias.syncPathId,\n clientId: unionAlias.syncPathClientId,\n clientName: unionAlias.syncPathClientName\n })}, '[]')`.mapWith(JSON.parse),\n hasComments: sql<boolean>`IF (${sql.placeholder('withHasComments')}, ${fileHasCommentsSubquerySQL(unionAlias.id)}, 0)`.mapWith(Boolean)\n }\n this.shareRootFilesQuery = this.db.select(select).from(unionAlias).groupBy(unionAlias.rootId).prepare()\n }\n const fps: FileProps[] = await this.shareRootFilesQuery.execute({\n userId: user.id,\n isAdmin: +user.isAdmin,\n withHasComments: +!!options.withHasComments,\n withShares: +!!options.withShares,\n withSyncs: +!!options.withSyncs\n })\n for (const f of fps) {\n f.root.permissions = uniquePermissions(f.root.permissions)\n }\n return fps\n }\n\n @CacheDecorator()\n async permissions(userId: number, shareAlias: string, isAdmin: number = 0): Promise<Partial<SpaceEnv>> {\n if (!this.sharePermissionsQuery) {\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const selectUnion: SpaceEnv | SelectedFields<any, any> = {\n id: shares.id,\n alias: shares.alias,\n name: shares.name,\n enabled: shares.enabled,\n permissions: sharesMembers.permissions,\n rootId: sql`${files.id}`.as('rootId'),\n rootOwnerId: sql`${users.id}`.as('rootOwnerId'),\n rootOwnerLogin: users.login,\n rootSpaceId: sql`${spaces.id}`.as('rootSpaceId'),\n rootSpaceAlias: sql`${spaces.alias}`.as('rootSpaceAlias'),\n rootPath: sql`IF (${files.id} IS NOT NULL, ${filePathSQL(files)}, NULL)`.as('rootPath'),\n rootInTrash: files.inTrash,\n rootExternalPath: shares.externalPath,\n rootExternalParentShareId: sql`IF (${shares.externalPath} IS NOT NULL, ${shares.parentId}, NULL)`.as('rootExternalParentShareId'),\n rootSpaceRootId: sql`IF (${spacesRoots.id} IS NULL, ${shareSpaceRoot.id}, ${spacesRoots.id})`.as('rootSpaceRootId'),\n rootSpaceRootExternalPath: sql`IF (${spacesRoots.externalPath} IS NULL,\n ${shareSpaceRoot.externalPath}, ${spacesRoots.externalPath})`.as('rootSpaceRootExternalPath')\n }\n const filters: SQL[] = [eq(shares.alias, sql.placeholder('shareAlias'))]\n const fromUser = this.fromUserQuery(selectUnion, filters).$dynamic()\n const fromGroups = this.fromGroupsQuery(selectUnion, filters).$dynamic()\n const fromAdminShares = this.fromAdminSharesQuery({ ...selectUnion, permissions: sql.raw(`'${SHARE_ALL_OPERATIONS}'`) }, filters).$dynamic()\n for (const q of [fromUser, fromGroups, fromAdminShares]) {\n q.leftJoin(shareSpaceRoot, and(isNull(shares.externalPath), isNull(shares.fileId), eq(shareSpaceRoot.id, shares.spaceRootId)))\n .leftJoin(\n files,\n or(\n // in case of share child from a share with external path, child share should have an external path and a fileId\n and(isNotNull(shares.fileId), eq(files.id, shares.fileId)),\n and(isNull(shares.externalPath), isNotNull(shareSpaceRoot.fileId), eq(files.id, shareSpaceRoot.fileId))\n )\n )\n .leftJoin(\n spaces,\n and(\n isNull(shares.externalPath),\n or(\n and(isNotNull(files.spaceId), eq(spaces.id, files.spaceId)),\n and(isNotNull(shareSpaceRoot.spaceId), eq(spaces.id, shareSpaceRoot.spaceId))\n )\n )\n )\n .leftJoin(spacesRoots, and(isNull(shares.externalPath), eq(spacesRoots.id, files.spaceExternalRootId)))\n .leftJoin(users, eq(users.id, files.ownerId))\n }\n const unionAlias = union(fromUser, fromGroups, fromAdminShares).as('union_alias')\n const select: SpaceEnv | SelectedFields<any, any> = {\n id: unionAlias.id,\n alias: unionAlias.alias,\n name: unionAlias.name,\n enabled: unionAlias.enabled,\n permissions: spaceGroupConcatPermissions(unionAlias.permissions),\n root: {\n id: unionAlias.rootId,\n owner: { id: unionAlias.rootOwnerId, login: unionAlias.rootOwnerLogin },\n file: {\n path: unionAlias.rootPath,\n inTrash: unionAlias.rootInTrash,\n space: { id: unionAlias.rootSpaceId, alias: unionAlias.rootSpaceAlias },\n root: { id: unionAlias.rootSpaceRootId, externalPath: unionAlias.rootSpaceRootExternalPath }\n },\n externalPath: unionAlias.rootExternalPath,\n externalParentShareId: unionAlias.rootExternalParentShareId\n }\n }\n this.sharePermissionsQuery = this.db.select(select).from(unionAlias).groupBy(unionAlias.id).limit(1).prepare()\n }\n // `userId` is used in `fromUserQuery` and `fromGroupsQuery` function\n // `isAdmin` is used in `fromAdminSharesQuery` function\n const [r]: Partial<SpaceEnv>[] = await this.sharePermissionsQuery.execute({ userId, shareAlias, isAdmin })\n if (r) {\n r.permissions = uniquePermissions(r.permissions)\n }\n return r\n }\n\n @CacheDecorator(900, true)\n async childSharesCount(shareId: number): Promise<number> {\n const childShare: any = alias(shares, 'childShare')\n const withChildren: any = sql`\n WITH RECURSIVE children (id, parentId) AS\n (SELECT ${shares.id}, ${shares.parentId}\n FROM ${shares}\n WHERE ${shares.parentId} IS NOT NULL\n AND ${shares.parentId} = ${shareId}\n UNION\n SELECT ${childShare.id}, cs.parentId\n FROM ${shares} AS childShare\n INNER JOIN children AS cs ON ${childShare.parentId} = cs.id)\n SELECT COUNT(children.id) as count\n FROM children\n GROUP BY parentId\n `\n const [r]: { count: number }[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.length ? r[0].count : 0\n }\n\n async clearCachePermissions(shareAlias: string, userIds: number[]) {\n // `permissions` argument must match with `this.permissions.name` function\n for (const userId of userIds) {\n const pattern = this.cache.genSlugKey(this.constructor.name, this.permissions.name, userId, shareAlias, '*')\n const keys = await this.cache.keys(pattern)\n if (keys.length) {\n this.logger.verbose(`${this.clearCachePermissions.name} - ${JSON.stringify(keys)}`)\n this.cache.mdel(keys).catch((e: Error) => this.logger.error(`${this.clearCachePermissions.name} - ${e}`))\n }\n }\n }\n\n private shareExistsForAlias(alias: string): any | undefined {\n return this.db.query.shares.findFirst({ columns: { id: true }, where: eq(shares.alias, alias) })\n }\n\n private fromUserQuery(select: SelectedFields<any, any>, filters: SQL[] = []) {\n const where: SQL[] = [eq(sharesMembers.userId, sql.placeholder('userId')), ...filters]\n return this.db\n .select(select)\n .from(sharesMembers)\n .innerJoin(shares, eq(sharesMembers.shareId, shares.id))\n .where(and(...where))\n }\n\n private fromGroupsQuery(select: SelectedFields<any, any>, filters: SQL[] = []) {\n const where: SQL[] = [eq(sharesMembers.groupId, usersGroups.groupId), ...filters]\n return this.db\n .select(select)\n .from(sharesMembers)\n .innerJoin(usersGroups, eq(usersGroups.userId, sql.placeholder('userId')))\n .innerJoin(shares, eq(sharesMembers.shareId, shares.id))\n .where(and(...where))\n }\n\n private fromAdminSharesQuery(select: SelectedFields<any, any>, filters: SQL[] = []) {\n const where: SQL[] = [eq(sql.placeholder('isAdmin'), sql.raw('1')), isNull(shares.ownerId), ...filters]\n return this.db\n .select(select)\n .from(shares)\n .where(and(...where))\n }\n\n private shareFileSelect(): any[] {\n const shareRootFile: any = alias(files, 'shareRootFile')\n const parentShare: any = alias(shares, 'parentShare')\n const parentShareFile: any = alias(files, 'parentShareFile')\n const childShareFromRoot: any = alias(spacesRoots, 'childShareFromRoot')\n const shareMembers: any = alias(sharesMembers, 'shareMembers')\n const selectFile: FileSpace | SelectedFields<any, any> = {\n id: sql`IF (${shares.fileId} IS NULL AND ${shareRootFile.id} IS NOT NULL,\n ${shareRootFile.id}, ${files.id})`.as('fileId'),\n ownerId: sql`IF (${shares.spaceId} IS NOT NULL,\n NULL, ${files.ownerId})`.as('fileOwnerId'),\n name: sql`IF (${shares.fileId} IS NULL AND ${spacesRoots.id} IS NOT NULL,\n ${spacesRoots.name},\n IF(${childShareFromRoot.id} IS NOT NULL\n OR ${shares.fileId} = ${parentShare.fileId}, ${parentShare.name}, ${files.name}))`.as('fileName'),\n path: sql`IF (${shareRootFile.id} IS NOT NULL AND ${shares.fileId} IS NOT NULL,\n REGEXP_REPLACE(${filePathSQL(files)}, CONCAT(${filePathSQL(shareRootFile)}, '/'), ''),\n IF(${parentShareFile.id} IS NOT NULL AND ${shares.fileId} IS NOT NULL,\n IF(${parentShareFile.id} = ${shares.fileId}, '.',\n REGEXP_REPLACE(${filePathSQL(files)}, CONCAT(${filePathSQL(parentShareFile)}, '/'), '')),\n IF(${shares.fileId} IS NOT NULL, ${filePathSQL(files)}, '.')))`.as('filePath'),\n isDir: sql`IF (${shares.fileId} IS NULL AND ${shares.spaceRootId} IS NOT NULL,\n ${shareRootFile.isDir}, ${files.isDir})`.as('fileIsDir'),\n inTrash: sql`IF (${shares.fileId} IS NULL AND ${shares.spaceRootId} IS NOT NULL,\n ${shareRootFile.inTrash}, ${files.inTrash})`.as('fileInTrash'),\n mime: sql`IF (${shares.fileId} IS NULL AND ${shares.spaceRootId} IS NOT NULL,\n ${shareRootFile.mime}, ${files.mime})`.as('fileMime'),\n space: {\n alias: spaces.alias,\n name: spaces.name,\n root: {\n alias: sql`IF (${shares.parentId} IS NULL, ${spacesRoots.alias}, NULL)`,\n name: sql`IF (${shares.parentId} IS NULL, ${spacesRoots.name}, NULL)`\n }\n }\n }\n return [selectFile, shareRootFile, parentShare, parentShareFile, childShareFromRoot, shareMembers]\n }\n\n private shareFileJoin(\n select: any,\n shareRootFile: any,\n parentShare: any,\n parentShareFile: any,\n childShareFromRoot: any,\n shareMembers: any\n ): MySqlSelectDynamic<any> {\n return this.db\n .select(select)\n .from(shares)\n .leftJoin(files, and(isNotNull(shares.fileId), eq(files.id, shares.fileId)))\n .leftJoin(spaces, and(isNull(shares.externalPath), isNull(shares.parentId), isNotNull(shares.spaceId), eq(spaces.id, shares.spaceId)))\n .leftJoin(\n spacesRoots,\n and(isNull(shares.externalPath), isNull(shares.parentId), isNotNull(shares.spaceRootId), eq(spacesRoots.id, shares.spaceRootId))\n )\n .leftJoin(\n childShareFromRoot,\n and(\n isNull(shares.externalPath),\n isNotNull(shares.parentId),\n isNull(shares.fileId),\n isNotNull(shares.spaceRootId),\n eq(childShareFromRoot.id, shares.spaceRootId)\n )\n )\n .leftJoin(\n shareRootFile,\n and(\n isNull(shares.externalPath),\n isNotNull(shares.spaceRootId),\n or(\n and(isNull(shares.parentId), eq(shareRootFile.id, spacesRoots.fileId)),\n and(isNotNull(shares.parentId), eq(shareRootFile.id, childShareFromRoot.fileId))\n )\n )\n )\n .leftJoin(parentShare, and(isNotNull(shares.parentId), eq(parentShare.id, shares.parentId)))\n .leftJoin(parentShareFile, and(isNotNull(shares.parentId), isNotNull(parentShare.fileId), eq(parentShareFile.id, parentShare.fileId)))\n .leftJoin(shareMembers, eq(shareMembers.shareId, shares.id))\n .$dynamic()\n }\n\n private async setShareCounts(shares: ShareFile[]) {\n if (!shares.length) return\n for (const share of shares) {\n share.counts.shares = await this.childSharesCount(share.id)\n }\n }\n}\n"],"names":["SharesQueries","uniqueShareAlias","name","alias","createSlug","count","shareExistsForAlias","shareExistsForOwner","userId","shareId","db","query","shares","findFirst","columns","id","where","and","eq","ownerId","childExistsForShareOwner","childId","isAdmin","childShare","withChildren","sql","parentId","r","execute","length","findHighestParentShare","childShareId","parentShare","withParents","selectShares","props","convertToWhere","select","from","selectParentSharesFromSpaceId","spaceId","ownerIds","isNull","spaceRootId","push","inArray","sharesQuotaExternalPaths","storageUsage","storageQuota","externalPath","isNotNull","listShareLinks","user","asAdmin","shareLinksListQuery","selectFile","shareRootFile","parentShareFile","childShareFromRoot","shareMembers","shareFileSelect","linkGuest","users","description","parent","file","link","links","email","uuid","requireAuth","nbAccess","limitAccess","permissions","isActive","language","expiresAt","createdAt","currentAccess","lastAccess","currentIp","lastIp","shareFileJoin","innerJoin","linkId","type","SHARE_TYPE","LINK","or","placeholder","prepare","shareLinks","getShareWithMembers","shareWithMembersQuery","linkUsers","enabled","storageIndexing","modifiedAt","disabledAt","concatDistinctObjectsInArray","login","userFullNameSQL","role","USER_ROLE","GUEST","MEMBER_TYPE","USER","dateTimeUTC","groups","GROUP_TYPE","PERSONAL","PGROUP","GROUP","raw","leftJoin","groupId","groupBy","limit","share","members","popFromObject","createShare","dbGetInsertedId","insert","values","updateShare","set","dbCheckAffectedRows","update","logger","debug","JSON","stringify","e","error","deleteShare","delete","updateMember","filters","sharesMembers","updateMembers","add","remove","status","ACTION","ADD","userIds","groupIds","UPDATE","DELETE","m","shareEnv","shareSpaceRoot","spacesRoots","fileId","inSharesRepository","mapWith","Boolean","root","files","owner","path","filePathSQL","inTrash","space","spaces","spaceExternalRootId","shareIds","shareIdsQuery","unionAlias","union","fromUserQuery","fromGroupsQuery","fromAdminSharesQuery","as","map","listShares","sharesListQuery","hasComments","fileHasCommentsSubquerySQL","counts","shareType","COMMON","setShareCounts","listChildShares","mime","s","ShareChild","listSpaceShares","childShareSpaceRoot","membersFromChildSharesPermissions","matchPermRegexp","asParent","append","shareRootFiles","options","shareRootFilesQuery","originOwner","selectUnion","isDir","size","ctime","mtime","originOwnerLogin","originSpaceAlias","originSpaceRootExternalPath","rootId","rootAlias","rootName","rootDescription","rootEnabled","rootExternalPath","rootPermissions","rootOwnerLogin","rootOwnerEmail","rootOwnerFullName","childShareAlias","childShareName","childShareType","syncPathId","syncPaths","syncPathClientId","syncClients","syncPathClientName","info","ne","fromUser","$dynamic","fromGroups","fromAdminShares","SHARE_ALL_OPERATIONS","q","clientId","origin","ownerLogin","spaceAlias","spaceRootExternalPath","spaceGroupConcatPermissions","fullName","parse","syncs","clientName","fps","withHasComments","withShares","withSyncs","f","uniquePermissions","shareAlias","sharePermissionsQuery","rootOwnerId","rootSpaceId","rootSpaceAlias","rootPath","rootInTrash","rootExternalParentShareId","rootSpaceRootId","rootSpaceRootExternalPath","externalParentShareId","childSharesCount","clearCachePermissions","pattern","cache","genSlugKey","keys","verbose","mdel","catch","usersGroups","Logger"],"mappings":"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"}
|
|
@@ -14,6 +14,9 @@ function _export(target, all) {
|
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
16
|
_export(exports, {
|
|
17
|
+
get CACHE_QUOTA_SHARE_PREFIX () {
|
|
18
|
+
return CACHE_QUOTA_SHARE_PREFIX;
|
|
19
|
+
},
|
|
17
20
|
get CACHE_QUOTA_SPACE_PREFIX () {
|
|
18
21
|
return CACHE_QUOTA_SPACE_PREFIX;
|
|
19
22
|
},
|
|
@@ -26,6 +29,7 @@ _export(exports, {
|
|
|
26
29
|
});
|
|
27
30
|
const CACHE_QUOTA_USER_PREFIX = 'quota-user';
|
|
28
31
|
const CACHE_QUOTA_SPACE_PREFIX = 'quota-space';
|
|
32
|
+
const CACHE_QUOTA_SHARE_PREFIX = 'quota-share';
|
|
29
33
|
const CACHE_QUOTA_TTL = 86400 // 1 day
|
|
30
34
|
;
|
|
31
35
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/spaces/constants/cache.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\n// cache quota key = `(quota-user|quota-space)-${id}` => number\nexport const CACHE_QUOTA_USER_PREFIX = 'quota-user'\nexport const CACHE_QUOTA_SPACE_PREFIX = 'quota-space'\nexport const CACHE_QUOTA_TTL = 86400 // 1 day\n"],"names":["CACHE_QUOTA_SPACE_PREFIX","CACHE_QUOTA_TTL","CACHE_QUOTA_USER_PREFIX"],"mappings":"AAAA;;;;CAIC,GAED,+DAA+D;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/spaces/constants/cache.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\n// cache quota key = `(quota-user|quota-space)-${id}` => number\nexport const CACHE_QUOTA_USER_PREFIX = 'quota-user'\nexport const CACHE_QUOTA_SPACE_PREFIX = 'quota-space'\nexport const CACHE_QUOTA_SHARE_PREFIX = 'quota-share'\nexport const CACHE_QUOTA_TTL = 86400 // 1 day\n"],"names":["CACHE_QUOTA_SHARE_PREFIX","CACHE_QUOTA_SPACE_PREFIX","CACHE_QUOTA_TTL","CACHE_QUOTA_USER_PREFIX"],"mappings":"AAAA;;;;CAIC,GAED,+DAA+D;;;;;;;;;;;;QAGlDA;eAAAA;;QADAC;eAAAA;;QAEAC;eAAAA;;QAHAC;eAAAA;;;AAAN,MAAMA,0BAA0B;AAChC,MAAMF,2BAA2B;AACjC,MAAMD,2BAA2B;AACjC,MAAME,kBAAkB,MAAM,QAAQ"}
|
|
@@ -112,6 +112,11 @@ _ts_decorate([
|
|
|
112
112
|
(0, _classvalidator.IsInt)(),
|
|
113
113
|
_ts_metadata("design:type", Number)
|
|
114
114
|
], CreateOrUpdateSpaceDto.prototype, "storageQuota", void 0);
|
|
115
|
+
_ts_decorate([
|
|
116
|
+
(0, _classvalidator.IsOptional)(),
|
|
117
|
+
(0, _classvalidator.IsBoolean)(),
|
|
118
|
+
_ts_metadata("design:type", Boolean)
|
|
119
|
+
], CreateOrUpdateSpaceDto.prototype, "storageIndexing", void 0);
|
|
115
120
|
_ts_decorate([
|
|
116
121
|
(0, _classvalidator.IsOptional)(),
|
|
117
122
|
(0, _classvalidator.IsArray)(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/spaces/dto/create-or-update-space.dto.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 { Transform, Type } from 'class-transformer'\nimport { ArrayMinSize, IsArray, IsBoolean, IsInt, IsNotEmpty, IsOptional, IsString, ValidateNested } from 'class-validator'\nimport { sanitizeName } from '../../files/utils/files'\nimport { CreateOrUpdateLinkDto } from '../../links/dto/create-or-update-link.dto'\nimport { MEMBER_TYPE, MEMBER_TYPE_REVERSE } from '../../users/constants/member'\nimport { SPACE_ROLE } from '../constants/spaces'\nimport { SpaceRootDto } from './space-roots.dto'\n\nexport class SpaceMemberDto {\n @IsNotEmpty()\n @IsInt()\n id: number\n\n @IsNotEmpty()\n @IsString()\n @Transform(({ value }) => MEMBER_TYPE_REVERSE[value])\n type: MEMBER_TYPE\n\n @IsNotEmpty()\n @IsInt()\n spaceRole?: SPACE_ROLE = SPACE_ROLE.IS_MEMBER\n\n @IsOptional()\n @IsString()\n permissions?: string = ''\n\n @IsOptional()\n @IsInt()\n linkId?: number\n\n @IsOptional()\n @ValidateNested()\n @Type(() => CreateOrUpdateLinkDto)\n linkSettings?: CreateOrUpdateLinkDto = null\n}\n\nexport class CreateOrUpdateSpaceDto {\n @IsOptional()\n @IsInt()\n id?: number\n\n @IsNotEmpty()\n @IsString()\n @Transform(({ value }) => (value ? sanitizeName(value.trim()) : ''))\n name: string\n\n @IsOptional()\n @IsString()\n @Transform(({ value }) => (value ? sanitizeName(value.trim()) : ''))\n alias?: string\n\n @IsOptional()\n @IsString()\n description?: string\n\n @IsOptional()\n @IsBoolean()\n enabled?: boolean\n\n @IsOptional()\n @IsInt()\n storageQuota?: number = null\n\n @IsOptional()\n @IsArray()\n @ValidateNested({ each: true })\n @Type(() => SpaceRootDto)\n roots?: SpaceRootDto[]\n\n @IsArray()\n @ArrayMinSize(1)\n @Transform(({ value }) =>\n value.map((m: SpaceMemberDto) => {\n m.spaceRole = SPACE_ROLE.IS_MANAGER\n return m\n })\n )\n @ValidateNested({ each: true })\n @Type(() => SpaceMemberDto)\n // contains managers (users)\n managers: SpaceMemberDto[]\n\n @IsOptional()\n @IsArray()\n @Transform(({ value }) =>\n value.map((m: SpaceMemberDto) => {\n m.spaceRole = SPACE_ROLE.IS_MEMBER\n return m\n })\n )\n @ValidateNested({ each: true })\n @Type(() => SpaceMemberDto)\n // contains members (users, guests, groups, personal groups)\n members?: SpaceMemberDto[]\n\n @IsOptional()\n @IsArray()\n @Transform(({ value }) =>\n value.map((m: SpaceMemberDto) => {\n m.spaceRole = SPACE_ROLE.IS_MEMBER\n return m\n })\n )\n @ValidateNested({ each: true })\n @Type(() => SpaceMemberDto)\n // contains links\n links?: SpaceMemberDto[]\n}\n"],"names":["CreateOrUpdateSpaceDto","SpaceMemberDto","spaceRole","SPACE_ROLE","IS_MEMBER","permissions","linkSettings","value","MEMBER_TYPE_REVERSE","CreateOrUpdateLinkDto","storageQuota","sanitizeName","trim","each","SpaceRootDto","map","m","IS_MANAGER"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsCYA;eAAAA;;QA5BAC;eAAAA;;;kCARmB;gCAC0E;uBAC7E;uCACS;wBACW;wBACtB;+BACE;;;;;;;;;;AAEtB,IAAA,AAAMA,iBAAN,MAAMA;;aAYXC,YAAyBC,kBAAU,CAACC,SAAS;aAI7CC,cAAuB;aASvBC,eAAuC;;AACzC;;;;;;;;;sCAnBc,EAAEC,KAAK,EAAE,GAAKC,2BAAmB,CAACD,MAAM;;;;;;;;;;;;;;;;;;;;;oCAiBxCE,4CAAqB;;;AAI5B,IAAA,AAAMT,yBAAN,MAAMA;;aAyBXU,eAAwB;;
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/spaces/dto/create-or-update-space.dto.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 { Transform, Type } from 'class-transformer'\nimport { ArrayMinSize, IsArray, IsBoolean, IsInt, IsNotEmpty, IsOptional, IsString, ValidateNested } from 'class-validator'\nimport { sanitizeName } from '../../files/utils/files'\nimport { CreateOrUpdateLinkDto } from '../../links/dto/create-or-update-link.dto'\nimport { MEMBER_TYPE, MEMBER_TYPE_REVERSE } from '../../users/constants/member'\nimport { SPACE_ROLE } from '../constants/spaces'\nimport { SpaceRootDto } from './space-roots.dto'\n\nexport class SpaceMemberDto {\n @IsNotEmpty()\n @IsInt()\n id: number\n\n @IsNotEmpty()\n @IsString()\n @Transform(({ value }) => MEMBER_TYPE_REVERSE[value])\n type: MEMBER_TYPE\n\n @IsNotEmpty()\n @IsInt()\n spaceRole?: SPACE_ROLE = SPACE_ROLE.IS_MEMBER\n\n @IsOptional()\n @IsString()\n permissions?: string = ''\n\n @IsOptional()\n @IsInt()\n linkId?: number\n\n @IsOptional()\n @ValidateNested()\n @Type(() => CreateOrUpdateLinkDto)\n linkSettings?: CreateOrUpdateLinkDto = null\n}\n\nexport class CreateOrUpdateSpaceDto {\n @IsOptional()\n @IsInt()\n id?: number\n\n @IsNotEmpty()\n @IsString()\n @Transform(({ value }) => (value ? sanitizeName(value.trim()) : ''))\n name: string\n\n @IsOptional()\n @IsString()\n @Transform(({ value }) => (value ? sanitizeName(value.trim()) : ''))\n alias?: string\n\n @IsOptional()\n @IsString()\n description?: string\n\n @IsOptional()\n @IsBoolean()\n enabled?: boolean\n\n @IsOptional()\n @IsInt()\n storageQuota?: number = null\n\n @IsOptional()\n @IsBoolean()\n storageIndexing?: boolean\n\n @IsOptional()\n @IsArray()\n @ValidateNested({ each: true })\n @Type(() => SpaceRootDto)\n roots?: SpaceRootDto[]\n\n @IsArray()\n @ArrayMinSize(1)\n @Transform(({ value }) =>\n value.map((m: SpaceMemberDto) => {\n m.spaceRole = SPACE_ROLE.IS_MANAGER\n return m\n })\n )\n @ValidateNested({ each: true })\n @Type(() => SpaceMemberDto)\n // contains managers (users)\n managers: SpaceMemberDto[]\n\n @IsOptional()\n @IsArray()\n @Transform(({ value }) =>\n value.map((m: SpaceMemberDto) => {\n m.spaceRole = SPACE_ROLE.IS_MEMBER\n return m\n })\n )\n @ValidateNested({ each: true })\n @Type(() => SpaceMemberDto)\n // contains members (users, guests, groups, personal groups)\n members?: SpaceMemberDto[]\n\n @IsOptional()\n @IsArray()\n @Transform(({ value }) =>\n value.map((m: SpaceMemberDto) => {\n m.spaceRole = SPACE_ROLE.IS_MEMBER\n return m\n })\n )\n @ValidateNested({ each: true })\n @Type(() => SpaceMemberDto)\n // contains links\n links?: SpaceMemberDto[]\n}\n"],"names":["CreateOrUpdateSpaceDto","SpaceMemberDto","spaceRole","SPACE_ROLE","IS_MEMBER","permissions","linkSettings","value","MEMBER_TYPE_REVERSE","CreateOrUpdateLinkDto","storageQuota","sanitizeName","trim","each","SpaceRootDto","map","m","IS_MANAGER"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsCYA;eAAAA;;QA5BAC;eAAAA;;;kCARmB;gCAC0E;uBAC7E;uCACS;wBACW;wBACtB;+BACE;;;;;;;;;;AAEtB,IAAA,AAAMA,iBAAN,MAAMA;;aAYXC,YAAyBC,kBAAU,CAACC,SAAS;aAI7CC,cAAuB;aASvBC,eAAuC;;AACzC;;;;;;;;;sCAnBc,EAAEC,KAAK,EAAE,GAAKC,2BAAmB,CAACD,MAAM;;;;;;;;;;;;;;;;;;;;;oCAiBxCE,4CAAqB;;;AAI5B,IAAA,AAAMT,yBAAN,MAAMA;;aAyBXU,eAAwB;;AAkD1B;;;;;;;;;sCApEc,EAAEH,KAAK,EAAE,GAAMA,QAAQI,IAAAA,mBAAY,EAACJ,MAAMK,IAAI,MAAM;;;;;;sCAKpD,EAAEL,KAAK,EAAE,GAAMA,QAAQI,IAAAA,mBAAY,EAACJ,MAAMK,IAAI,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqB9CC,MAAM;;oCACZC,2BAAY;;;;;;sCAKZ,EAAEP,KAAK,EAAE,GACnBA,MAAMQ,GAAG,CAAC,CAACC;YACTA,EAAEd,SAAS,GAAGC,kBAAU,CAACc,UAAU;YACnC,OAAOD;QACT;;QAEgBH,MAAM;;oCACZZ;;;;;;sCAMA,EAAEM,KAAK,EAAE,GACnBA,MAAMQ,GAAG,CAAC,CAACC;YACTA,EAAEd,SAAS,GAAGC,kBAAU,CAACC,SAAS;YAClC,OAAOY;QACT;;QAEgBH,MAAM;;oCACZZ;;;;;;sCAMA,EAAEM,KAAK,EAAE,GACnBA,MAAMQ,GAAG,CAAC,CAACC;YACTA,EAAEd,SAAS,GAAGC,kBAAU,CAACC,SAAS;YAClC,OAAOY;QACT;;QAEgBH,MAAM;;oCACZZ"}
|
|
@@ -54,12 +54,12 @@ let SpaceGuard = class SpaceGuard {
|
|
|
54
54
|
_spaces.SPACE_OPERATION.MODIFY
|
|
55
55
|
].indexOf(permission) > -1) {
|
|
56
56
|
if (req.space.quotaIsExceeded) {
|
|
57
|
-
logger.warn(`
|
|
58
|
-
throw new _common.HttpException('
|
|
57
|
+
logger.warn(`Storage quota exceeded for *${req.space.alias}* (${req.space.id})`);
|
|
58
|
+
throw new _common.HttpException('Storage quota exceeded', _common.HttpStatus.INSUFFICIENT_STORAGE);
|
|
59
59
|
} else if (req.space.storageQuota) {
|
|
60
60
|
const contentLength = parseInt(req.headers['content-length'] || '0', 10) || 0;
|
|
61
61
|
if (req.space.willExceedQuota(contentLength)) {
|
|
62
|
-
throw new _common.HttpException('
|
|
62
|
+
throw new _common.HttpException('Storage quota will be exceeded', _common.HttpStatus.INSUFFICIENT_STORAGE);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/spaces/guards/space.guard.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { CanActivate, ExecutionContext, HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { Reflector } from '@nestjs/core'\nimport { HTTP_METHOD } from '../../applications.constants'\nimport { ONLY_OFFICE_CONTEXT } from '../../files/constants/only-office'\nimport { API_FILES_ONLY_OFFICE_CALLBACK } from '../../files/constants/routes'\nimport { SYNC_CONTEXT } from '../../sync/decorators/sync-context.decorator'\nimport { SYNC_PATH_TO_SPACE_SEGMENTS } from '../../sync/utils/routes'\nimport { WEB_DAV_CONTEXT } from '../../webdav/decorators/webdav-context.decorator'\nimport { WEBDAV_PATH_TO_SPACE_SEGMENTS } from '../../webdav/utils/routes'\nimport { SPACE_HTTP_PERMISSION, SPACE_OPERATION } from '../constants/spaces'\nimport { SKIP_SPACE_GUARD } from '../decorators/space-skip-guard.decorator'\nimport { SKIP_SPACE_PERMISSIONS_CHECK } from '../decorators/space-skip-permissions.decorator'\nimport { FastifySpaceRequest } from '../interfaces/space-request.interface'\nimport { SpaceEnv } from '../models/space-env.model'\nimport { SpacesManager } from '../services/spaces-manager.service'\nimport { canAccessToSpaceUrl, haveSpaceEnvPermissions } from '../utils/permissions'\nimport { PATH_TO_SPACE_SEGMENTS } from '../utils/routes'\n\n@Injectable()\nexport class SpaceGuard implements CanActivate {\n private readonly logger = new Logger(SpaceGuard.name)\n\n constructor(\n private readonly reflector: Reflector,\n private readonly spacesManager: SpacesManager\n ) {}\n\n static checkPermissions(req: FastifySpaceRequest, logger: Logger, onlyOfficeContext = false) {\n let permission: SPACE_OPERATION\n if (onlyOfficeContext && req.method === HTTP_METHOD.POST && req.originalUrl.startsWith(API_FILES_ONLY_OFFICE_CALLBACK)) {\n // special case : onlyoffice callback use post method to update documents\n permission = SPACE_OPERATION.MODIFY\n } else {\n permission = SPACE_HTTP_PERMISSION[req.method]\n }\n if (!haveSpaceEnvPermissions(req.space, permission)) {\n logger.warn(`is not allowed to ${req.method} on this space path : *${req.space.alias}* (${req.space.id}) : ${req.space.url}`)\n throw new HttpException('You are not allowed to do this action', HttpStatus.FORBIDDEN)\n }\n if ([SPACE_OPERATION.ADD, SPACE_OPERATION.MODIFY].indexOf(permission) > -1) {\n if (req.space.quotaIsExceeded) {\n logger.warn(`Space quota is exceeded for *${req.space.alias}* (${req.space.id})`)\n throw new HttpException('Space quota is exceeded', HttpStatus.INSUFFICIENT_STORAGE)\n } else if (req.space.storageQuota) {\n const contentLength = parseInt(req.headers['content-length'] || '0', 10) || 0\n if (req.space.willExceedQuota(contentLength)) {\n throw new HttpException('Quota will be exceeded', HttpStatus.INSUFFICIENT_STORAGE)\n }\n }\n }\n }\n\n async canActivate(ctx: ExecutionContext): Promise<boolean> {\n const skipSpaceGuard = this.reflector.getAllAndOverride(SKIP_SPACE_GUARD, [ctx.getHandler(), ctx.getClass()])\n if (skipSpaceGuard) {\n return true\n }\n const skipSpacePermissionsCheck = this.reflector.getAllAndOverride(SKIP_SPACE_PERMISSIONS_CHECK, [ctx.getHandler(), ctx.getClass()])\n const req: FastifySpaceRequest = ctx.switchToHttp().getRequest()\n const onlyOfficeContext = this.reflector.getAllAndOverride(ONLY_OFFICE_CONTEXT, [ctx.getHandler(), ctx.getClass()])\n const webDAVContext = this.reflector.getAllAndOverride(WEB_DAV_CONTEXT, [ctx.getHandler(), ctx.getClass()])\n const syncContext = this.reflector.getAllAndOverride(SYNC_CONTEXT, [ctx.getHandler(), ctx.getClass()])\n const urlSegments = this.urlSegmentsFromContext(req, webDAVContext, syncContext)\n this.checkAccessToSpace(req, urlSegments)\n let space: SpaceEnv\n try {\n space = await this.spacesManager.spaceEnv(req.user, urlSegments)\n } catch (e) {\n this.logger.warn(`${this.canActivate.name} - ${e}`)\n throw new HttpException('Space path is not valid', HttpStatus.BAD_REQUEST)\n }\n if (!space) {\n this.logger.warn(`${this.canActivate.name} - space not authorized or not found : ${req.params['*']}`)\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n if (!space.enabled) {\n throw new HttpException('Space is disabled', HttpStatus.FORBIDDEN)\n }\n // assign space to request\n req.space = space\n if (skipSpacePermissionsCheck === undefined) {\n SpaceGuard.checkPermissions(req, this.logger, onlyOfficeContext)\n }\n return true\n }\n\n private urlSegmentsFromContext(req: FastifySpaceRequest, webDAVContext: boolean, syncContext: boolean): string[] {\n if (webDAVContext || syncContext) {\n try {\n if (webDAVContext) {\n return WEBDAV_PATH_TO_SPACE_SEGMENTS(req.params['*'])\n } else {\n return SYNC_PATH_TO_SPACE_SEGMENTS(req.params['*'])\n }\n } catch (e) {\n this.logger.warn(`${this.canActivate.name} - ${e}`)\n throw new HttpException(e.message, HttpStatus.NOT_FOUND)\n }\n }\n return PATH_TO_SPACE_SEGMENTS(req.params['*'])\n }\n\n private checkAccessToSpace(req: FastifySpaceRequest, urlSegments: string[]) {\n if (!canAccessToSpaceUrl(req.user, urlSegments)) {\n this.logger.warn(`is not allowed to access to this space repository : ${req.params['*']}`)\n throw new HttpException('You are not allowed to access to this repository', HttpStatus.FORBIDDEN)\n }\n }\n}\n"],"names":["SpaceGuard","checkPermissions","req","logger","onlyOfficeContext","permission","method","HTTP_METHOD","POST","originalUrl","startsWith","API_FILES_ONLY_OFFICE_CALLBACK","SPACE_OPERATION","MODIFY","SPACE_HTTP_PERMISSION","haveSpaceEnvPermissions","space","warn","alias","id","url","HttpException","HttpStatus","FORBIDDEN","ADD","indexOf","quotaIsExceeded","INSUFFICIENT_STORAGE","storageQuota","contentLength","parseInt","headers","willExceedQuota","canActivate","ctx","skipSpaceGuard","reflector","getAllAndOverride","SKIP_SPACE_GUARD","getHandler","getClass","skipSpacePermissionsCheck","SKIP_SPACE_PERMISSIONS_CHECK","switchToHttp","getRequest","ONLY_OFFICE_CONTEXT","webDAVContext","WEB_DAV_CONTEXT","syncContext","SYNC_CONTEXT","urlSegments","urlSegmentsFromContext","checkAccessToSpace","spacesManager","spaceEnv","user","e","name","BAD_REQUEST","params","NOT_FOUND","enabled","undefined","WEBDAV_PATH_TO_SPACE_SEGMENTS","SYNC_PATH_TO_SPACE_SEGMENTS","message","PATH_TO_SPACE_SEGMENTS","canAccessToSpaceUrl","Logger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/spaces/guards/space.guard.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { CanActivate, ExecutionContext, HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { Reflector } from '@nestjs/core'\nimport { HTTP_METHOD } from '../../applications.constants'\nimport { ONLY_OFFICE_CONTEXT } from '../../files/constants/only-office'\nimport { API_FILES_ONLY_OFFICE_CALLBACK } from '../../files/constants/routes'\nimport { SYNC_CONTEXT } from '../../sync/decorators/sync-context.decorator'\nimport { SYNC_PATH_TO_SPACE_SEGMENTS } from '../../sync/utils/routes'\nimport { WEB_DAV_CONTEXT } from '../../webdav/decorators/webdav-context.decorator'\nimport { WEBDAV_PATH_TO_SPACE_SEGMENTS } from '../../webdav/utils/routes'\nimport { SPACE_HTTP_PERMISSION, SPACE_OPERATION } from '../constants/spaces'\nimport { SKIP_SPACE_GUARD } from '../decorators/space-skip-guard.decorator'\nimport { SKIP_SPACE_PERMISSIONS_CHECK } from '../decorators/space-skip-permissions.decorator'\nimport { FastifySpaceRequest } from '../interfaces/space-request.interface'\nimport { SpaceEnv } from '../models/space-env.model'\nimport { SpacesManager } from '../services/spaces-manager.service'\nimport { canAccessToSpaceUrl, haveSpaceEnvPermissions } from '../utils/permissions'\nimport { PATH_TO_SPACE_SEGMENTS } from '../utils/routes'\n\n@Injectable()\nexport class SpaceGuard implements CanActivate {\n private readonly logger = new Logger(SpaceGuard.name)\n\n constructor(\n private readonly reflector: Reflector,\n private readonly spacesManager: SpacesManager\n ) {}\n\n static checkPermissions(req: FastifySpaceRequest, logger: Logger, onlyOfficeContext = false) {\n let permission: SPACE_OPERATION\n if (onlyOfficeContext && req.method === HTTP_METHOD.POST && req.originalUrl.startsWith(API_FILES_ONLY_OFFICE_CALLBACK)) {\n // special case : onlyoffice callback use post method to update documents\n permission = SPACE_OPERATION.MODIFY\n } else {\n permission = SPACE_HTTP_PERMISSION[req.method]\n }\n if (!haveSpaceEnvPermissions(req.space, permission)) {\n logger.warn(`is not allowed to ${req.method} on this space path : *${req.space.alias}* (${req.space.id}) : ${req.space.url}`)\n throw new HttpException('You are not allowed to do this action', HttpStatus.FORBIDDEN)\n }\n if ([SPACE_OPERATION.ADD, SPACE_OPERATION.MODIFY].indexOf(permission) > -1) {\n if (req.space.quotaIsExceeded) {\n logger.warn(`Storage quota exceeded for *${req.space.alias}* (${req.space.id})`)\n throw new HttpException('Storage quota exceeded', HttpStatus.INSUFFICIENT_STORAGE)\n } else if (req.space.storageQuota) {\n const contentLength = parseInt(req.headers['content-length'] || '0', 10) || 0\n if (req.space.willExceedQuota(contentLength)) {\n throw new HttpException('Storage quota will be exceeded', HttpStatus.INSUFFICIENT_STORAGE)\n }\n }\n }\n }\n\n async canActivate(ctx: ExecutionContext): Promise<boolean> {\n const skipSpaceGuard = this.reflector.getAllAndOverride(SKIP_SPACE_GUARD, [ctx.getHandler(), ctx.getClass()])\n if (skipSpaceGuard) {\n return true\n }\n const skipSpacePermissionsCheck = this.reflector.getAllAndOverride(SKIP_SPACE_PERMISSIONS_CHECK, [ctx.getHandler(), ctx.getClass()])\n const req: FastifySpaceRequest = ctx.switchToHttp().getRequest()\n const onlyOfficeContext = this.reflector.getAllAndOverride(ONLY_OFFICE_CONTEXT, [ctx.getHandler(), ctx.getClass()])\n const webDAVContext = this.reflector.getAllAndOverride(WEB_DAV_CONTEXT, [ctx.getHandler(), ctx.getClass()])\n const syncContext = this.reflector.getAllAndOverride(SYNC_CONTEXT, [ctx.getHandler(), ctx.getClass()])\n const urlSegments = this.urlSegmentsFromContext(req, webDAVContext, syncContext)\n this.checkAccessToSpace(req, urlSegments)\n let space: SpaceEnv\n try {\n space = await this.spacesManager.spaceEnv(req.user, urlSegments)\n } catch (e) {\n this.logger.warn(`${this.canActivate.name} - ${e}`)\n throw new HttpException('Space path is not valid', HttpStatus.BAD_REQUEST)\n }\n if (!space) {\n this.logger.warn(`${this.canActivate.name} - space not authorized or not found : ${req.params['*']}`)\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n if (!space.enabled) {\n throw new HttpException('Space is disabled', HttpStatus.FORBIDDEN)\n }\n // assign space to request\n req.space = space\n if (skipSpacePermissionsCheck === undefined) {\n SpaceGuard.checkPermissions(req, this.logger, onlyOfficeContext)\n }\n return true\n }\n\n private urlSegmentsFromContext(req: FastifySpaceRequest, webDAVContext: boolean, syncContext: boolean): string[] {\n if (webDAVContext || syncContext) {\n try {\n if (webDAVContext) {\n return WEBDAV_PATH_TO_SPACE_SEGMENTS(req.params['*'])\n } else {\n return SYNC_PATH_TO_SPACE_SEGMENTS(req.params['*'])\n }\n } catch (e) {\n this.logger.warn(`${this.canActivate.name} - ${e}`)\n throw new HttpException(e.message, HttpStatus.NOT_FOUND)\n }\n }\n return PATH_TO_SPACE_SEGMENTS(req.params['*'])\n }\n\n private checkAccessToSpace(req: FastifySpaceRequest, urlSegments: string[]) {\n if (!canAccessToSpaceUrl(req.user, urlSegments)) {\n this.logger.warn(`is not allowed to access to this space repository : ${req.params['*']}`)\n throw new HttpException('You are not allowed to access to this repository', HttpStatus.FORBIDDEN)\n }\n }\n}\n"],"names":["SpaceGuard","checkPermissions","req","logger","onlyOfficeContext","permission","method","HTTP_METHOD","POST","originalUrl","startsWith","API_FILES_ONLY_OFFICE_CALLBACK","SPACE_OPERATION","MODIFY","SPACE_HTTP_PERMISSION","haveSpaceEnvPermissions","space","warn","alias","id","url","HttpException","HttpStatus","FORBIDDEN","ADD","indexOf","quotaIsExceeded","INSUFFICIENT_STORAGE","storageQuota","contentLength","parseInt","headers","willExceedQuota","canActivate","ctx","skipSpaceGuard","reflector","getAllAndOverride","SKIP_SPACE_GUARD","getHandler","getClass","skipSpacePermissionsCheck","SKIP_SPACE_PERMISSIONS_CHECK","switchToHttp","getRequest","ONLY_OFFICE_CONTEXT","webDAVContext","WEB_DAV_CONTEXT","syncContext","SYNC_CONTEXT","urlSegments","urlSegmentsFromContext","checkAccessToSpace","spacesManager","spaceEnv","user","e","name","BAD_REQUEST","params","NOT_FOUND","enabled","undefined","WEBDAV_PATH_TO_SPACE_SEGMENTS","SYNC_PATH_TO_SPACE_SEGMENTS","message","PATH_TO_SPACE_SEGMENTS","canAccessToSpaceUrl","Logger"],"mappings":"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"}
|