removed redundancies

This commit is contained in:
Daniel Hougaard
2024-10-12 07:54:21 +04:00
parent ad2f19658b
commit 865db5a9b3
9 changed files with 29 additions and 91 deletions
-1
View File
@@ -1204,7 +1204,6 @@ export const registerRoutes = async (
}); });
const externalMigrationQueue = externalMigrationQueueFactory({ const externalMigrationQueue = externalMigrationQueueFactory({
orgService,
projectEnvService, projectEnvService,
projectDAL, projectDAL,
projectService, projectService,
@@ -4,7 +4,7 @@ import sjcl from "sjcl";
import tweetnacl from "tweetnacl"; import tweetnacl from "tweetnacl";
import tweetnaclUtil from "tweetnacl-util"; import tweetnaclUtil from "tweetnacl-util";
import { OrgMembershipRole, ProjectMembershipRole, SecretType } from "@app/db/schemas"; import { SecretType } from "@app/db/schemas";
import { BadRequestError, NotFoundError } from "@app/lib/errors"; import { BadRequestError, NotFoundError } from "@app/lib/errors";
import { chunkArray } from "@app/lib/fn"; import { chunkArray } from "@app/lib/fn";
import { logger } from "@app/lib/logger"; import { logger } from "@app/lib/logger";
@@ -12,7 +12,6 @@ import { alphaNumericNanoId } from "@app/lib/nanoid";
import { TKmsServiceFactory } from "../kms/kms-service"; import { TKmsServiceFactory } from "../kms/kms-service";
import { KmsDataKey } from "../kms/kms-types"; import { KmsDataKey } from "../kms/kms-types";
import { TOrgServiceFactory } from "../org/org-service";
import { TProjectDALFactory } from "../project/project-dal"; import { TProjectDALFactory } from "../project/project-dal";
import { TProjectServiceFactory } from "../project/project-service"; import { TProjectServiceFactory } from "../project/project-service";
import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TProjectEnvDALFactory } from "../project-env/project-env-dal";
@@ -38,7 +37,6 @@ export type TImportDataIntoInfisicalDTO = {
folderDAL: Pick<TSecretFolderDALFactory, "create" | "findBySecretPath">; folderDAL: Pick<TSecretFolderDALFactory, "create" | "findBySecretPath">;
projectService: Pick<TProjectServiceFactory, "createProject">; projectService: Pick<TProjectServiceFactory, "createProject">;
orgService: Pick<TOrgServiceFactory, "inviteUserToOrganization">;
projectEnvService: Pick<TProjectEnvServiceFactory, "createEnvironment">; projectEnvService: Pick<TProjectEnvServiceFactory, "createEnvironment">;
secretV2BridgeService: Pick<TSecretV2BridgeServiceFactory, "createManySecret">; secretV2BridgeService: Pick<TSecretV2BridgeServiceFactory, "createManySecret">;
@@ -113,7 +111,6 @@ export const importDataIntoInfisicalFn = async ({
projectService, projectService,
projectEnvDAL, projectEnvDAL,
projectDAL, projectDAL,
orgService,
secretDAL, secretDAL,
kmsService, kmsService,
secretVersionDAL, secretVersionDAL,
@@ -150,26 +147,6 @@ export const importDataIntoInfisicalFn = async ({
originalToNewProjectId.set(project.id, newProject.id); originalToNewProjectId.set(project.id, newProject.id);
} }
// Invite user importing projects
const invites = await orgService.inviteUserToOrganization({
verifyPermissions: false,
actorAuthMethod,
actorId,
actorOrgId,
actor,
inviteeEmails: [],
orgId: actorOrgId,
organizationRoleSlug: OrgMembershipRole.NoAccess,
projects: Array.from(originalToNewProjectId.values()).map((project) => ({
id: project,
projectRoleSlug: [ProjectMembershipRole.Member]
})),
tx
});
if (!invites) {
throw new BadRequestError({ message: `Failed to invite user to projects: [userId:${actorId}]` });
}
// Import environments // Import environments
if (data.environments) { if (data.environments) {
for await (const environment of data.environments) { for await (const environment of data.environments) {
@@ -4,7 +4,6 @@ import { logger } from "@app/lib/logger";
import { QueueJobs, QueueName, TQueueServiceFactory } from "@app/queue"; import { QueueJobs, QueueName, TQueueServiceFactory } from "@app/queue";
import { TKmsServiceFactory } from "../kms/kms-service"; import { TKmsServiceFactory } from "../kms/kms-service";
import { TOrgServiceFactory } from "../org/org-service";
import { TProjectDALFactory } from "../project/project-dal"; import { TProjectDALFactory } from "../project/project-dal";
import { TProjectServiceFactory } from "../project/project-service"; import { TProjectServiceFactory } from "../project/project-service";
import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TProjectEnvDALFactory } from "../project-env/project-env-dal";
@@ -34,7 +33,6 @@ export type TExternalMigrationQueueFactoryDep = {
folderDAL: Pick<TSecretFolderDALFactory, "create" | "findBySecretPath">; folderDAL: Pick<TSecretFolderDALFactory, "create" | "findBySecretPath">;
projectService: Pick<TProjectServiceFactory, "createProject">; projectService: Pick<TProjectServiceFactory, "createProject">;
orgService: Pick<TOrgServiceFactory, "inviteUserToOrganization">;
projectEnvService: Pick<TProjectEnvServiceFactory, "createEnvironment">; projectEnvService: Pick<TProjectEnvServiceFactory, "createEnvironment">;
secretV2BridgeService: Pick<TSecretV2BridgeServiceFactory, "createManySecret">; secretV2BridgeService: Pick<TSecretV2BridgeServiceFactory, "createManySecret">;
}; };
@@ -44,7 +42,6 @@ export type TExternalMigrationQueueFactory = ReturnType<typeof externalMigration
export const externalMigrationQueueFactory = ({ export const externalMigrationQueueFactory = ({
queueService, queueService,
projectService, projectService,
orgService,
smtpService, smtpService,
projectDAL, projectDAL,
projectEnvService, projectEnvService,
@@ -111,7 +108,6 @@ export const externalMigrationQueueFactory = ({
folderDAL, folderDAL,
kmsService, kmsService,
projectService, projectService,
orgService,
projectEnvService, projectEnvService,
secretV2BridgeService secretV2BridgeService
}); });
+24 -48
View File
@@ -1,6 +1,5 @@
import { ForbiddenError, MongoAbility } from "@casl/ability"; import { ForbiddenError } from "@casl/ability";
import slugify from "@sindresorhus/slugify"; import slugify from "@sindresorhus/slugify";
import { MongoQuery } from "@ucast/mongo2js";
import crypto from "crypto"; import crypto from "crypto";
import jwt from "jsonwebtoken"; import jwt from "jsonwebtoken";
import { Knex } from "knex"; import { Knex } from "knex";
@@ -20,11 +19,7 @@ import { TProjects } from "@app/db/schemas/projects";
import { TGroupDALFactory } from "@app/ee/services/group/group-dal"; import { TGroupDALFactory } from "@app/ee/services/group/group-dal";
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
import { TOidcConfigDALFactory } from "@app/ee/services/oidc/oidc-config-dal"; import { TOidcConfigDALFactory } from "@app/ee/services/oidc/oidc-config-dal";
import { import { OrgPermissionActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
OrgPermissionActions,
OrgPermissionSet,
OrgPermissionSubjects
} from "@app/ee/services/permission/org-permission";
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service";
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission"; import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission";
import { TProjectUserAdditionalPrivilegeDALFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal"; import { TProjectUserAdditionalPrivilegeDALFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal";
@@ -492,17 +487,11 @@ export const orgServiceFactory = ({
organizationRoleSlug, organizationRoleSlug,
projects: invitedProjects, projects: invitedProjects,
actorAuthMethod, actorAuthMethod,
actorOrgId, actorOrgId
tx: trx,
verifyPermissions = true
}: TInviteUserToOrgDTO) => { }: TInviteUserToOrgDTO) => {
const appCfg = getConfig(); const appCfg = getConfig();
let permission: MongoAbility<OrgPermissionSet, MongoQuery> | undefined; const { permission } = await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId);
if (verifyPermissions) {
permission = (await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId))
.permission;
}
const org = await orgDAL.findOrgById(orgId); const org = await orgDAL.findOrgById(orgId);
@@ -523,15 +512,12 @@ export const orgServiceFactory = ({
} }
const projectsToInvite = invitedProjects?.length const projectsToInvite = invitedProjects?.length
? await projectDAL.find( ? await projectDAL.find({
{ orgId,
orgId, $in: {
$in: { id: invitedProjects?.map(({ id }) => id)
id: invitedProjects?.map(({ id }) => id) }
} })
},
{ tx: trx }
)
: []; : [];
if (projectsToInvite.length !== invitedProjects?.length) { if (projectsToInvite.length !== invitedProjects?.length) {
throw new ForbiddenRequestError({ throw new ForbiddenRequestError({
@@ -548,7 +534,7 @@ export const orgServiceFactory = ({
const mailsForOrgInvitation: { email: string; userId: string; firstName: string; lastName: string }[] = []; const mailsForOrgInvitation: { email: string; userId: string; firstName: string; lastName: string }[] = [];
const mailsForProjectInvitation: { email: string[]; projectName: string }[] = []; const mailsForProjectInvitation: { email: string[]; projectName: string }[] = [];
const newProjectMemberships: TProjectMemberships[] = []; const newProjectMemberships: TProjectMemberships[] = [];
await (trx || orgDAL).transaction(async (tx) => { await orgDAL.transaction(async (tx) => {
const users: Pick<TUsers, "id" | "firstName" | "lastName" | "email" | "username">[] = []; const users: Pick<TUsers, "id" | "firstName" | "lastName" | "email" | "username">[] = [];
for await (const inviteeEmail of inviteeEmails) { for await (const inviteeEmail of inviteeEmails) {
@@ -634,16 +620,8 @@ export const orgServiceFactory = ({
}); });
} }
if (verifyPermissions) { // as its used by project invite also
if (!permission) { ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Create, OrgPermissionSubjects.Member);
throw new ForbiddenRequestError({
name: "InviteUser",
message: "Failed to invite user because no permission was found"
});
}
// as its used by project invite also
ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Create, OrgPermissionSubjects.Member);
}
let roleId; let roleId;
const orgRole = isCustomOrgRole ? OrgMembershipRole.Custom : organizationRoleSlug; const orgRole = isCustomOrgRole ? OrgMembershipRole.Custom : organizationRoleSlug;
if (isCustomOrgRole) { if (isCustomOrgRole) {
@@ -684,19 +662,17 @@ export const orgServiceFactory = ({
// if there exist no project membership we set is as given by the request // if there exist no project membership we set is as given by the request
for await (const project of projectsToInvite) { for await (const project of projectsToInvite) {
const projectId = project.id; const projectId = project.id;
if (verifyPermissions) { const { permission: projectPermission } = await permissionService.getProjectPermission(
const { permission: projectPermission } = await permissionService.getProjectPermission( actor,
actor, actorId,
actorId, projectId,
projectId, actorAuthMethod,
actorAuthMethod, actorOrgId
actorOrgId );
); ForbiddenError.from(projectPermission).throwUnlessCan(
ForbiddenError.from(projectPermission).throwUnlessCan( ProjectPermissionActions.Create,
ProjectPermissionActions.Create, ProjectPermissionSub.Member
ProjectPermissionSub.Member );
);
}
const existingMembers = await projectMembershipDAL.find( const existingMembers = await projectMembershipDAL.find(
{ {
projectId: project.id, projectId: project.id,
-4
View File
@@ -1,5 +1,3 @@
import { Knex } from "knex";
import { TOrgPermission } from "@app/lib/types"; import { TOrgPermission } from "@app/lib/types";
import { ActorAuthMethod, ActorType } from "../auth/auth-type"; import { ActorAuthMethod, ActorType } from "../auth/auth-type";
@@ -30,8 +28,6 @@ export type TDeleteOrgMembershipDTO = {
export type TInviteUserToOrgDTO = { export type TInviteUserToOrgDTO = {
inviteeEmails: string[]; inviteeEmails: string[];
organizationRoleSlug: string; organizationRoleSlug: string;
tx?: Knex;
verifyPermissions?: boolean;
projects?: { projects?: {
id: string; id: string;
projectRoleSlug?: string[]; projectRoleSlug?: string[];
@@ -39,8 +39,7 @@ export const projectEnvServiceFactory = ({
actorAuthMethod, actorAuthMethod,
position, position,
name, name,
slug, slug
tx: trx
}: TCreateEnvDTO) => { }: TCreateEnvDTO) => {
const { permission } = await permissionService.getProjectPermission( const { permission } = await permissionService.getProjectPermission(
actor, actor,
@@ -84,7 +83,7 @@ export const projectEnvServiceFactory = ({
}); });
} }
const env = await (trx || projectEnvDAL).transaction(async (tx) => { const env = await projectEnvDAL.transaction(async (tx) => {
if (position !== undefined) { if (position !== undefined) {
// Check if there's an environment at the specified position // Check if there's an environment at the specified position
const existingEnvWithPosition = await projectEnvDAL.findOne({ projectId, position }, tx); const existingEnvWithPosition = await projectEnvDAL.findOne({ projectId, position }, tx);
@@ -1,12 +1,9 @@
import { Knex } from "knex";
import { TProjectPermission } from "@app/lib/types"; import { TProjectPermission } from "@app/lib/types";
export type TCreateEnvDTO = { export type TCreateEnvDTO = {
name: string; name: string;
slug: string; slug: string;
position?: number; position?: number;
tx?: Knex;
} & TProjectPermission; } & TProjectPermission;
export type TUpdateEnvDTO = { export type TUpdateEnvDTO = {
@@ -911,8 +911,7 @@ export const secretV2BridgeServiceFactory = ({
actorOrgId, actorOrgId,
environment, environment,
projectId, projectId,
secrets: inputSecrets, secrets: inputSecrets
tx: trx
}: TCreateManySecretDTO) => { }: TCreateManySecretDTO) => {
const { permission } = await permissionService.getProjectPermission( const { permission } = await permissionService.getProjectPermission(
actor, actor,
@@ -952,7 +951,7 @@ export const secretV2BridgeServiceFactory = ({
const { encryptor: secretManagerEncryptor, decryptor: secretManagerDecryptor } = const { encryptor: secretManagerEncryptor, decryptor: secretManagerDecryptor } =
await kmsService.createCipherPairWithDataKey({ type: KmsDataKey.SecretManager, projectId }); await kmsService.createCipherPairWithDataKey({ type: KmsDataKey.SecretManager, projectId });
const newSecrets = await (trx || secretDAL).transaction(async (tx) => const newSecrets = await secretDAL.transaction(async (tx) =>
fnSecretBulkInsert({ fnSecretBulkInsert({
inputSecrets: inputSecrets.map((el) => { inputSecrets: inputSecrets.map((el) => {
const references = getAllNestedSecretReferences(el.secretValue); const references = getAllNestedSecretReferences(el.secretValue);
@@ -81,7 +81,6 @@ export type TCreateManySecretDTO = Omit<TProjectPermission, "projectId"> & {
secretPath: string; secretPath: string;
projectId: string; projectId: string;
environment: string; environment: string;
tx?: Knex;
secrets: { secrets: {
secretKey: string; secretKey: string;
secretValue: string; secretValue: string;