Merge branch 'main' into iain/ratelimiter-should-respect-configuration
This commit is contained in:
@@ -43,7 +43,6 @@ import { getInvitationTargetUsersFactory } from '@/modules/serverinvites/service
|
||||
import { authorizeResolver } from '@/modules/shared'
|
||||
import {
|
||||
getFeatureFlags,
|
||||
getServerOrigin,
|
||||
isRateLimiterEnabled
|
||||
} from '@/modules/shared/helpers/envHelper'
|
||||
import { getEventBus } from '@/modules/shared/services/eventBus'
|
||||
@@ -169,17 +168,12 @@ import {
|
||||
listWorkspaceSsoMembershipsFactory
|
||||
} from '@/modules/workspaces/repositories/sso'
|
||||
import { getDecryptor } from '@/modules/workspaces/helpers/sso'
|
||||
import { getWorkspaceFunctions } from '@/modules/automate/clients/executionEngine'
|
||||
import { getFunctionsFactory } from '@/modules/automate/clients/executionEngine'
|
||||
import {
|
||||
ExecutionEngineFailedResponseError,
|
||||
ExecutionEngineNetworkError
|
||||
} from '@/modules/automate/errors/executionEngine'
|
||||
import { getDefaultRegionFactory } from '@/modules/workspaces/repositories/regions'
|
||||
import {
|
||||
AuthCodePayloadAction,
|
||||
createStoredAuthCodeFactory
|
||||
} from '@/modules/automate/services/authCode'
|
||||
import { getGenericRedis } from '@/modules/shared/redis/redis'
|
||||
import { convertFunctionToGraphQLReturn } from '@/modules/automate/services/functionManagement'
|
||||
import {
|
||||
getWorkspacePlanFactory,
|
||||
@@ -202,6 +196,13 @@ import { OperationTypeNode } from 'graphql'
|
||||
import { updateWorkspacePlanFactory } from '@/modules/gatekeeper/services/workspacePlans'
|
||||
import { GetWorkspaceCollaboratorsArgs } from '@/modules/workspaces/domain/operations'
|
||||
import { WorkspaceTeamMember } from '@/modules/workspaces/domain/types'
|
||||
import { UsersMeta } from '@/modules/core/dbSchema'
|
||||
import { setUserActiveWorkspaceFactory } from '@/modules/workspaces/repositories/users'
|
||||
import { getGenericRedis } from '@/modules/shared/redis/redis'
|
||||
import {
|
||||
AuthCodePayloadAction,
|
||||
createStoredAuthCodeFactory
|
||||
} from '@/modules/automate/services/authCode'
|
||||
|
||||
const eventBus = getEventBus()
|
||||
const getServerInfo = getServerInfoFactory({ db })
|
||||
@@ -1079,6 +1080,13 @@ export = FF_WORKSPACES_MODULE_ENABLED
|
||||
},
|
||||
automateFunctions: async (parent, args, context) => {
|
||||
try {
|
||||
await authorizeResolver(
|
||||
context.userId,
|
||||
parent.id,
|
||||
Roles.Workspace.Member,
|
||||
context.resourceAccessRules
|
||||
)
|
||||
|
||||
const authCode = await createStoredAuthCodeFactory({
|
||||
redis: getGenericRedis()
|
||||
})({
|
||||
@@ -1086,14 +1094,18 @@ export = FF_WORKSPACES_MODULE_ENABLED
|
||||
action: AuthCodePayloadAction.ListWorkspaceFunctions
|
||||
})
|
||||
|
||||
const res = await getWorkspaceFunctions({
|
||||
workspaceId: parent.id,
|
||||
query: removeNullOrUndefinedKeys(args),
|
||||
body: {
|
||||
speckleServerAuthenticationPayload: {
|
||||
...authCode,
|
||||
origin: getServerOrigin()
|
||||
}
|
||||
const res = await getFunctionsFactory({
|
||||
logger: context.log
|
||||
})({
|
||||
auth: authCode,
|
||||
filters: {
|
||||
query: args.filter?.search ?? undefined,
|
||||
cursor: args.cursor ?? undefined,
|
||||
limit: args.limit,
|
||||
requireRelease: true,
|
||||
includeFeatured: true,
|
||||
includeWorkspaces: [parent.id],
|
||||
includeUsers: []
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1105,12 +1117,12 @@ export = FF_WORKSPACES_MODULE_ENABLED
|
||||
}
|
||||
}
|
||||
|
||||
const items = res.functions.map(convertFunctionToGraphQLReturn)
|
||||
const items = res.items.map(convertFunctionToGraphQLReturn)
|
||||
|
||||
return {
|
||||
cursor: undefined,
|
||||
totalCount: res.functions.length,
|
||||
items
|
||||
items,
|
||||
cursor: res.cursor,
|
||||
totalCount: res.totalCount
|
||||
}
|
||||
} catch (e) {
|
||||
const isNotFound =
|
||||
@@ -1296,6 +1308,26 @@ export = FF_WORKSPACES_MODULE_ENABLED
|
||||
})
|
||||
|
||||
return await getInvites(parent.id)
|
||||
},
|
||||
async activeWorkspace(parent, _args, ctx) {
|
||||
const metaVal = await ctx.loaders.users.getUserMeta.load({
|
||||
userId: parent.id,
|
||||
key: UsersMeta.metaKey.activeWorkspace
|
||||
})
|
||||
|
||||
if (!metaVal?.value) return null
|
||||
|
||||
return await getWorkspaceBySlugFactory({ db })({
|
||||
workspaceSlug: metaVal.value
|
||||
})
|
||||
},
|
||||
async isProjectsActive(parent, _args, ctx) {
|
||||
const metaVal = await ctx.loaders.users.getUserMeta.load({
|
||||
userId: parent.id,
|
||||
key: UsersMeta.metaKey.isProjectsActive
|
||||
})
|
||||
|
||||
return !!metaVal?.value
|
||||
}
|
||||
},
|
||||
Project: {
|
||||
@@ -1386,6 +1418,31 @@ export = FF_WORKSPACES_MODULE_ENABLED
|
||||
return team
|
||||
}
|
||||
},
|
||||
ActiveUserMutations: {
|
||||
async setActiveWorkspace(_parent, args, ctx) {
|
||||
const userId = ctx.userId
|
||||
if (!userId) return false
|
||||
|
||||
await Promise.all([
|
||||
ctx.loaders.users.getUserMeta.clear({
|
||||
userId,
|
||||
key: UsersMeta.metaKey.activeWorkspace
|
||||
}),
|
||||
ctx.loaders.users.getUserMeta.clear({
|
||||
userId,
|
||||
key: UsersMeta.metaKey.isProjectsActive
|
||||
})
|
||||
])
|
||||
|
||||
await setUserActiveWorkspaceFactory({ db })({
|
||||
userId,
|
||||
workspaceSlug: args.slug ?? null,
|
||||
isProjectsActive: !!args.isProjectsActive
|
||||
})
|
||||
|
||||
return true
|
||||
}
|
||||
},
|
||||
Subscription: {
|
||||
workspaceProjectsUpdated: {
|
||||
subscribe: filteredSubscribe(
|
||||
|
||||
Reference in New Issue
Block a user