From cb3dbb7a9d90449f456f717e4e2d2d54573c59c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C5=91=20Jedlicska?= Date: Tue, 1 Aug 2023 12:11:47 +0200 Subject: [PATCH] refactor(server/shared): reduce (but not fix) circular dependencies --- .../activitystream/services/branchActivity.ts | 5 ++++- .../activitystream/services/commentActivity.ts | 2 +- .../activitystream/services/commitActivity.ts | 5 ++++- .../activitystream/services/streamActivity.ts | 5 ++++- .../modules/comments/graph/resolvers/comments.js | 2 +- .../server/modules/core/graph/resolvers/branches.js | 6 +++++- .../server/modules/core/graph/resolvers/commits.js | 6 +++++- .../server/modules/core/graph/resolvers/streams.js | 7 +++++-- packages/server/modules/shared/authz.ts | 2 +- packages/server/modules/shared/index.js | 11 ++--------- packages/server/modules/shared/roles.js | 12 ++++++++++++ 11 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 packages/server/modules/shared/roles.js diff --git a/packages/server/modules/activitystream/services/branchActivity.ts b/packages/server/modules/activitystream/services/branchActivity.ts index 6f5635f41..3ffd19f29 100644 --- a/packages/server/modules/activitystream/services/branchActivity.ts +++ b/packages/server/modules/activitystream/services/branchActivity.ts @@ -1,7 +1,10 @@ import { saveActivity } from '@/modules/activitystream/services' import { ActionTypes, ResourceTypes } from '@/modules/activitystream/helpers/types' import { BranchRecord } from '@/modules/core/helpers/types' -import { pubsub, BranchPubsubEvents } from '@/modules/shared' +import { + pubsub, + BranchSubscriptions as BranchPubsubEvents +} from '@/modules/shared/utils/subscriptions' import { BranchDeleteInput, BranchUpdateInput, diff --git a/packages/server/modules/activitystream/services/commentActivity.ts b/packages/server/modules/activitystream/services/commentActivity.ts index e20842529..6ba8c8300 100644 --- a/packages/server/modules/activitystream/services/commentActivity.ts +++ b/packages/server/modules/activitystream/services/commentActivity.ts @@ -14,7 +14,7 @@ import { getViewerResourcesForComment, getViewerResourcesFromLegacyIdentifiers } from '@/modules/core/services/commit/viewerResources' -import { pubsub } from '@/modules/shared' +import { pubsub } from '@/modules/shared/utils/subscriptions' import { CommentSubscriptions, ProjectSubscriptions, diff --git a/packages/server/modules/activitystream/services/commitActivity.ts b/packages/server/modules/activitystream/services/commitActivity.ts index 7b932a134..7341a1d60 100644 --- a/packages/server/modules/activitystream/services/commitActivity.ts +++ b/packages/server/modules/activitystream/services/commitActivity.ts @@ -1,6 +1,9 @@ import { saveActivity } from '@/modules/activitystream/services' import { ActionTypes, ResourceTypes } from '@/modules/activitystream/helpers/types' -import { CommitPubsubEvents, pubsub } from '@/modules/shared' +import { + CommitSubscriptions as CommitPubsubEvents, + pubsub +} from '@/modules/shared/utils/subscriptions' import { CommitCreateInput, CommitReceivedInput, diff --git a/packages/server/modules/activitystream/services/streamActivity.ts b/packages/server/modules/activitystream/services/streamActivity.ts index 198301605..2d9413f12 100644 --- a/packages/server/modules/activitystream/services/streamActivity.ts +++ b/packages/server/modules/activitystream/services/streamActivity.ts @@ -1,7 +1,10 @@ import { saveActivity } from '@/modules/activitystream/services' import { ActionTypes, ResourceTypes } from '@/modules/activitystream/helpers/types' import { StreamRoles } from '@/modules/core/helpers/mainConstants' -import { pubsub, StreamPubsubEvents } from '@/modules/shared' +import { + pubsub, + StreamSubscriptions as StreamPubsubEvents +} from '@/modules/shared/utils/subscriptions' import { StreamCreateInput } from '@/test/graphql/generated/graphql' import { Knex } from 'knex' import { getStreamCollaborators } from '@/modules/core/repositories/streams' diff --git a/packages/server/modules/comments/graph/resolvers/comments.js b/packages/server/modules/comments/graph/resolvers/comments.js index c9b57174b..739642099 100644 --- a/packages/server/modules/comments/graph/resolvers/comments.js +++ b/packages/server/modules/comments/graph/resolvers/comments.js @@ -1,4 +1,4 @@ -const { pubsub } = require('@/modules/shared') +const { pubsub } = require('@/modules/shared/utils/subscriptions') const { ForbiddenError: ApolloForbiddenError } = require('apollo-server-express') const { ForbiddenError } = require('@/modules/shared/errors') const { getStream } = require('@/modules/core/services/streams') diff --git a/packages/server/modules/core/graph/resolvers/branches.js b/packages/server/modules/core/graph/resolvers/branches.js index c1be66e98..93e5e51dd 100644 --- a/packages/server/modules/core/graph/resolvers/branches.js +++ b/packages/server/modules/core/graph/resolvers/branches.js @@ -2,7 +2,11 @@ const { withFilter } = require('graphql-subscriptions') -const { authorizeResolver, pubsub, BranchPubsubEvents } = require('@/modules/shared') +const { + pubsub, + BranchSubscriptions: BranchPubsubEvents +} = require('@/modules/shared/utils/subscriptions') +const { authorizeResolver } = require('@/modules/shared') const { getBranchByNameAndStreamId, getBranchById } = require('../../services/branches') const { diff --git a/packages/server/modules/core/graph/resolvers/commits.js b/packages/server/modules/core/graph/resolvers/commits.js index 4a20886cd..5e6fc50bc 100644 --- a/packages/server/modules/core/graph/resolvers/commits.js +++ b/packages/server/modules/core/graph/resolvers/commits.js @@ -2,7 +2,11 @@ const { UserInputError, ApolloError } = require('apollo-server-express') const { withFilter } = require('graphql-subscriptions') -const { authorizeResolver, pubsub, CommitPubsubEvents } = require('@/modules/shared') +const { + pubsub, + CommitSubscriptions: CommitPubsubEvents +} = require('@/modules/shared/utils/subscriptions') +const { authorizeResolver } = require('@/modules/shared') const { getCommitById, diff --git a/packages/server/modules/core/graph/resolvers/streams.js b/packages/server/modules/core/graph/resolvers/streams.js index d5fd76b34..69dad153e 100644 --- a/packages/server/modules/core/graph/resolvers/streams.js +++ b/packages/server/modules/core/graph/resolvers/streams.js @@ -14,9 +14,12 @@ const { } = require('@/modules/core/services/streams') const { - authorizeResolver, pubsub, - StreamPubsubEvents, + StreamSubscriptions: StreamPubsubEvents +} = require(`@/modules/shared/utils/subscriptions`) + +const { + authorizeResolver, validateScopes, validateServerRole } = require(`@/modules/shared`) diff --git a/packages/server/modules/shared/authz.ts b/packages/server/modules/shared/authz.ts index c7e8c74e4..7a217934c 100644 --- a/packages/server/modules/shared/authz.ts +++ b/packages/server/modules/shared/authz.ts @@ -4,7 +4,7 @@ import { ServerRoles, StreamRoles } from '@/modules/core/helpers/mainConstants' -import { getRoles } from '@/modules/shared' +import { getRoles } from '@/modules/shared/roles' import { getStream } from '@/modules/core/services/streams' import { diff --git a/packages/server/modules/shared/index.js b/packages/server/modules/shared/index.js index 1ea34e504..9aa32777f 100644 --- a/packages/server/modules/shared/index.js +++ b/packages/server/modules/shared/index.js @@ -15,16 +15,9 @@ const { const { adminOverrideEnabled } = require('@/modules/shared/helpers/envHelper') const { ServerAcl: ServerAclSchema } = require('@/modules/core/dbSchema') +const { getRoles } = require('@/modules/shared/roles') const ServerAcl = () => ServerAclSchema.knex() -let roles - -const getRoles = async () => { - if (roles) return roles - roles = await knex('user_roles').select('*') - return roles -} - /** * Validates a server role against the req's context object. * @param {import('@/modules/shared/helpers/typeHelper').GraphQLContext} context @@ -60,7 +53,7 @@ async function validateScopes(scopes, scope) { async function authorizeResolver(userId, resourceId, requiredRole) { userId = userId || null - if (!roles) roles = await knex('user_roles').select('*') + const roles = getRoles() // TODO: Cache these results with a TTL of 1 mins or so, it's pointless to query the db every time we get a ping. diff --git a/packages/server/modules/shared/roles.js b/packages/server/modules/shared/roles.js new file mode 100644 index 000000000..4cf2f10f5 --- /dev/null +++ b/packages/server/modules/shared/roles.js @@ -0,0 +1,12 @@ +const knex = require(`@/db/knex`) +let roles + +const getRoles = async () => { + if (roles) return roles + roles = await knex('user_roles').select('*') + return roles +} + +module.exports = { + getRoles +}