Files
speckle-server/packages/server/modules/fileuploads/graph/resolvers/fileUploads.ts
T
Kristaps Fabians Geikins 37d51072fb feat(server): resource limits on app tokens (#1959)
* WIP new mutation arg

* limited resource token creation done

* token resource rule creation validation

* updated authorizeResolver implementation

* introduced resource access rule checks in authorizeResolver everywhere

* more checks added

* updated projects resolvers

* updated stream resolvers

* more checks added

* error page theme resolution fix

* WIP testss

* more tests

* implemented checks in REST auth pipeline

* REST API coverage & tests

* some tests fixed

* test fixess

* added tests

* feat(server): new automation result reporting scope (#1976)

* feat(server): new automation result reporting scope

* tests fix
2024-01-19 18:14:49 +01:00

98 lines
2.7 KiB
TypeScript

import { Roles } from '@speckle/shared'
import { Resolvers } from '@/modules/core/graph/generated/graphql'
import {
getStreamFileUploads,
getFileInfo,
getStreamPendingModels,
getBranchPendingVersions
} from '@/modules/fileuploads/repositories/fileUploads'
import { authorizeResolver } from '@/modules/shared'
import {
FileImportSubscriptions,
filteredSubscribe
} from '@/modules/shared/utils/subscriptions'
export = {
Stream: {
async fileUploads(parent) {
return await getStreamFileUploads({ streamId: parent.id })
},
async fileUpload(_parent, args) {
return await getFileInfo({ fileId: args.id })
}
},
Project: {
async pendingImportedModels(parent, args) {
return await getStreamPendingModels(parent.id, args)
}
},
Model: {
async pendingImportedVersions(parent, args) {
return await getBranchPendingVersions(parent.streamId, parent.name, args)
}
},
FileUpload: {
projectId: (parent) => parent.streamId,
modelName: (parent) => parent.branchName,
convertedVersionId: (parent) => parent.convertedCommitId,
async model(parent, _args, ctx) {
return await ctx.loaders.streams.getStreamBranchByName
.forStream(parent.streamId)
.load(parent.branchName.toLowerCase())
}
},
Subscription: {
projectPendingModelsUpdated: {
subscribe: filteredSubscribe(
FileImportSubscriptions.ProjectPendingModelsUpdated,
async (payload, args, ctx) => {
const { id: projectId } = args
if (payload.projectId !== projectId) return false
await authorizeResolver(
ctx.userId,
projectId,
Roles.Stream.Reviewer,
ctx.resourceAccessRules
)
return true
}
)
},
projectPendingVersionsUpdated: {
subscribe: filteredSubscribe(
FileImportSubscriptions.ProjectPendingVersionsUpdated,
async (payload, args, ctx) => {
const { id: projectId } = args
if (payload.projectId !== projectId) return false
await authorizeResolver(
ctx.userId,
projectId,
Roles.Stream.Reviewer,
ctx.resourceAccessRules
)
return true
}
)
},
projectFileImportUpdated: {
subscribe: filteredSubscribe(
FileImportSubscriptions.ProjectFileImportUpdated,
async (payload, args, ctx) => {
const { id: projectId } = args
if (payload.projectId !== projectId) return false
await authorizeResolver(
ctx.userId,
projectId,
Roles.Stream.Reviewer,
ctx.resourceAccessRules
)
return true
}
)
}
}
} as Resolvers