feat: rebase conflict issue

This commit is contained in:
=
2025-10-10 00:09:46 +05:30
parent 0d221f497d
commit 93f544be07
14 changed files with 48 additions and 52 deletions
@@ -33,7 +33,7 @@ import { ApprovalStatus, TAccessApprovalRequestServiceFactory } from "./access-a
type TSecretApprovalRequestServiceFactoryDep = { type TSecretApprovalRequestServiceFactoryDep = {
additionalPrivilegeDAL: Pick<TAdditionalPrivilegeDALFactory, "create" | "findById">; additionalPrivilegeDAL: Pick<TAdditionalPrivilegeDALFactory, "create" | "findById">;
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission">; permissionService: Pick<TPermissionServiceFactory, "getProjectPermission" | "invalidateProjectPermissionCache">;
accessApprovalPolicyApproverDAL: Pick<TAccessApprovalPolicyApproverDALFactory, "find">; accessApprovalPolicyApproverDAL: Pick<TAccessApprovalPolicyApproverDALFactory, "find">;
projectEnvDAL: Pick<TProjectEnvDALFactory, "findOne">; projectEnvDAL: Pick<TProjectEnvDALFactory, "findOne">;
projectDAL: Pick< projectDAL: Pick<
+4 -26
View File
@@ -46,7 +46,10 @@ type TGroupServiceFactoryDep = {
projectDAL: Pick<TProjectDALFactory, "findProjectGhostUser" | "findById">; projectDAL: Pick<TProjectDALFactory, "findProjectGhostUser" | "findById">;
projectBotDAL: Pick<TProjectBotDALFactory, "findOne">; projectBotDAL: Pick<TProjectBotDALFactory, "findOne">;
projectKeyDAL: Pick<TProjectKeyDALFactory, "find" | "delete" | "findLatestProjectKey" | "insertMany">; projectKeyDAL: Pick<TProjectKeyDALFactory, "find" | "delete" | "findLatestProjectKey" | "insertMany">;
permissionService: Pick<TPermissionServiceFactory, "getOrgPermission" | "getOrgPermissionByRoles" | "invalidateProjectPermissionCache">; permissionService: Pick<
TPermissionServiceFactory,
"getOrgPermission" | "getOrgPermissionByRoles" | "invalidateProjectPermissionCache"
>;
licenseService: Pick<TLicenseServiceFactory, "getPlan">; licenseService: Pick<TLicenseServiceFactory, "getPlan">;
oidcConfigDAL: Pick<TOidcConfigDALFactory, "findOne">; oidcConfigDAL: Pick<TOidcConfigDALFactory, "findOne">;
}; };
@@ -261,15 +264,6 @@ export const groupServiceFactory = ({
return updated; return updated;
}); });
if (role) {
const groupProjects = await groupProjectDAL.find({ groupId: group.id });
await Promise.allSettled([
...groupProjects.map((groupProject) =>
permissionService.invalidateProjectPermissionCache(groupProject.projectId)
)
]);
}
return updatedGroup; return updatedGroup;
}; };
@@ -292,17 +286,11 @@ export const groupServiceFactory = ({
message: "Failed to delete group due to plan restriction. Upgrade plan to delete group." message: "Failed to delete group due to plan restriction. Upgrade plan to delete group."
}); });
const groupProjects = await groupProjectDAL.find({ groupId: id });
const [group] = await groupDAL.delete({ const [group] = await groupDAL.delete({
id, id,
orgId: actorOrgId orgId: actorOrgId
}); });
await Promise.allSettled([
...groupProjects.map((groupProject) => permissionService.invalidateProjectPermissionCache(groupProject.projectId))
]);
return group; return group;
}; };
@@ -450,11 +438,6 @@ export const groupServiceFactory = ({
projectBotDAL projectBotDAL
}); });
const groupProjects = await groupProjectDAL.find({ groupId: group.id });
await Promise.allSettled([
...groupProjects.map((groupProject) => permissionService.invalidateProjectPermissionCache(groupProject.projectId))
]);
return users[0]; return users[0];
}; };
@@ -537,11 +520,6 @@ export const groupServiceFactory = ({
projectKeyDAL projectKeyDAL
}); });
const groupProjects = await groupProjectDAL.find({ groupId: group.id });
await Promise.allSettled([
...groupProjects.map((groupProject) => permissionService.invalidateProjectPermissionCache(groupProject.projectId))
]);
return users[0]; return users[0];
}; };
@@ -40,7 +40,7 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({
oidcSSO: false, oidcSSO: false,
scim: false, scim: false,
ldap: false, ldap: false,
groups: true, groups: false,
status: null, status: null,
trial_end: null, trial_end: null,
has_used_trial: true, has_used_trial: true,
@@ -4,14 +4,14 @@ import { Knex } from "knex";
import RE2 from "re2"; import RE2 from "re2";
import { import {
AccessScope,
OrgMembershipRole, OrgMembershipRole,
OrgMembershipStatus, OrgMembershipStatus,
TableName, TableName,
TGroups, TGroups,
TSamlConfigs, TSamlConfigs,
TSamlConfigsUpdate, TSamlConfigsUpdate,
TUsers, TUsers
AccessScope
} from "@app/db/schemas"; } from "@app/db/schemas";
import { throwOnPlanSeatLimitReached } from "@app/ee/services/license/license-fns"; import { throwOnPlanSeatLimitReached } from "@app/ee/services/license/license-fns";
import { getConfig } from "@app/lib/config/env"; import { getConfig } from "@app/lib/config/env";
@@ -20,13 +20,16 @@ import { BadRequestError, ForbiddenRequestError, NotFoundError } from "@app/lib/
import { AuthTokenType } from "@app/services/auth/auth-type"; import { AuthTokenType } from "@app/services/auth/auth-type";
import { TAuthTokenServiceFactory } from "@app/services/auth-token/auth-token-service"; import { TAuthTokenServiceFactory } from "@app/services/auth-token/auth-token-service";
import { TokenType } from "@app/services/auth-token/auth-token-types"; import { TokenType } from "@app/services/auth-token/auth-token-types";
import { TGroupProjectDALFactory } from "@app/services/group-project/group-project-dal";
import { TIdentityMetadataDALFactory } from "@app/services/identity/identity-metadata-dal"; import { TIdentityMetadataDALFactory } from "@app/services/identity/identity-metadata-dal";
import { TKmsServiceFactory } from "@app/services/kms/kms-service"; import { TKmsServiceFactory } from "@app/services/kms/kms-service";
import { KmsDataKey } from "@app/services/kms/kms-types"; import { KmsDataKey } from "@app/services/kms/kms-types";
import { TMembershipRoleDALFactory } from "@app/services/membership/membership-role-dal"; import { TMembershipRoleDALFactory } from "@app/services/membership/membership-role-dal";
import { TMembershipGroupDALFactory } from "@app/services/membership-group/membership-group-dal";
import { TOrgDALFactory } from "@app/services/org/org-dal"; import { TOrgDALFactory } from "@app/services/org/org-dal";
import { getDefaultOrgMembershipRole } from "@app/services/org/org-role-fns"; import { getDefaultOrgMembershipRole } from "@app/services/org/org-role-fns";
import { TProjectDALFactory } from "@app/services/project/project-dal";
import { TProjectBotDALFactory } from "@app/services/project-bot/project-bot-dal";
import { TProjectKeyDALFactory } from "@app/services/project-key/project-key-dal";
import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service"; import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service";
import { getServerCfg } from "@app/services/super-admin/super-admin-service"; import { getServerCfg } from "@app/services/super-admin/super-admin-service";
import { LoginMethod } from "@app/services/super-admin/super-admin-types"; import { LoginMethod } from "@app/services/super-admin/super-admin-types";
@@ -72,6 +75,15 @@ type TSamlConfigServiceFactoryDep = {
tokenService: Pick<TAuthTokenServiceFactory, "createTokenForUser">; tokenService: Pick<TAuthTokenServiceFactory, "createTokenForUser">;
smtpService: Pick<TSmtpService, "sendMail">; smtpService: Pick<TSmtpService, "sendMail">;
kmsService: Pick<TKmsServiceFactory, "createCipherPairWithDataKey">; kmsService: Pick<TKmsServiceFactory, "createCipherPairWithDataKey">;
userGroupMembershipDAL: Pick<
TUserGroupMembershipDALFactory,
"find" | "delete" | "transaction" | "insertMany" | "filterProjectsByUserMembership"
>;
groupDAL: Pick<TGroupDALFactory, "create" | "findOne" | "find" | "transaction">;
projectDAL: Pick<TProjectDALFactory, "findById" | "findProjectGhostUser">;
projectBotDAL: Pick<TProjectBotDALFactory, "findOne">;
projectKeyDAL: Pick<TProjectKeyDALFactory, "find" | "delete" | "findLatestProjectKey" | "insertMany">;
membershipGroupDAL: Pick<TMembershipGroupDALFactory, "find">;
}; };
export const samlConfigServiceFactory = ({ export const samlConfigServiceFactory = ({
@@ -81,7 +93,6 @@ export const samlConfigServiceFactory = ({
userAliasDAL, userAliasDAL,
groupDAL, groupDAL,
userGroupMembershipDAL, userGroupMembershipDAL,
groupProjectDAL,
projectDAL, projectDAL,
projectBotDAL, projectBotDAL,
projectKeyDAL, projectKeyDAL,
@@ -91,7 +102,8 @@ export const samlConfigServiceFactory = ({
smtpService, smtpService,
identityMetadataDAL, identityMetadataDAL,
kmsService, kmsService,
membershipRoleDAL membershipRoleDAL,
membershipGroupDAL
}: TSamlConfigServiceFactoryDep): TSamlConfigServiceFactory => { }: TSamlConfigServiceFactoryDep): TSamlConfigServiceFactory => {
const parseSamlGroups = (groupsValue: string): string[] => { const parseSamlGroups = (groupsValue: string): string[] => {
let samlGroups: string[] = []; let samlGroups: string[] = [];
@@ -184,10 +196,10 @@ export const samlConfigServiceFactory = ({
userDAL, userDAL,
userGroupMembershipDAL, userGroupMembershipDAL,
orgDAL, orgDAL,
groupProjectDAL,
projectKeyDAL, projectKeyDAL,
projectDAL, projectDAL,
projectBotDAL, projectBotDAL,
membershipGroupDAL,
tx: transaction tx: transaction
}); });
} catch (error) { } catch (error) {
@@ -207,7 +219,7 @@ export const samlConfigServiceFactory = ({
group, group,
userDAL, userDAL,
userGroupMembershipDAL, userGroupMembershipDAL,
groupProjectDAL, membershipGroupDAL,
projectKeyDAL, projectKeyDAL,
tx: transaction tx: transaction
}); });
+4 -4
View File
@@ -683,7 +683,6 @@ export const registerRoutes = async (
samlConfigDAL, samlConfigDAL,
groupDAL, groupDAL,
userGroupMembershipDAL, userGroupMembershipDAL,
groupProjectDAL,
projectDAL, projectDAL,
projectBotDAL, projectBotDAL,
projectKeyDAL, projectKeyDAL,
@@ -691,7 +690,8 @@ export const registerRoutes = async (
tokenService, tokenService,
smtpService, smtpService,
kmsService, kmsService,
membershipRoleDAL membershipRoleDAL,
membershipGroupDAL
}); });
const groupService = groupServiceFactory({ const groupService = groupServiceFactory({
userDAL, userDAL,
@@ -848,8 +848,8 @@ export const registerRoutes = async (
smtpService, smtpService,
authDAL, authDAL,
userDAL, userDAL,
orgMembershipDAL, totpConfigDAL,
totpConfigDAL membershipUserDAL
}); });
const projectBotService = projectBotServiceFactory({ permissionService, projectBotDAL, projectDAL }); const projectBotService = projectBotServiceFactory({ permissionService, projectBotDAL, projectDAL });
@@ -1,3 +1,4 @@
import { AccessScope } from "@app/db/schemas";
import { getConfig } from "@app/lib/config/env"; import { getConfig } from "@app/lib/config/env";
import { crypto } from "@app/lib/crypto/cryptography"; import { crypto } from "@app/lib/crypto/cryptography";
import { BadRequestError } from "@app/lib/errors"; import { BadRequestError } from "@app/lib/errors";
@@ -6,7 +7,7 @@ import { OrgServiceActor } from "@app/lib/types";
import { TAuthTokenServiceFactory } from "../auth-token/auth-token-service"; import { TAuthTokenServiceFactory } from "../auth-token/auth-token-service";
import { TokenType } from "../auth-token/auth-token-types"; import { TokenType } from "../auth-token/auth-token-types";
import { TOrgMembershipDALFactory } from "../org-membership/org-membership-dal"; import { TMembershipUserDALFactory } from "../membership-user/membership-user-dal";
import { SmtpTemplates, TSmtpService } from "../smtp/smtp-service"; import { SmtpTemplates, TSmtpService } from "../smtp/smtp-service";
import { TTotpConfigDALFactory } from "../totp/totp-config-dal"; import { TTotpConfigDALFactory } from "../totp/totp-config-dal";
import { TUserDALFactory } from "../user/user-dal"; import { TUserDALFactory } from "../user/user-dal";
@@ -23,7 +24,7 @@ import { ActorType, AuthMethod, AuthTokenType } from "./auth-type";
type TAuthPasswordServiceFactoryDep = { type TAuthPasswordServiceFactoryDep = {
authDAL: TAuthDALFactory; authDAL: TAuthDALFactory;
userDAL: TUserDALFactory; userDAL: TUserDALFactory;
orgMembershipDAL: Pick<TOrgMembershipDALFactory, "find">; membershipUserDAL: Pick<TMembershipUserDALFactory, "find">;
tokenService: TAuthTokenServiceFactory; tokenService: TAuthTokenServiceFactory;
smtpService: TSmtpService; smtpService: TSmtpService;
totpConfigDAL: Pick<TTotpConfigDALFactory, "delete">; totpConfigDAL: Pick<TTotpConfigDALFactory, "delete">;
@@ -33,7 +34,7 @@ export type TAuthPasswordFactory = ReturnType<typeof authPaswordServiceFactory>;
export const authPaswordServiceFactory = ({ export const authPaswordServiceFactory = ({
authDAL, authDAL,
userDAL, userDAL,
orgMembershipDAL, membershipUserDAL,
tokenService, tokenService,
smtpService, smtpService,
totpConfigDAL totpConfigDAL
@@ -54,7 +55,10 @@ export const authPaswordServiceFactory = ({
const hasEmailAuth = user.authMethods?.includes(AuthMethod.EMAIL); const hasEmailAuth = user.authMethods?.includes(AuthMethod.EMAIL);
if (!hasEmailAuth) { if (!hasEmailAuth) {
const orgMemberships = await orgMembershipDAL.find({ userId: user.id }); const orgMemberships = await membershipUserDAL.find({
actorUserId: user.id,
scope: AccessScope.Organization
});
const lastLoginMethod = const lastLoginMethod =
orgMemberships orgMemberships
.filter((membership) => membership.lastLoginAuthMethod) .filter((membership) => membership.lastLoginAuthMethod)
@@ -32,7 +32,10 @@ import {
} from "./project-membership-types"; } from "./project-membership-types";
type TProjectMembershipServiceFactoryDep = { type TProjectMembershipServiceFactoryDep = {
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission" | "getProjectPermissionByRoles"| "invalidateProjectPermissionCache">; permissionService: Pick<
TPermissionServiceFactory,
"getProjectPermission" | "getProjectPermissionByRoles" | "invalidateProjectPermissionCache"
>;
smtpService: TSmtpService; smtpService: TSmtpService;
projectMembershipDAL: TProjectMembershipDALFactory; projectMembershipDAL: TProjectMembershipDALFactory;
membershipUserDAL: TMembershipUserDALFactory; membershipUserDAL: TMembershipUserDALFactory;
@@ -1,3 +1,4 @@
import { useCallback } from "react";
import { createMongoAbility, MongoAbility, RawRuleOf } from "@casl/ability"; import { createMongoAbility, MongoAbility, RawRuleOf } from "@casl/ability";
import { unpackRules } from "@casl/ability/extra"; import { unpackRules } from "@casl/ability/extra";
import { useSuspenseQuery } from "@tanstack/react-query"; import { useSuspenseQuery } from "@tanstack/react-query";
@@ -10,7 +11,6 @@ import {
} from "@app/hooks/api/roles/queries"; } from "@app/hooks/api/roles/queries";
import { OrgPermissionSet } from "./types"; import { OrgPermissionSet } from "./types";
import { useCallback } from "react";
export const useOrgPermission = () => { export const useOrgPermission = () => {
const organizationId = useRouteContext({ const organizationId = useRouteContext({
+1 -1
View File
@@ -99,7 +99,7 @@ export const useGetOrgRole = (orgId: string, roleId: string) =>
}>(`/api/v1/organization/${orgId}/roles/${roleId}`); }>(`/api/v1/organization/${orgId}/roles/${roleId}`);
return { return {
...data.role, ...data.role,
permissions: data.role.permissions as PackRule<TPermission>[] permissions: data.role.permissions as TPermission[]
}; };
}, },
enabled: Boolean(orgId && roleId) enabled: Boolean(orgId && roleId)
-1
View File
@@ -8,7 +8,6 @@ import { queryClient as qc } from "@app/hooks/api/reactQuery";
import { APIKeyDataV2 } from "../apiKeys/types"; import { APIKeyDataV2 } from "../apiKeys/types";
import { MfaMethod } from "../auth/types"; import { MfaMethod } from "../auth/types";
import { TGroupWithProjectMemberships } from "../groups/types"; import { TGroupWithProjectMemberships } from "../groups/types";
import { projectKeys } from "../projects";
import { setAuthToken } from "../reactQuery"; import { setAuthToken } from "../reactQuery";
import { subscriptionQueryKeys } from "../subscriptions/queries"; import { subscriptionQueryKeys } from "../subscriptions/queries";
import { userKeys } from "./query-keys"; import { userKeys } from "./query-keys";
@@ -6,8 +6,8 @@ import { z } from "zod";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button, Checkbox, Modal, ModalContent, Tooltip } from "@app/components/v2"; import { Button, Checkbox, Modal, ModalContent, Tooltip } from "@app/components/v2";
import { useOrgPermission } from "@app/context"; import { useOrgPermission } from "@app/context";
import { useUpgradePrivilegeSystem } from "@app/hooks/api";
import { OrgMembershipRole } from "@app/helpers/roles"; import { OrgMembershipRole } from "@app/helpers/roles";
import { useUpgradePrivilegeSystem } from "@app/hooks/api";
const formSchema = z.object({ const formSchema = z.object({
isProjectPrivilegesUpdated: z.literal(true), isProjectPrivilegesUpdated: z.literal(true),
@@ -275,7 +275,7 @@ export const UpgradePrivilegeSystemModal = ({ isOpen, onOpenChange }: Props) =>
<Tooltip <Tooltip
content={ content={
!isAdmin !isAdmin
? `You cannot perform this upgrade because you are not an organization admin.` ? "You cannot perform this upgrade because you are not an organization admin."
: undefined : undefined
} }
> >
@@ -3,10 +3,10 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Button } from "@app/components/v2"; import { Button } from "@app/components/v2";
import { useOrgPermission } from "@app/context"; import { useOrgPermission } from "@app/context";
import { OrgMembershipRole } from "@app/helpers/roles";
import { usePopUp } from "@app/hooks"; import { usePopUp } from "@app/hooks";
import { SelectImportFromPlatformModal } from "./components/SelectImportFromPlatformModal"; import { SelectImportFromPlatformModal } from "./components/SelectImportFromPlatformModal";
import { OrgMembershipRole } from "@app/helpers/roles";
export const ExternalMigrationsTab = () => { export const ExternalMigrationsTab = () => {
const { hasOrgRole } = useOrgPermission(); const { hasOrgRole } = useOrgPermission();
@@ -3,10 +3,10 @@ import { useNavigate } from "@tanstack/react-router";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button, DeleteActionModal } from "@app/components/v2"; import { Button, DeleteActionModal } from "@app/components/v2";
import { useOrganization, useOrgPermission } from "@app/context"; import { useOrganization, useOrgPermission } from "@app/context";
import { OrgMembershipRole } from "@app/helpers/roles";
import { useDeleteOrgById } from "@app/hooks/api"; import { useDeleteOrgById } from "@app/hooks/api";
import { clearSession } from "@app/hooks/api/users/queries"; import { clearSession } from "@app/hooks/api/users/queries";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
import { OrgMembershipRole } from "@app/helpers/roles";
export const OrgDeleteSection = () => { export const OrgDeleteSection = () => {
const navigate = useNavigate(); const navigate = useNavigate();
@@ -1,9 +1,9 @@
import { useOrgPermission } from "@app/context"; import { useOrgPermission } from "@app/context";
import { OrgMembershipRole } from "@app/helpers/roles";
import { OrgDeleteSection } from "../OrgDeleteSection"; import { OrgDeleteSection } from "../OrgDeleteSection";
import { OrgIncidentContactsSection } from "../OrgIncidentContactsSection"; import { OrgIncidentContactsSection } from "../OrgIncidentContactsSection";
import { OrgNameChangeSection } from "../OrgNameChangeSection"; import { OrgNameChangeSection } from "../OrgNameChangeSection";
import { OrgMembershipRole } from "@app/helpers/roles";
export const OrgGeneralTab = () => { export const OrgGeneralTab = () => {
const { hasOrgRole } = useOrgPermission(); const { hasOrgRole } = useOrgPermission();