Files
speckle-server/packages/server/modules/accessrequests/graph/resolvers/index.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

84 lines
2.3 KiB
TypeScript

import {
getPendingStreamRequests,
getUserStreamAccessRequest,
processPendingStreamRequest,
requestStreamAccess
} from '@/modules/accessrequests/services/stream'
import { Resolvers } from '@/modules/core/graph/generated/graphql'
import { mapStreamRoleToValue } from '@/modules/core/helpers/graphTypes'
import { Roles } from '@/modules/core/helpers/mainConstants'
import { validateStreamAccess } from '@/modules/core/services/streams/streamAccessService'
import { LogicError } from '@/modules/shared/errors'
const resolvers: Resolvers = {
Mutation: {
async streamAccessRequestUse(_parent, args, ctx) {
const { userId, resourceAccessRules } = ctx
const { requestId, accept, role } = args
if (!userId) throw new LogicError('User ID unexpectedly false')
await processPendingStreamRequest(
userId,
requestId,
accept,
mapStreamRoleToValue(role),
resourceAccessRules
)
return true
},
async streamAccessRequestCreate(_parent, args, ctx) {
const { userId } = ctx
if (!userId) throw new LogicError('User ID unexpectedly false')
const { streamId } = args
return await requestStreamAccess(userId, streamId)
}
},
Query: {
async streamAccessRequest(_, args, ctx) {
const { streamId } = args
const { userId } = ctx
if (!userId) throw new LogicError('User ID unexpectedly false')
return await getUserStreamAccessRequest(userId, streamId)
}
},
Stream: {
async pendingAccessRequests(parent) {
const { id } = parent
return await getPendingStreamRequests(id)
}
},
StreamAccessRequest: {
async requester(parent, _args, ctx) {
const { requesterId } = parent
const user = await ctx.loaders.users.getUser.load(requesterId)
if (!user) {
throw new LogicError('Unable to find requester')
}
return user
},
async stream(parent, _args, ctx) {
const { streamId } = parent
const stream = await ctx.loaders.streams.getStream.load(streamId)
if (!stream) {
throw new LogicError('Unable to find request stream')
}
await validateStreamAccess(
ctx.userId,
stream.id,
Roles.Stream.Reviewer,
ctx.resourceAccessRules
)
return stream
}
}
}
export = resolvers