mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
feat: lint and finally completed
This commit is contained in:
4
backend/src/@types/fastify.d.ts
vendored
4
backend/src/@types/fastify.d.ts
vendored
@@ -50,6 +50,7 @@ import { TSshHostServiceFactory } from "@app/ee/services/ssh-host/ssh-host-servi
|
|||||||
import { TSshHostGroupServiceFactory } from "@app/ee/services/ssh-host-group/ssh-host-group-service";
|
import { TSshHostGroupServiceFactory } from "@app/ee/services/ssh-host-group/ssh-host-group-service";
|
||||||
import { TTrustedIpServiceFactory } from "@app/ee/services/trusted-ip/trusted-ip-types";
|
import { TTrustedIpServiceFactory } from "@app/ee/services/trusted-ip/trusted-ip-types";
|
||||||
import { TAuthMode } from "@app/server/plugins/auth/inject-identity";
|
import { TAuthMode } from "@app/server/plugins/auth/inject-identity";
|
||||||
|
import { TAdditionalPrivilegeServiceFactory } from "@app/services/additional-privilege/additional-privilege-service";
|
||||||
import { TApiKeyServiceFactory } from "@app/services/api-key/api-key-service";
|
import { TApiKeyServiceFactory } from "@app/services/api-key/api-key-service";
|
||||||
import { TAppConnectionServiceFactory } from "@app/services/app-connection/app-connection-service";
|
import { TAppConnectionServiceFactory } from "@app/services/app-connection/app-connection-service";
|
||||||
import { TAuthLoginFactory } from "@app/services/auth/auth-login-service";
|
import { TAuthLoginFactory } from "@app/services/auth/auth-login-service";
|
||||||
@@ -62,6 +63,7 @@ import { TCertificateAuthorityServiceFactory } from "@app/services/certificate-a
|
|||||||
import { TInternalCertificateAuthorityServiceFactory } from "@app/services/certificate-authority/internal/internal-certificate-authority-service";
|
import { TInternalCertificateAuthorityServiceFactory } from "@app/services/certificate-authority/internal/internal-certificate-authority-service";
|
||||||
import { TCertificateTemplateServiceFactory } from "@app/services/certificate-template/certificate-template-service";
|
import { TCertificateTemplateServiceFactory } from "@app/services/certificate-template/certificate-template-service";
|
||||||
import { TCmekServiceFactory } from "@app/services/cmek/cmek-service";
|
import { TCmekServiceFactory } from "@app/services/cmek/cmek-service";
|
||||||
|
import { TConvertorServiceFactory } from "@app/services/convertor/convertor-service";
|
||||||
import { TExternalGroupOrgRoleMappingServiceFactory } from "@app/services/external-group-org-role-mapping/external-group-org-role-mapping-service";
|
import { TExternalGroupOrgRoleMappingServiceFactory } from "@app/services/external-group-org-role-mapping/external-group-org-role-mapping-service";
|
||||||
import { TExternalMigrationServiceFactory } from "@app/services/external-migration/external-migration-service";
|
import { TExternalMigrationServiceFactory } from "@app/services/external-migration/external-migration-service";
|
||||||
import { TFolderCommitServiceFactory } from "@app/services/folder-commit/folder-commit-service";
|
import { TFolderCommitServiceFactory } from "@app/services/folder-commit/folder-commit-service";
|
||||||
@@ -124,8 +126,6 @@ import { TUserServiceFactory } from "@app/services/user/user-service";
|
|||||||
import { TUserEngagementServiceFactory } from "@app/services/user-engagement/user-engagement-service";
|
import { TUserEngagementServiceFactory } from "@app/services/user-engagement/user-engagement-service";
|
||||||
import { TWebhookServiceFactory } from "@app/services/webhook/webhook-service";
|
import { TWebhookServiceFactory } from "@app/services/webhook/webhook-service";
|
||||||
import { TWorkflowIntegrationServiceFactory } from "@app/services/workflow-integration/workflow-integration-service";
|
import { TWorkflowIntegrationServiceFactory } from "@app/services/workflow-integration/workflow-integration-service";
|
||||||
import { TConvertorServiceFactory } from "@app/services/convertor/convertor-service";
|
|
||||||
import { TAdditionalPrivilegeServiceFactory } from "@app/services/additional-privilege/additional-privilege-service";
|
|
||||||
|
|
||||||
declare module "@fastify/request-context" {
|
declare module "@fastify/request-context" {
|
||||||
interface RequestContextData {
|
interface RequestContextData {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export async function up(knex: Knex): Promise<void> {
|
|||||||
t.foreign("scopeNamespaceId").references("id").inTable(TableName.Namespace).onDelete("CASCADE");
|
t.foreign("scopeNamespaceId").references("id").inTable(TableName.Namespace).onDelete("CASCADE");
|
||||||
|
|
||||||
t.boolean("isActive").defaultTo(true).notNullable();
|
t.boolean("isActive").defaultTo(true).notNullable();
|
||||||
t.string("status").defaultTo("invited").notNullable();
|
t.string("status");
|
||||||
t.string("inviteEmail");
|
t.string("inviteEmail");
|
||||||
t.datetime("lastInvitedAt");
|
t.datetime("lastInvitedAt");
|
||||||
t.string("lastLoginAuthMethod");
|
t.string("lastLoginAuthMethod");
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export const MembershipsSchema = z.object({
|
|||||||
scopeProjectId: z.string().nullable().optional(),
|
scopeProjectId: z.string().nullable().optional(),
|
||||||
scopeNamespaceId: z.string().uuid().nullable().optional(),
|
scopeNamespaceId: z.string().uuid().nullable().optional(),
|
||||||
isActive: z.boolean().default(true),
|
isActive: z.boolean().default(true),
|
||||||
status: z.string().default("invited"),
|
status: z.string().nullable().optional(),
|
||||||
inviteEmail: z.string().nullable().optional(),
|
inviteEmail: z.string().nullable().optional(),
|
||||||
lastInvitedAt: z.date().nullable().optional(),
|
lastInvitedAt: z.date().nullable().optional(),
|
||||||
lastLoginAuthMethod: z.string().nullable().optional(),
|
lastLoginAuthMethod: z.string().nullable().optional(),
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { generateUserSrpKeys } from "@app/lib/crypto/srp";
|
|||||||
import { initLogger, logger } from "@app/lib/logger";
|
import { initLogger, logger } from "@app/lib/logger";
|
||||||
import { alphaNumericNanoId } from "@app/lib/nanoid";
|
import { alphaNumericNanoId } from "@app/lib/nanoid";
|
||||||
import { AuthMethod } from "@app/services/auth/auth-type";
|
import { AuthMethod } from "@app/services/auth/auth-type";
|
||||||
|
import { membershipRoleDALFactory } from "@app/services/membership/membership-role-dal";
|
||||||
import { membershipUserDALFactory } from "@app/services/membership-user/membership-user-dal";
|
import { membershipUserDALFactory } from "@app/services/membership-user/membership-user-dal";
|
||||||
import { assignWorkspaceKeysToMembers, createProjectKey } from "@app/services/project/project-fns";
|
import { assignWorkspaceKeysToMembers, createProjectKey } from "@app/services/project/project-fns";
|
||||||
import { projectKeyDALFactory } from "@app/services/project-key/project-key-dal";
|
import { projectKeyDALFactory } from "@app/services/project-key/project-key-dal";
|
||||||
@@ -23,7 +24,6 @@ import {
|
|||||||
TableName
|
TableName
|
||||||
} from "../schemas";
|
} from "../schemas";
|
||||||
import { seedData1 } from "../seed-data";
|
import { seedData1 } from "../seed-data";
|
||||||
import { membershipRoleDALFactory } from "@app/services/membership/membership-role-dal";
|
|
||||||
|
|
||||||
export const DEFAULT_PROJECT_ENVS = [
|
export const DEFAULT_PROJECT_ENVS = [
|
||||||
{ name: "Development", slug: "dev" },
|
{ name: "Development", slug: "dev" },
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { packRules } from "@casl/ability/extra";
|
import { packRules } from "@casl/ability/extra";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AccessScope, OrgMembershipRole, OrgMembershipsSchema, OrgRolesSchema } from "@app/db/schemas";
|
import { AccessScope, OrgMembershipRole, OrgRolesSchema } from "@app/db/schemas";
|
||||||
import { EventType } from "@app/ee/services/audit-log/audit-log-types";
|
import { EventType } from "@app/ee/services/audit-log/audit-log-types";
|
||||||
import { OrgPermissionSchema } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionSchema } from "@app/ee/services/permission/org-permission";
|
||||||
import { readLimit, writeLimit } from "@app/server/config/rateLimiter";
|
import { readLimit, writeLimit } from "@app/server/config/rateLimiter";
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ const AccessListEntrySchema = z
|
|||||||
.object({
|
.object({
|
||||||
allowedActions: z.nativeEnum(ProjectPermissionSecretActions).array(),
|
allowedActions: z.nativeEnum(ProjectPermissionSecretActions).array(),
|
||||||
id: z.string(),
|
id: z.string(),
|
||||||
membershipId: z.string(),
|
|
||||||
name: z.string()
|
name: z.string()
|
||||||
})
|
})
|
||||||
.array();
|
.array();
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import { TPermissionServiceFactory } from "@app/ee/services/permission/permissio
|
|||||||
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission";
|
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission";
|
||||||
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
||||||
import { groupBy } from "@app/lib/fn";
|
import { groupBy } from "@app/lib/fn";
|
||||||
|
import { TAdditionalPrivilegeDALFactory } from "@app/services/additional-privilege/additional-privilege-dal";
|
||||||
|
import { TMembershipUserDALFactory } from "@app/services/membership-user/membership-user-dal";
|
||||||
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
||||||
import { TProjectEnvDALFactory } from "@app/services/project-env/project-env-dal";
|
import { TProjectEnvDALFactory } from "@app/services/project-env/project-env-dal";
|
||||||
import { TUserDALFactory } from "@app/services/user/user-dal";
|
import { TUserDALFactory } from "@app/services/user/user-dal";
|
||||||
@@ -28,8 +30,6 @@ import {
|
|||||||
TListAccessApprovalPoliciesDTO,
|
TListAccessApprovalPoliciesDTO,
|
||||||
TUpdateAccessApprovalPolicy
|
TUpdateAccessApprovalPolicy
|
||||||
} from "./access-approval-policy-types";
|
} from "./access-approval-policy-types";
|
||||||
import { TMembershipUserDALFactory } from "@app/services/membership-user/membership-user-dal";
|
|
||||||
import { TAdditionalPrivilegeDALFactory } from "@app/services/additional-privilege/additional-privilege-dal";
|
|
||||||
|
|
||||||
type TAccessApprovalPolicyServiceFactoryDep = {
|
type TAccessApprovalPolicyServiceFactoryDep = {
|
||||||
projectDAL: TProjectDALFactory;
|
projectDAL: TProjectDALFactory;
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ import { Knex } from "knex";
|
|||||||
import { TDbClient } from "@app/db";
|
import { TDbClient } from "@app/db";
|
||||||
import {
|
import {
|
||||||
AccessApprovalRequestsSchema,
|
AccessApprovalRequestsSchema,
|
||||||
|
AccessScope,
|
||||||
TableName,
|
TableName,
|
||||||
TAccessApprovalRequests,
|
TAccessApprovalRequests,
|
||||||
TOrgMemberships,
|
TMemberships,
|
||||||
TUserGroupMembership,
|
TUserGroupMembership,
|
||||||
TUsers
|
TUsers
|
||||||
} from "@app/db/schemas";
|
} from "@app/db/schemas";
|
||||||
@@ -238,7 +239,6 @@ export interface TAccessApprovalRequestDALFactory extends Omit<TOrmify<TableName
|
|||||||
export const accessApprovalRequestDALFactory = (db: TDbClient): TAccessApprovalRequestDALFactory => {
|
export const accessApprovalRequestDALFactory = (db: TDbClient): TAccessApprovalRequestDALFactory => {
|
||||||
const accessApprovalRequestOrm = ormify(db, TableName.AccessApprovalRequest);
|
const accessApprovalRequestOrm = ormify(db, TableName.AccessApprovalRequest);
|
||||||
|
|
||||||
// TODO(simp): check this from begginging
|
|
||||||
const findRequestsWithPrivilegeByPolicyIds: TAccessApprovalRequestDALFactory["findRequestsWithPrivilegeByPolicyIds"] =
|
const findRequestsWithPrivilegeByPolicyIds: TAccessApprovalRequestDALFactory["findRequestsWithPrivilegeByPolicyIds"] =
|
||||||
async (policyIds) => {
|
async (policyIds) => {
|
||||||
try {
|
try {
|
||||||
@@ -293,24 +293,24 @@ export const accessApprovalRequestDALFactory = (db: TDbClient): TAccessApprovalR
|
|||||||
`requestedByUser.id`
|
`requestedByUser.id`
|
||||||
)
|
)
|
||||||
|
|
||||||
.leftJoin<TOrgMemberships>(
|
.leftJoin<TMemberships>(db(TableName.Membership).as("approverOrgMembership"), (qb) => {
|
||||||
db(TableName.OrgMembership).as("approverOrgMembership"),
|
qb.on(
|
||||||
`${TableName.AccessApprovalPolicyApprover}.approverUserId`,
|
`${TableName.AccessApprovalPolicyApprover}.approverUserId`,
|
||||||
`approverOrgMembership.userId`
|
`approverOrgMembership.actorUserId`
|
||||||
)
|
).andOn(`approverOrgMembership.scope`, db.raw("?", [AccessScope.Organization]));
|
||||||
|
})
|
||||||
.leftJoin<TOrgMemberships>(
|
.leftJoin<TMemberships>(db(TableName.Membership).as("approverGroupOrgMembership"), (qb) => {
|
||||||
db(TableName.OrgMembership).as("approverGroupOrgMembership"),
|
qb.on(`${TableName.Users}.id`, `approverGroupOrgMembership.actorUserId`).andOn(
|
||||||
`${TableName.Users}.id`,
|
`approverGroupOrgMembership.scope`,
|
||||||
`approverGroupOrgMembership.userId`
|
db.raw("?", [AccessScope.Organization])
|
||||||
)
|
);
|
||||||
|
})
|
||||||
.leftJoin<TOrgMemberships>(
|
.leftJoin<TMemberships>(db(TableName.Membership).as("reviewerOrgMembership"), (qb) => {
|
||||||
db(TableName.OrgMembership).as("reviewerOrgMembership"),
|
qb.on(
|
||||||
`${TableName.AccessApprovalRequestReviewer}.reviewerUserId`,
|
`${TableName.AccessApprovalRequestReviewer}.reviewerUserId`,
|
||||||
`reviewerOrgMembership.userId`
|
`reviewerOrgMembership.actorUserId`
|
||||||
)
|
).andOn(`reviewerOrgMembership.scope`, db.raw("?", [AccessScope.Organization]));
|
||||||
|
})
|
||||||
.leftJoin(TableName.Environment, `${TableName.AccessApprovalPolicy}.envId`, `${TableName.Environment}.id`)
|
.leftJoin(TableName.Environment, `${TableName.AccessApprovalPolicy}.envId`, `${TableName.Environment}.id`)
|
||||||
|
|
||||||
.select(selectAllTableCols(TableName.AccessApprovalRequest))
|
.select(selectAllTableCols(TableName.AccessApprovalRequest))
|
||||||
@@ -359,22 +359,22 @@ export const accessApprovalRequestDALFactory = (db: TDbClient): TAccessApprovalR
|
|||||||
db.ref("firstName").withSchema("requestedByUser").as("requestedByUserFirstName"),
|
db.ref("firstName").withSchema("requestedByUser").as("requestedByUserFirstName"),
|
||||||
db.ref("lastName").withSchema("requestedByUser").as("requestedByUserLastName"),
|
db.ref("lastName").withSchema("requestedByUser").as("requestedByUserLastName"),
|
||||||
|
|
||||||
db.ref("userId").withSchema(TableName.ProjectUserAdditionalPrivilege).as("privilegeUserId"),
|
db.ref("actorUserId").withSchema(TableName.AdditionalPrivilege).as("privilegeUserId"),
|
||||||
db.ref("projectId").withSchema(TableName.ProjectUserAdditionalPrivilege).as("privilegeMembershipId"),
|
db.ref("projectId").withSchema(TableName.AdditionalPrivilege).as("privilegeMembershipId"),
|
||||||
|
|
||||||
db.ref("isTemporary").withSchema(TableName.ProjectUserAdditionalPrivilege).as("privilegeIsTemporary"),
|
db.ref("isTemporary").withSchema(TableName.AdditionalPrivilege).as("privilegeIsTemporary"),
|
||||||
db.ref("temporaryMode").withSchema(TableName.ProjectUserAdditionalPrivilege).as("privilegeTemporaryMode"),
|
db.ref("temporaryMode").withSchema(TableName.AdditionalPrivilege).as("privilegeTemporaryMode"),
|
||||||
db.ref("temporaryRange").withSchema(TableName.ProjectUserAdditionalPrivilege).as("privilegeTemporaryRange"),
|
db.ref("temporaryRange").withSchema(TableName.AdditionalPrivilege).as("privilegeTemporaryRange"),
|
||||||
db
|
db
|
||||||
.ref("temporaryAccessStartTime")
|
.ref("temporaryAccessStartTime")
|
||||||
.withSchema(TableName.ProjectUserAdditionalPrivilege)
|
.withSchema(TableName.AdditionalPrivilege)
|
||||||
.as("privilegeTemporaryAccessStartTime"),
|
.as("privilegeTemporaryAccessStartTime"),
|
||||||
db
|
db
|
||||||
.ref("temporaryAccessEndTime")
|
.ref("temporaryAccessEndTime")
|
||||||
.withSchema(TableName.ProjectUserAdditionalPrivilege)
|
.withSchema(TableName.AdditionalPrivilege)
|
||||||
.as("privilegeTemporaryAccessEndTime"),
|
.as("privilegeTemporaryAccessEndTime"),
|
||||||
|
|
||||||
db.ref("permissions").withSchema(TableName.ProjectUserAdditionalPrivilege).as("privilegePermissions")
|
db.ref("permissions").withSchema(TableName.AdditionalPrivilege).as("privilegePermissions")
|
||||||
)
|
)
|
||||||
.orderBy(`${TableName.AccessApprovalRequest}.createdAt`, "desc");
|
.orderBy(`${TableName.AccessApprovalRequest}.createdAt`, "desc");
|
||||||
|
|
||||||
@@ -407,7 +407,7 @@ export const accessApprovalRequestDALFactory = (db: TDbClient): TAccessApprovalR
|
|||||||
privilege: doc.privilegeId
|
privilege: doc.privilegeId
|
||||||
? {
|
? {
|
||||||
membershipId: doc.privilegeMembershipId,
|
membershipId: doc.privilegeMembershipId,
|
||||||
userId: doc.privilegeUserId,
|
userId: doc.privilegeUserId || "",
|
||||||
projectId: doc.projectId,
|
projectId: doc.projectId,
|
||||||
isTemporary: doc.privilegeIsTemporary,
|
isTemporary: doc.privilegeIsTemporary,
|
||||||
temporaryMode: doc.privilegeTemporaryMode,
|
temporaryMode: doc.privilegeTemporaryMode,
|
||||||
@@ -772,9 +772,9 @@ export const accessApprovalRequestDALFactory = (db: TDbClient): TAccessApprovalR
|
|||||||
)
|
)
|
||||||
.leftJoin(TableName.Environment, `${TableName.AccessApprovalPolicy}.envId`, `${TableName.Environment}.id`)
|
.leftJoin(TableName.Environment, `${TableName.AccessApprovalPolicy}.envId`, `${TableName.Environment}.id`)
|
||||||
.leftJoin(
|
.leftJoin(
|
||||||
TableName.ProjectUserAdditionalPrivilege,
|
TableName.AdditionalPrivilege,
|
||||||
`${TableName.AccessApprovalRequest}.privilegeId`,
|
`${TableName.AccessApprovalRequest}.privilegeId`,
|
||||||
`${TableName.ProjectUserAdditionalPrivilege}.id`
|
`${TableName.AdditionalPrivilege}.id`
|
||||||
)
|
)
|
||||||
|
|
||||||
.leftJoin(
|
.leftJoin(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import slugify from "@sindresorhus/slugify";
|
import slugify from "@sindresorhus/slugify";
|
||||||
import msFn from "ms";
|
import msFn from "ms";
|
||||||
|
|
||||||
import { ActionProjectType, ProjectMembershipRole } from "@app/db/schemas";
|
import { ActionProjectType, ProjectMembershipRole, TemporaryPermissionMode } from "@app/db/schemas";
|
||||||
import { getConfig } from "@app/lib/config/env";
|
import { getConfig } from "@app/lib/config/env";
|
||||||
import { BadRequestError, ForbiddenRequestError, NotFoundError } from "@app/lib/errors";
|
import { BadRequestError, ForbiddenRequestError, NotFoundError } from "@app/lib/errors";
|
||||||
import { groupBy } from "@app/lib/fn";
|
import { groupBy } from "@app/lib/fn";
|
||||||
@@ -10,12 +10,12 @@ import { alphaNumericNanoId } from "@app/lib/nanoid";
|
|||||||
import { EnforcementLevel } from "@app/lib/types";
|
import { EnforcementLevel } from "@app/lib/types";
|
||||||
import { triggerWorkflowIntegrationNotification } from "@app/lib/workflow-integrations/trigger-notification";
|
import { triggerWorkflowIntegrationNotification } from "@app/lib/workflow-integrations/trigger-notification";
|
||||||
import { TriggerFeature } from "@app/lib/workflow-integrations/types";
|
import { TriggerFeature } from "@app/lib/workflow-integrations/types";
|
||||||
|
import { TAdditionalPrivilegeDALFactory } from "@app/services/additional-privilege/additional-privilege-dal";
|
||||||
import { TKmsServiceFactory } from "@app/services/kms/kms-service";
|
import { TKmsServiceFactory } from "@app/services/kms/kms-service";
|
||||||
import { TMicrosoftTeamsServiceFactory } from "@app/services/microsoft-teams/microsoft-teams-service";
|
import { TMicrosoftTeamsServiceFactory } from "@app/services/microsoft-teams/microsoft-teams-service";
|
||||||
import { TProjectMicrosoftTeamsConfigDALFactory } from "@app/services/microsoft-teams/project-microsoft-teams-config-dal";
|
import { TProjectMicrosoftTeamsConfigDALFactory } from "@app/services/microsoft-teams/project-microsoft-teams-config-dal";
|
||||||
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
||||||
import { TProjectEnvDALFactory } from "@app/services/project-env/project-env-dal";
|
import { TProjectEnvDALFactory } from "@app/services/project-env/project-env-dal";
|
||||||
import { TProjectMembershipDALFactory } from "@app/services/project-membership/project-membership-dal";
|
|
||||||
import { TProjectSlackConfigDALFactory } from "@app/services/slack/project-slack-config-dal";
|
import { TProjectSlackConfigDALFactory } from "@app/services/slack/project-slack-config-dal";
|
||||||
import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service";
|
import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service";
|
||||||
import { TUserDALFactory } from "@app/services/user/user-dal";
|
import { TUserDALFactory } from "@app/services/user/user-dal";
|
||||||
@@ -30,7 +30,6 @@ import { TAccessApprovalRequestDALFactory } from "./access-approval-request-dal"
|
|||||||
import { verifyRequestedPermissions } from "./access-approval-request-fns";
|
import { verifyRequestedPermissions } from "./access-approval-request-fns";
|
||||||
import { TAccessApprovalRequestReviewerDALFactory } from "./access-approval-request-reviewer-dal";
|
import { TAccessApprovalRequestReviewerDALFactory } from "./access-approval-request-reviewer-dal";
|
||||||
import { ApprovalStatus, TAccessApprovalRequestServiceFactory } from "./access-approval-request-types";
|
import { ApprovalStatus, TAccessApprovalRequestServiceFactory } from "./access-approval-request-types";
|
||||||
import { TAdditionalPrivilegeDALFactory } from "@app/services/additional-privilege/additional-privilege-dal";
|
|
||||||
|
|
||||||
type TSecretApprovalRequestServiceFactoryDep = {
|
type TSecretApprovalRequestServiceFactoryDep = {
|
||||||
additionalPrivilegeDAL: Pick<TAdditionalPrivilegeDALFactory, "create" | "findById">;
|
additionalPrivilegeDAL: Pick<TAdditionalPrivilegeDALFactory, "create" | "findById">;
|
||||||
@@ -708,9 +707,9 @@ export const accessApprovalRequestServiceFactory = ({
|
|||||||
// Permanent access
|
// Permanent access
|
||||||
const privilege = await additionalPrivilegeDAL.create(
|
const privilege = await additionalPrivilegeDAL.create(
|
||||||
{
|
{
|
||||||
userId: accessApprovalRequest.requestedByUserId,
|
actorUserId: accessApprovalRequest.requestedByUserId,
|
||||||
projectId: accessApprovalRequest.projectId,
|
projectId: accessApprovalRequest.projectId,
|
||||||
slug: `requested-privilege-${slugify(alphaNumericNanoId(12))}`,
|
name: `requested-privilege-${slugify(alphaNumericNanoId(12))}`,
|
||||||
permissions: JSON.stringify(accessApprovalRequest.permissions)
|
permissions: JSON.stringify(accessApprovalRequest.permissions)
|
||||||
},
|
},
|
||||||
tx
|
tx
|
||||||
@@ -723,12 +722,12 @@ export const accessApprovalRequestServiceFactory = ({
|
|||||||
|
|
||||||
const privilege = await additionalPrivilegeDAL.create(
|
const privilege = await additionalPrivilegeDAL.create(
|
||||||
{
|
{
|
||||||
userId: accessApprovalRequest.requestedByUserId,
|
actorUserId: accessApprovalRequest.requestedByUserId,
|
||||||
projectId: accessApprovalRequest.projectId,
|
projectId: accessApprovalRequest.projectId,
|
||||||
slug: `requested-privilege-${slugify(alphaNumericNanoId(12))}`,
|
name: `requested-privilege-${slugify(alphaNumericNanoId(12))}`,
|
||||||
permissions: JSON.stringify(accessApprovalRequest.permissions),
|
permissions: JSON.stringify(accessApprovalRequest.permissions),
|
||||||
isTemporary: true, // Explicitly set to true for the privilege
|
isTemporary: true, // Explicitly set to true for the privilege
|
||||||
temporaryMode: ProjectUserAdditionalPrivilegeTemporaryMode.Relative,
|
temporaryMode: TemporaryPermissionMode.Relative,
|
||||||
temporaryRange: accessApprovalRequest.temporaryRange!,
|
temporaryRange: accessApprovalRequest.temporaryRange!,
|
||||||
temporaryAccessStartTime: startTime,
|
temporaryAccessStartTime: startTime,
|
||||||
temporaryAccessEndTime: new Date(startTime.getTime() + relativeTempAllocatedTimeInMs)
|
temporaryAccessEndTime: new Date(startTime.getTime() + relativeTempAllocatedTimeInMs)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Knex } from "knex";
|
import { Knex } from "knex";
|
||||||
|
|
||||||
import { TDbClient } from "@app/db";
|
import { TDbClient } from "@app/db";
|
||||||
import { AccessScope, GatewaysV2Schema, TableName, TGatewaysV2 } from "@app/db/schemas";
|
import { GatewaysV2Schema, TableName, TGatewaysV2 } from "@app/db/schemas";
|
||||||
import { DatabaseError } from "@app/lib/errors";
|
import { DatabaseError } from "@app/lib/errors";
|
||||||
import { buildFindFilter, ormify, selectAllTableCols, TFindFilter, TFindOpt } from "@app/lib/knex";
|
import { buildFindFilter, ormify, selectAllTableCols, TFindFilter, TFindOpt } from "@app/lib/knex";
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export const gatewayDALFactory = (db: TDbClient) => {
|
|||||||
.join(TableName.Identity, `${TableName.Identity}.id`, `${TableName.Gateway}.identityId`)
|
.join(TableName.Identity, `${TableName.Identity}.id`, `${TableName.Gateway}.identityId`)
|
||||||
.join(TableName.Membership, `${TableName.Membership}.actorIdentityId`, `${TableName.Gateway}.identityId`)
|
.join(TableName.Membership, `${TableName.Membership}.actorIdentityId`, `${TableName.Gateway}.identityId`)
|
||||||
.select(selectAllTableCols(TableName.Gateway))
|
.select(selectAllTableCols(TableName.Gateway))
|
||||||
.select(db.ref("scopeOrgId").withSchema(TableName.IdentityOrgMembership).as("identityOrgId"))
|
.select(db.ref("scopeOrgId").withSchema(TableName.Membership).as("identityOrgId"))
|
||||||
.select(db.ref("name").withSchema(TableName.Identity).as("identityName"))
|
.select(db.ref("name").withSchema(TableName.Identity).as("identityName"))
|
||||||
.where(`${TableName.Membership}.scope`, AccessScope.Organization);
|
.where(`${TableName.Membership}.scope`, AccessScope.Organization);
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import {
|
|||||||
MembershipsSchema,
|
MembershipsSchema,
|
||||||
TableName,
|
TableName,
|
||||||
TMemberships,
|
TMemberships,
|
||||||
TProjectRoles
|
TRoles
|
||||||
} from "@app/db/schemas";
|
} from "@app/db/schemas";
|
||||||
import { DatabaseError } from "@app/lib/errors";
|
import { DatabaseError } from "@app/lib/errors";
|
||||||
import { selectAllTableCols, sqlNestRelationships } from "@app/lib/knex";
|
import { selectAllTableCols, sqlNestRelationships } from "@app/lib/knex";
|
||||||
@@ -47,7 +47,10 @@ interface TPermissionDataReturn extends TMemberships {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface TPermissionDALFactory {
|
export interface TPermissionDALFactory {
|
||||||
getProjectUserPermissions: (projectId: string) => Promise<
|
getProjectUserPermissions: (
|
||||||
|
projectId: string,
|
||||||
|
orgId: string
|
||||||
|
) => Promise<
|
||||||
{
|
{
|
||||||
roles: {
|
roles: {
|
||||||
id: string;
|
id: string;
|
||||||
@@ -69,45 +72,19 @@ export interface TPermissionDALFactory {
|
|||||||
temporaryAccessEndTime: Date | null | undefined;
|
temporaryAccessEndTime: Date | null | undefined;
|
||||||
isTemporary: boolean;
|
isTemporary: boolean;
|
||||||
}[];
|
}[];
|
||||||
orgId: string;
|
|
||||||
orgAuthEnforced: boolean | null | undefined;
|
|
||||||
userId: string;
|
userId: string;
|
||||||
projectId: string;
|
|
||||||
username: string;
|
username: string;
|
||||||
projectType?: string | null;
|
|
||||||
id: string;
|
|
||||||
createdAt: Date;
|
|
||||||
updatedAt: Date;
|
|
||||||
metadata: {
|
metadata: {
|
||||||
id: string;
|
id: string;
|
||||||
key: string;
|
key: string;
|
||||||
value: string;
|
value: string;
|
||||||
}[];
|
}[];
|
||||||
userGroupRoles: {
|
|
||||||
id: string;
|
|
||||||
role: string;
|
|
||||||
customRoleSlug: string;
|
|
||||||
permissions: unknown;
|
|
||||||
temporaryRange: string | null | undefined;
|
|
||||||
temporaryMode: string | null | undefined;
|
|
||||||
temporaryAccessStartTime: Date | null | undefined;
|
|
||||||
temporaryAccessEndTime: Date | null | undefined;
|
|
||||||
isTemporary: boolean;
|
|
||||||
}[];
|
|
||||||
projectMembershipRoles: {
|
|
||||||
id: string;
|
|
||||||
role: string;
|
|
||||||
customRoleSlug: string;
|
|
||||||
permissions: unknown;
|
|
||||||
temporaryRange: string | null | undefined;
|
|
||||||
temporaryMode: string | null | undefined;
|
|
||||||
temporaryAccessStartTime: Date | null | undefined;
|
|
||||||
temporaryAccessEndTime: Date | null | undefined;
|
|
||||||
isTemporary: boolean;
|
|
||||||
}[];
|
|
||||||
}[]
|
}[]
|
||||||
>;
|
>;
|
||||||
getProjectIdentityPermissions: (projectId: string) => Promise<
|
getProjectIdentityPermissions: (
|
||||||
|
projectId: string,
|
||||||
|
orgId: string
|
||||||
|
) => Promise<
|
||||||
{
|
{
|
||||||
roles: {
|
roles: {
|
||||||
id: string;
|
id: string;
|
||||||
@@ -140,8 +117,6 @@ export interface TPermissionDALFactory {
|
|||||||
createdAt: Date;
|
createdAt: Date;
|
||||||
updatedAt: Date;
|
updatedAt: Date;
|
||||||
orgId: string;
|
orgId: string;
|
||||||
projectType?: string | null;
|
|
||||||
orgAuthEnforced: boolean;
|
|
||||||
metadata: {
|
metadata: {
|
||||||
id: string;
|
id: string;
|
||||||
key: string;
|
key: string;
|
||||||
@@ -363,7 +338,6 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => {
|
|||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(">>>", data);
|
|
||||||
return data;
|
return data;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw new DatabaseError({ error, name: "Get Permission" });
|
throw new DatabaseError({ error, name: "Get Permission" });
|
||||||
@@ -381,7 +355,7 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => {
|
|||||||
.where(`${TableName.Membership}.scope`, AccessScope.Project)
|
.where(`${TableName.Membership}.scope`, AccessScope.Project)
|
||||||
.join(TableName.Groups, `${TableName.Groups}.id`, `${TableName.Membership}.actorGroupId`)
|
.join(TableName.Groups, `${TableName.Groups}.id`, `${TableName.Membership}.actorGroupId`)
|
||||||
.join(TableName.MembershipRole, `${TableName.MembershipRole}.membershipId`, `${TableName.Membership}.id`)
|
.join(TableName.MembershipRole, `${TableName.MembershipRole}.membershipId`, `${TableName.Membership}.id`)
|
||||||
.leftJoin<TProjectRoles>(
|
.leftJoin<TRoles>(
|
||||||
{ groupCustomRoles: TableName.Role },
|
{ groupCustomRoles: TableName.Role },
|
||||||
`${TableName.MembershipRole}.customRoleId`,
|
`${TableName.MembershipRole}.customRoleId`,
|
||||||
`groupCustomRoles.id`
|
`groupCustomRoles.id`
|
||||||
@@ -472,19 +446,19 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO(simp): this query is wrong and fix it
|
|
||||||
const getProjectUserPermissions: TPermissionDALFactory["getProjectUserPermissions"] = async (
|
const getProjectUserPermissions: TPermissionDALFactory["getProjectUserPermissions"] = async (
|
||||||
projectId: string,
|
projectId: string,
|
||||||
orgId: string
|
orgId: string
|
||||||
) => {
|
) => {
|
||||||
try {
|
const userGroupSubquery = db(TableName.Groups)
|
||||||
const userGroupSubquery = db(TableName.Groups)
|
.leftJoin(TableName.UserGroupMembership, `${TableName.UserGroupMembership}.groupId`, `${TableName.Groups}.id`)
|
||||||
.leftJoin(TableName.UserGroupMembership, `${TableName.UserGroupMembership}.groupId`, `${TableName.Groups}.id`)
|
.where(`${TableName.Groups}.orgId`, orgId)
|
||||||
.where(`${TableName.Groups}.orgId`, orgId)
|
.select(db.ref("id").withSchema(TableName.Groups));
|
||||||
.select(db.ref("id").withSchema(TableName.Groups));
|
|
||||||
|
|
||||||
|
try {
|
||||||
const docs = await db
|
const docs = await db
|
||||||
.replicaNode()(TableName.Membership)
|
.replicaNode()(TableName.Users)
|
||||||
|
.where("isGhost", "=", false)
|
||||||
.join(TableName.MembershipRole, `${TableName.Membership}.id`, `${TableName.MembershipRole}.membershipId`)
|
.join(TableName.MembershipRole, `${TableName.Membership}.id`, `${TableName.MembershipRole}.membershipId`)
|
||||||
.leftJoin(TableName.Role, `${TableName.MembershipRole}.customRoleId`, `${TableName.Role}.id`)
|
.leftJoin(TableName.Role, `${TableName.MembershipRole}.customRoleId`, `${TableName.Role}.id`)
|
||||||
.leftJoin(TableName.AdditionalPrivilege, (qb) => {
|
.leftJoin(TableName.AdditionalPrivilege, (qb) => {
|
||||||
@@ -498,82 +472,54 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => {
|
|||||||
.on(`${TableName.Membership}.actorUserId`, `${TableName.IdentityMetadata}.userId`)
|
.on(`${TableName.Membership}.actorUserId`, `${TableName.IdentityMetadata}.userId`)
|
||||||
.andOn(`${TableName.Membership}.scopeOrgId`, `${TableName.IdentityMetadata}.orgId`);
|
.andOn(`${TableName.Membership}.scopeOrgId`, `${TableName.IdentityMetadata}.orgId`);
|
||||||
})
|
})
|
||||||
.leftJoin(
|
|
||||||
TableName.UserGroupMembership,
|
|
||||||
`${TableName.UserGroupMembership}.groupId`,
|
|
||||||
`${TableName.Membership}.actorGroupId`
|
|
||||||
)
|
|
||||||
.leftJoin(TableName.Users, (qb) => {
|
|
||||||
qb.on(`${TableName.Users}.id`, `${TableName.Membership}.actorUserId`).orOn(
|
|
||||||
`${TableName.Users}.id`,
|
|
||||||
`${TableName.UserGroupMembership}.groupId`
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.where(`${TableName.Membership}.scopeOrgId`, orgId)
|
.where(`${TableName.Membership}.scopeOrgId`, orgId)
|
||||||
.where(`${TableName.Membership}.scope`, AccessScope.Project)
|
.where((qb) => {
|
||||||
.where(`${TableName.Membership}.scopeProjectId`, projectId)
|
void qb
|
||||||
|
.whereNotNull(`${TableName.Membership}.actorUserId`)
|
||||||
|
.orWhereIn(`${TableName.Membership}.actorGroupId`, userGroupSubquery);
|
||||||
|
})
|
||||||
|
.where((qb) => {
|
||||||
|
void qb
|
||||||
|
.where(`${TableName.Membership}.scope`, AccessScope.Project)
|
||||||
|
.where(`${TableName.Membership}.scopeProjectId`, projectId);
|
||||||
|
})
|
||||||
.select(
|
.select(
|
||||||
db.ref("id").withSchema(TableName.Users).as("userId"),
|
db.ref("id").withSchema(TableName.Users).as("userId"),
|
||||||
db.ref("username").withSchema(TableName.Users).as("username"),
|
db.ref("username").withSchema(TableName.Users).as("username"),
|
||||||
// groups specific
|
db.ref("slug").withSchema(TableName.Role).as("roleSlug"),
|
||||||
db.ref("slug").withSchema("groupCustomRoles").as("userGroupProjectMembershipRoleCustomRoleSlug"),
|
db.ref("permissions").withSchema(TableName.Role).as("customRolePermission"),
|
||||||
db.ref("permissions").withSchema("groupCustomRoles").as("userGroupProjectMembershipRolePermission"),
|
db.ref("id").withSchema(TableName.MembershipRole).as("membershipRoleId"),
|
||||||
db.ref("id").withSchema(TableName.MembershipRole).as("userGroupProjectMembershipRoleId"),
|
db.ref("role").withSchema(TableName.MembershipRole).as("membershipRole"),
|
||||||
db.ref("role").withSchema(TableName.MembershipRole).as("userGroupProjectMembershipRole"),
|
db.ref("temporaryMode").withSchema(TableName.MembershipRole).as("membershipRoleTemporaryMode"),
|
||||||
db.ref("customRoleId").withSchema(TableName.MembershipRole).as("userGroupProjectMembershipRoleCustomRoleId"),
|
db.ref("isTemporary").withSchema(TableName.MembershipRole).as("membershipRoleIsTemporary"),
|
||||||
db.ref("isTemporary").withSchema(TableName.MembershipRole).as("userGroupProjectMembershipRoleIsTemporary"),
|
db.ref("temporaryRange").withSchema(TableName.MembershipRole).as("membershipRoleTemporaryRange"),
|
||||||
db
|
|
||||||
.ref("temporaryMode")
|
|
||||||
.withSchema(TableName.MembershipRole)
|
|
||||||
.as("userGroupProjectMembershipRoleTemporaryMode"),
|
|
||||||
db
|
|
||||||
.ref("temporaryRange")
|
|
||||||
.withSchema(TableName.MembershipRole)
|
|
||||||
.as("userGroupProjectMembershipRoleTemporaryRange"),
|
|
||||||
db
|
db
|
||||||
.ref("temporaryAccessStartTime")
|
.ref("temporaryAccessStartTime")
|
||||||
.withSchema(TableName.MembershipRole)
|
.withSchema(TableName.MembershipRole)
|
||||||
.as("userGroupProjectMembershipRoleTemporaryAccessStartTime"),
|
.as("membershipRoleTemporaryAccessStartTime"),
|
||||||
db
|
db
|
||||||
.ref("temporaryAccessEndTime")
|
.ref("temporaryAccessEndTime")
|
||||||
.withSchema(TableName.MembershipRole)
|
.withSchema(TableName.MembershipRole)
|
||||||
.as("userGroupProjectMembershipRoleTemporaryAccessEndTime"),
|
.as("membershipRoleTemporaryAccessEndTime"),
|
||||||
// user specific
|
db.ref("createdAt").withSchema(TableName.MembershipRole).as("membershipRoleCreatedAt"),
|
||||||
db.ref("id").withSchema(TableName.Membership).as("membershipId"),
|
db.ref("updatedAt").withSchema(TableName.MembershipRole).as("membershipRoleUpdatedAt"),
|
||||||
db.ref("createdAt").withSchema(TableName.Membership).as("membershipCreatedAt"),
|
db.ref("id").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegeId"),
|
||||||
db.ref("updatedAt").withSchema(TableName.Membership).as("membershipUpdatedAt"),
|
db.ref("name").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegeName"),
|
||||||
db.ref("slug").withSchema(TableName.Role).as("userProjectMembershipRoleCustomRoleSlug"),
|
db.ref("permissions").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegePermissions"),
|
||||||
db.ref("permissions").withSchema(TableName.Role).as("userProjectCustomRolePermission"),
|
db.ref("id").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegeId"),
|
||||||
db.ref("id").withSchema(TableName.Role).as("userProjectMembershipRoleId"),
|
db.ref("temporaryMode").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegeTemporaryMode"),
|
||||||
db.ref("role").withSchema(TableName.Role).as("userProjectMembershipRole"),
|
db.ref("isTemporary").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegeIsTemporary"),
|
||||||
db.ref("temporaryMode").withSchema(TableName.Role).as("userProjectMembershipRoleTemporaryMode"),
|
db.ref("temporaryRange").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegeTemporaryRange"),
|
||||||
db.ref("isTemporary").withSchema(TableName.Role).as("userProjectMembershipRoleIsTemporary"),
|
|
||||||
db.ref("temporaryRange").withSchema(TableName.Role).as("userProjectMembershipRoleTemporaryRange"),
|
|
||||||
db
|
|
||||||
.ref("temporaryAccessStartTime")
|
|
||||||
.withSchema(TableName.Role)
|
|
||||||
.as("userProjectMembershipRoleTemporaryAccessStartTime"),
|
|
||||||
db
|
|
||||||
.ref("temporaryAccessEndTime")
|
|
||||||
.withSchema(TableName.Role)
|
|
||||||
.as("userProjectMembershipRoleTemporaryAccessEndTime"),
|
|
||||||
db.ref("id").withSchema(TableName.AdditionalPrivilege).as("userAdditionalPrivilegesId"),
|
|
||||||
db.ref("permissions").withSchema(TableName.AdditionalPrivilege).as("userAdditionalPrivilegesPermissions"),
|
|
||||||
db.ref("temporaryMode").withSchema(TableName.AdditionalPrivilege).as("userAdditionalPrivilegesTemporaryMode"),
|
|
||||||
db.ref("isTemporary").withSchema(TableName.AdditionalPrivilege).as("userAdditionalPrivilegesIsTemporary"),
|
|
||||||
db
|
|
||||||
.ref("temporaryRange")
|
|
||||||
.withSchema(TableName.AdditionalPrivilege)
|
|
||||||
.as("userAdditionalPrivilegesTemporaryRange"),
|
|
||||||
db.ref("userId").withSchema(TableName.AdditionalPrivilege).as("userAdditionalPrivilegesUserId"),
|
|
||||||
db
|
db
|
||||||
.ref("temporaryAccessStartTime")
|
.ref("temporaryAccessStartTime")
|
||||||
.withSchema(TableName.AdditionalPrivilege)
|
.withSchema(TableName.AdditionalPrivilege)
|
||||||
.as("userAdditionalPrivilegesTemporaryAccessStartTime"),
|
.as("additionalPrivilegeTemporaryAccessStartTime"),
|
||||||
db
|
db
|
||||||
.ref("temporaryAccessEndTime")
|
.ref("temporaryAccessEndTime")
|
||||||
.withSchema(TableName.AdditionalPrivilege)
|
.withSchema(TableName.AdditionalPrivilege)
|
||||||
.as("userAdditionalPrivilegesTemporaryAccessEndTime"),
|
.as("additionalPrivilegeTemporaryAccessEndTime"),
|
||||||
|
db.ref("createdAt").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegeCreatedAt"),
|
||||||
|
db.ref("updatedAt").withSchema(TableName.AdditionalPrivilege).as("additionalPrivilegeUpdatedAt"),
|
||||||
// general
|
// general
|
||||||
db.ref("id").withSchema(TableName.IdentityMetadata).as("metadataId"),
|
db.ref("id").withSchema(TableName.IdentityMetadata).as("metadataId"),
|
||||||
db.ref("key").withSchema(TableName.IdentityMetadata).as("metadataKey"),
|
db.ref("key").withSchema(TableName.IdentityMetadata).as("metadataKey"),
|
||||||
@@ -583,84 +529,64 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => {
|
|||||||
const userPermissions = sqlNestRelationships({
|
const userPermissions = sqlNestRelationships({
|
||||||
data: docs,
|
data: docs,
|
||||||
key: "userId",
|
key: "userId",
|
||||||
parentMapper: ({ username, membershipId, membershipCreatedAt, membershipUpdatedAt, userId }) => ({
|
parentMapper: ({ username, userId }) => ({
|
||||||
userId,
|
userId,
|
||||||
projectId,
|
projectId,
|
||||||
username,
|
username
|
||||||
id: membershipId,
|
|
||||||
createdAt: membershipCreatedAt,
|
|
||||||
updatedAt: membershipUpdatedAt
|
|
||||||
}),
|
}),
|
||||||
childrenMapper: [
|
childrenMapper: [
|
||||||
{
|
{
|
||||||
key: "userGroupProjectMembershipRoleId",
|
key: "additionalPrivilegeId",
|
||||||
label: "userGroupRoles" as const,
|
|
||||||
mapper: ({
|
|
||||||
userGroupProjectMembershipRoleId,
|
|
||||||
userGroupProjectMembershipRole,
|
|
||||||
userGroupProjectMembershipRolePermission,
|
|
||||||
userGroupProjectMembershipRoleCustomRoleSlug,
|
|
||||||
userGroupProjectMembershipRoleIsTemporary,
|
|
||||||
userGroupProjectMembershipRoleTemporaryMode,
|
|
||||||
userGroupProjectMembershipRoleTemporaryAccessEndTime,
|
|
||||||
userGroupProjectMembershipRoleTemporaryAccessStartTime,
|
|
||||||
userGroupProjectMembershipRoleTemporaryRange
|
|
||||||
}) => ({
|
|
||||||
id: userGroupProjectMembershipRoleId,
|
|
||||||
role: userGroupProjectMembershipRole,
|
|
||||||
customRoleSlug: userGroupProjectMembershipRoleCustomRoleSlug,
|
|
||||||
permissions: userGroupProjectMembershipRolePermission,
|
|
||||||
temporaryRange: userGroupProjectMembershipRoleTemporaryRange,
|
|
||||||
temporaryMode: userGroupProjectMembershipRoleTemporaryMode,
|
|
||||||
temporaryAccessStartTime: userGroupProjectMembershipRoleTemporaryAccessStartTime,
|
|
||||||
temporaryAccessEndTime: userGroupProjectMembershipRoleTemporaryAccessEndTime,
|
|
||||||
isTemporary: userGroupProjectMembershipRoleIsTemporary
|
|
||||||
})
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "userProjectMembershipRoleId",
|
|
||||||
label: "projectMembershipRoles" as const,
|
|
||||||
mapper: ({
|
|
||||||
userProjectMembershipRoleId,
|
|
||||||
userProjectMembershipRole,
|
|
||||||
userProjectCustomRolePermission,
|
|
||||||
userProjectMembershipRoleIsTemporary,
|
|
||||||
userProjectMembershipRoleTemporaryMode,
|
|
||||||
userProjectMembershipRoleTemporaryRange,
|
|
||||||
userProjectMembershipRoleTemporaryAccessEndTime,
|
|
||||||
userProjectMembershipRoleTemporaryAccessStartTime,
|
|
||||||
userProjectMembershipRoleCustomRoleSlug
|
|
||||||
}) => ({
|
|
||||||
id: userProjectMembershipRoleId,
|
|
||||||
role: userProjectMembershipRole,
|
|
||||||
customRoleSlug: userProjectMembershipRoleCustomRoleSlug,
|
|
||||||
permissions: userProjectCustomRolePermission,
|
|
||||||
temporaryRange: userProjectMembershipRoleTemporaryRange,
|
|
||||||
temporaryMode: userProjectMembershipRoleTemporaryMode,
|
|
||||||
temporaryAccessStartTime: userProjectMembershipRoleTemporaryAccessStartTime,
|
|
||||||
temporaryAccessEndTime: userProjectMembershipRoleTemporaryAccessEndTime,
|
|
||||||
isTemporary: userProjectMembershipRoleIsTemporary
|
|
||||||
})
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "userAdditionalPrivilegesId",
|
|
||||||
label: "additionalPrivileges" as const,
|
label: "additionalPrivileges" as const,
|
||||||
mapper: ({
|
mapper: ({
|
||||||
userAdditionalPrivilegesId,
|
additionalPrivilegeId,
|
||||||
userAdditionalPrivilegesPermissions,
|
additionalPrivilegePermissions,
|
||||||
userAdditionalPrivilegesIsTemporary,
|
additionalPrivilegeIsTemporary,
|
||||||
userAdditionalPrivilegesTemporaryMode,
|
additionalPrivilegeTemporaryMode,
|
||||||
userAdditionalPrivilegesTemporaryRange,
|
additionalPrivilegeTemporaryRange,
|
||||||
userAdditionalPrivilegesTemporaryAccessEndTime,
|
additionalPrivilegeTemporaryAccessEndTime,
|
||||||
userAdditionalPrivilegesTemporaryAccessStartTime
|
additionalPrivilegeTemporaryAccessStartTime,
|
||||||
|
additionalPrivilegeCreatedAt,
|
||||||
|
additionalPrivilegeUpdatedAt
|
||||||
}) => ({
|
}) => ({
|
||||||
id: userAdditionalPrivilegesId,
|
id: additionalPrivilegeId,
|
||||||
permissions: userAdditionalPrivilegesPermissions,
|
permissions: additionalPrivilegePermissions,
|
||||||
temporaryRange: userAdditionalPrivilegesTemporaryRange,
|
temporaryRange: additionalPrivilegeTemporaryRange,
|
||||||
temporaryMode: userAdditionalPrivilegesTemporaryMode,
|
temporaryMode: additionalPrivilegeTemporaryMode,
|
||||||
temporaryAccessStartTime: userAdditionalPrivilegesTemporaryAccessStartTime,
|
temporaryAccessStartTime: additionalPrivilegeTemporaryAccessStartTime,
|
||||||
temporaryAccessEndTime: userAdditionalPrivilegesTemporaryAccessEndTime,
|
temporaryAccessEndTime: additionalPrivilegeTemporaryAccessEndTime,
|
||||||
isTemporary: userAdditionalPrivilegesIsTemporary
|
isTemporary: additionalPrivilegeIsTemporary,
|
||||||
|
createdAt: additionalPrivilegeCreatedAt,
|
||||||
|
updatedAt: additionalPrivilegeUpdatedAt
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "membershipRoleId",
|
||||||
|
label: "roles" as const,
|
||||||
|
mapper: ({
|
||||||
|
roleSlug,
|
||||||
|
customRolePermission,
|
||||||
|
membershipRoleId,
|
||||||
|
membershipRole,
|
||||||
|
membershipRoleIsTemporary,
|
||||||
|
membershipRoleTemporaryMode,
|
||||||
|
membershipRoleTemporaryRange,
|
||||||
|
membershipRoleTemporaryAccessEndTime,
|
||||||
|
membershipRoleTemporaryAccessStartTime,
|
||||||
|
membershipRoleCreatedAt,
|
||||||
|
membershipRoleUpdatedAt
|
||||||
|
}) => ({
|
||||||
|
id: membershipRoleId,
|
||||||
|
role: membershipRole,
|
||||||
|
permissions: customRolePermission,
|
||||||
|
customRoleSlug: roleSlug,
|
||||||
|
temporaryRange: membershipRoleTemporaryRange,
|
||||||
|
temporaryMode: membershipRoleTemporaryMode,
|
||||||
|
temporaryAccessStartTime: membershipRoleTemporaryAccessStartTime,
|
||||||
|
temporaryAccessEndTime: membershipRoleTemporaryAccessEndTime,
|
||||||
|
isTemporary: membershipRoleIsTemporary,
|
||||||
|
createdAt: membershipRoleCreatedAt,
|
||||||
|
updatedAt: membershipRoleUpdatedAt
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -678,17 +604,11 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => {
|
|||||||
return userPermissions
|
return userPermissions
|
||||||
.map((userPermission) => {
|
.map((userPermission) => {
|
||||||
if (!userPermission) return undefined;
|
if (!userPermission) return undefined;
|
||||||
if (!userPermission?.userGroupRoles?.[0] && !userPermission?.projectMembershipRoles?.[0]) return undefined;
|
if (!userPermission?.roles?.[0]) return undefined;
|
||||||
|
|
||||||
// when introducting cron mode change it here
|
// when introducting cron mode change it here
|
||||||
const activeRoles =
|
const activeRoles =
|
||||||
userPermission?.projectMembershipRoles?.filter(
|
userPermission?.roles?.filter(
|
||||||
({ isTemporary, temporaryAccessEndTime }) =>
|
|
||||||
!isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime)
|
|
||||||
) ?? [];
|
|
||||||
|
|
||||||
const activeGroupRoles =
|
|
||||||
userPermission?.userGroupRoles?.filter(
|
|
||||||
({ isTemporary, temporaryAccessEndTime }) =>
|
({ isTemporary, temporaryAccessEndTime }) =>
|
||||||
!isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime)
|
!isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime)
|
||||||
) ?? [];
|
) ?? [];
|
||||||
@@ -701,7 +621,7 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
...userPermission,
|
...userPermission,
|
||||||
roles: [...activeRoles, ...activeGroupRoles],
|
roles: activeRoles,
|
||||||
additionalPrivileges: activeAdditionalPrivileges
|
additionalPrivileges: activeAdditionalPrivileges
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -74,25 +74,24 @@ export type TPermissionServiceFactory = {
|
|||||||
memberships: Array<TMemberships & { roles: { role: string; customRoleSlug?: string | null }[] }>;
|
memberships: Array<TMemberships & { roles: { role: string; customRoleSlug?: string | null }[] }>;
|
||||||
hasRole: (role: string) => boolean;
|
hasRole: (role: string) => boolean;
|
||||||
}>;
|
}>;
|
||||||
// TODO(simp): check what is this doing
|
getProjectPermissions: (
|
||||||
getProjectPermissions: (projectId: string) => Promise<{
|
projectId: string,
|
||||||
|
orgId: string
|
||||||
|
) => Promise<{
|
||||||
userPermissions: {
|
userPermissions: {
|
||||||
permission: MongoAbility<ProjectPermissionSet, MongoQuery>;
|
permission: MongoAbility<ProjectPermissionSet, MongoQuery>;
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
membershipId: string;
|
|
||||||
}[];
|
}[];
|
||||||
identityPermissions: {
|
identityPermissions: {
|
||||||
permission: MongoAbility<ProjectPermissionSet, MongoQuery>;
|
permission: MongoAbility<ProjectPermissionSet, MongoQuery>;
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
membershipId: string;
|
|
||||||
}[];
|
}[];
|
||||||
groupPermissions: {
|
groupPermissions: {
|
||||||
permission: MongoAbility<ProjectPermissionSet, MongoQuery>;
|
permission: MongoAbility<ProjectPermissionSet, MongoQuery>;
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
membershipId: string;
|
|
||||||
}[];
|
}[];
|
||||||
}>;
|
}>;
|
||||||
getOrgPermissionByRoles: (
|
getOrgPermissionByRoles: (
|
||||||
|
|||||||
@@ -350,6 +350,7 @@ export const permissionServiceFactory = ({
|
|||||||
actorType: actor
|
actorType: actor
|
||||||
});
|
});
|
||||||
if (!permissionData?.length) throw new ForbiddenRequestError({ name: "You are not member of this organization" });
|
if (!permissionData?.length) throw new ForbiddenRequestError({ name: "You are not member of this organization" });
|
||||||
|
|
||||||
const permissionFromRoles = permissionData.flatMap((membership) => {
|
const permissionFromRoles = permissionData.flatMap((membership) => {
|
||||||
const activeRoles = membership?.roles
|
const activeRoles = membership?.roles
|
||||||
.filter(
|
.filter(
|
||||||
@@ -426,9 +427,9 @@ export const permissionServiceFactory = ({
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const getProjectPermissions: TPermissionServiceFactory["getProjectPermissions"] = async (projectId) => {
|
const getProjectPermissions: TPermissionServiceFactory["getProjectPermissions"] = async (projectId, orgId) => {
|
||||||
// fetch user permissions
|
// fetch user permissions
|
||||||
const rawUserProjectPermissions = await permissionDAL.getProjectUserPermissions(projectId);
|
const rawUserProjectPermissions = await permissionDAL.getProjectUserPermissions(projectId, orgId);
|
||||||
const userPermissions = rawUserProjectPermissions.map((userProjectPermission) => {
|
const userPermissions = rawUserProjectPermissions.map((userProjectPermission) => {
|
||||||
const rolePermissions =
|
const rolePermissions =
|
||||||
userProjectPermission.roles?.map(({ role, permissions }) => ({ role, permissions })) || [];
|
userProjectPermission.roles?.map(({ role, permissions }) => ({ role, permissions })) || [];
|
||||||
@@ -468,13 +469,12 @@ export const permissionServiceFactory = ({
|
|||||||
return {
|
return {
|
||||||
permission,
|
permission,
|
||||||
id: userProjectPermission.userId,
|
id: userProjectPermission.userId,
|
||||||
name: userProjectPermission.username,
|
name: userProjectPermission.username
|
||||||
membershipId: userProjectPermission.id
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
// fetch identity permissions
|
// fetch identity permissions
|
||||||
const rawIdentityProjectPermissions = await permissionDAL.getProjectIdentityPermissions(projectId);
|
const rawIdentityProjectPermissions = await permissionDAL.getProjectIdentityPermissions(projectId, orgId);
|
||||||
const identityPermissions = rawIdentityProjectPermissions.map((identityProjectPermission) => {
|
const identityPermissions = rawIdentityProjectPermissions.map((identityProjectPermission) => {
|
||||||
const rolePermissions =
|
const rolePermissions =
|
||||||
identityProjectPermission.roles?.map(({ role, permissions }) => ({ role, permissions })) || [];
|
identityProjectPermission.roles?.map(({ role, permissions }) => ({ role, permissions })) || [];
|
||||||
@@ -514,8 +514,7 @@ export const permissionServiceFactory = ({
|
|||||||
return {
|
return {
|
||||||
permission,
|
permission,
|
||||||
id: identityProjectPermission.identityId,
|
id: identityProjectPermission.identityId,
|
||||||
name: identityProjectPermission.username,
|
name: identityProjectPermission.username
|
||||||
membershipId: identityProjectPermission.id
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -532,8 +531,7 @@ export const permissionServiceFactory = ({
|
|||||||
return {
|
return {
|
||||||
permission,
|
permission,
|
||||||
id: groupProjectPermission.groupId,
|
id: groupProjectPermission.groupId,
|
||||||
name: groupProjectPermission.username,
|
name: groupProjectPermission.username
|
||||||
membershipId: groupProjectPermission.id
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ import { Knex } from "knex";
|
|||||||
|
|
||||||
import { TDbClient } from "@app/db";
|
import { TDbClient } from "@app/db";
|
||||||
import {
|
import {
|
||||||
|
AccessScope,
|
||||||
SecretApprovalRequestsSchema,
|
SecretApprovalRequestsSchema,
|
||||||
TableName,
|
TableName,
|
||||||
TOrgMemberships,
|
TMemberships,
|
||||||
TSecretApprovalRequests,
|
TSecretApprovalRequests,
|
||||||
TSecretApprovalRequestsSecrets,
|
TSecretApprovalRequestsSecrets,
|
||||||
TUserGroupMembership,
|
TUserGroupMembership,
|
||||||
@@ -109,24 +110,26 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => {
|
|||||||
`secretApprovalReviewerUser.id`
|
`secretApprovalReviewerUser.id`
|
||||||
)
|
)
|
||||||
|
|
||||||
.leftJoin<TOrgMemberships>(
|
.leftJoin<TMemberships>(db(TableName.Membership).as("approverOrgMembership"), (qb) => {
|
||||||
db(TableName.OrgMembership).as("approverOrgMembership"),
|
qb.on(`${TableName.SecretApprovalPolicyApprover}.approverUserId`, `approverOrgMembership.actorUserId`).andOn(
|
||||||
`${TableName.SecretApprovalPolicyApprover}.approverUserId`,
|
`approverOrgMembership.scope`,
|
||||||
`approverOrgMembership.userId`
|
db.raw("?", [AccessScope.Organization])
|
||||||
)
|
);
|
||||||
|
})
|
||||||
|
|
||||||
.leftJoin<TOrgMemberships>(
|
.leftJoin<TMemberships>(db(TableName.Membership).as("approverGroupOrgMembership"), (qb) => {
|
||||||
db(TableName.OrgMembership).as("approverGroupOrgMembership"),
|
qb.on(`secretApprovalPolicyGroupApproverUser.id`, `approverGroupOrgMembership.actorUserId`).andOn(
|
||||||
`secretApprovalPolicyGroupApproverUser.id`,
|
`approverGroupOrgMembership.scope`,
|
||||||
`approverGroupOrgMembership.userId`
|
db.raw("?", [AccessScope.Organization])
|
||||||
)
|
);
|
||||||
|
})
|
||||||
.leftJoin<TOrgMemberships>(
|
|
||||||
db(TableName.OrgMembership).as("reviewerOrgMembership"),
|
|
||||||
`${TableName.SecretApprovalRequestReviewer}.reviewerUserId`,
|
|
||||||
`reviewerOrgMembership.userId`
|
|
||||||
)
|
|
||||||
|
|
||||||
|
.leftJoin<TMemberships>(db(TableName.Membership).as("reviewerOrgMembership"), (qb) => {
|
||||||
|
qb.on(`${TableName.SecretApprovalRequestReviewer}.reviewerUserId`, `reviewerOrgMembership.actorUserId`).andOn(
|
||||||
|
`reviewerOrgMembership.scope`,
|
||||||
|
db.raw("?", [AccessScope.Organization])
|
||||||
|
);
|
||||||
|
})
|
||||||
.select(selectAllTableCols(TableName.SecretApprovalRequest))
|
.select(selectAllTableCols(TableName.SecretApprovalRequest))
|
||||||
.select(
|
.select(
|
||||||
tx.ref("approverUserId").withSchema(TableName.SecretApprovalPolicyApprover),
|
tx.ref("approverUserId").withSchema(TableName.SecretApprovalPolicyApprover),
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import {
|
|||||||
IdentitiesSchema,
|
IdentitiesSchema,
|
||||||
OrganizationsSchema,
|
OrganizationsSchema,
|
||||||
OrgMembershipsSchema,
|
OrgMembershipsSchema,
|
||||||
|
OrgMembershipStatus,
|
||||||
SuperAdminSchema,
|
SuperAdminSchema,
|
||||||
UsersSchema
|
UsersSchema
|
||||||
} from "@app/db/schemas";
|
} from "@app/db/schemas";
|
||||||
@@ -279,7 +280,10 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
organizationMembership
|
organizationMembership: {
|
||||||
|
...organizationMembership,
|
||||||
|
status: organizationMembership?.status || OrgMembershipStatus.Accepted
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -892,7 +896,13 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
|
|||||||
},
|
},
|
||||||
handler: async (req) => {
|
handler: async (req) => {
|
||||||
const organizationMembership = await server.services.superAdmin.resendOrgInvite(req.params, req.permission);
|
const organizationMembership = await server.services.superAdmin.resendOrgInvite(req.params, req.permission);
|
||||||
return { organizationMembership };
|
|
||||||
|
return {
|
||||||
|
organizationMembership: {
|
||||||
|
...organizationMembership,
|
||||||
|
status: organizationMembership?.status || OrgMembershipStatus.Accepted
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -922,7 +932,12 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
|
|||||||
req.params.organizationId,
|
req.params.organizationId,
|
||||||
req.permission
|
req.permission
|
||||||
);
|
);
|
||||||
return { organizationMembership };
|
return {
|
||||||
|
organizationMembership: {
|
||||||
|
...organizationMembership,
|
||||||
|
status: organizationMembership?.status || OrgMembershipStatus.Accepted
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
AccessScope,
|
AccessScope,
|
||||||
OrgMembershipRole,
|
OrgMembershipRole,
|
||||||
OrgMembershipsSchema,
|
OrgMembershipsSchema,
|
||||||
|
OrgMembershipStatus,
|
||||||
ProjectMembershipsSchema,
|
ProjectMembershipsSchema,
|
||||||
ProjectUserMembershipRolesSchema,
|
ProjectUserMembershipRolesSchema,
|
||||||
TemporaryPermissionMode,
|
TemporaryPermissionMode,
|
||||||
@@ -275,7 +276,12 @@ export const registerDeprecatedProjectMembershipRouter = async (server: FastifyZ
|
|||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data: data.map((el) => ({ ...el, orgId: req.permission.orgId, role: OrgMembershipRole.Member })),
|
data: data.map((el) => ({
|
||||||
|
...el,
|
||||||
|
orgId: req.permission.orgId,
|
||||||
|
role: OrgMembershipRole.Member,
|
||||||
|
status: el.status || OrgMembershipStatus.Accepted
|
||||||
|
})),
|
||||||
success: true
|
success: true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
GroupsSchema,
|
GroupsSchema,
|
||||||
IncidentContactsSchema,
|
IncidentContactsSchema,
|
||||||
OrgMembershipsSchema,
|
OrgMembershipsSchema,
|
||||||
|
OrgMembershipStatus,
|
||||||
OrgRolesSchema,
|
OrgRolesSchema,
|
||||||
UsersSchema
|
UsersSchema
|
||||||
} from "@app/db/schemas";
|
} from "@app/db/schemas";
|
||||||
@@ -263,7 +264,7 @@ export const registerOrgRouter = async (server: FastifyZodProvider) => {
|
|||||||
req.permission.authMethod,
|
req.permission.authMethod,
|
||||||
req.permission.orgId
|
req.permission.orgId
|
||||||
);
|
);
|
||||||
return { users };
|
return { users: users.map((el) => ({ ...el, status: el.status || OrgMembershipStatus.Accepted })) };
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { z } from "zod";
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
OrgMembershipsSchema,
|
OrgMembershipsSchema,
|
||||||
|
OrgMembershipStatus,
|
||||||
ProjectMembershipsSchema,
|
ProjectMembershipsSchema,
|
||||||
ProjectsSchema,
|
ProjectsSchema,
|
||||||
UserEncryptionKeysSchema,
|
UserEncryptionKeysSchema,
|
||||||
@@ -63,7 +64,7 @@ export const registerOrgRouter = async (server: FastifyZodProvider) => {
|
|||||||
req.permission.authMethod,
|
req.permission.authMethod,
|
||||||
req.permission.orgId
|
req.permission.orgId
|
||||||
);
|
);
|
||||||
return { users };
|
return { users: users.map((el) => ({ ...el, status: el.status || OrgMembershipStatus.Accepted })) };
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -168,7 +169,7 @@ export const registerOrgRouter = async (server: FastifyZodProvider) => {
|
|||||||
orgId: req.params.organizationId,
|
orgId: req.params.organizationId,
|
||||||
membershipId: req.params.membershipId
|
membershipId: req.params.membershipId
|
||||||
});
|
});
|
||||||
return { membership };
|
return { membership: { ...membership, status: membership.status || OrgMembershipStatus.Accepted } };
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -224,7 +225,8 @@ export const registerOrgRouter = async (server: FastifyZodProvider) => {
|
|||||||
membership: {
|
membership: {
|
||||||
...membership,
|
...membership,
|
||||||
role: "",
|
role: "",
|
||||||
orgId: req.params.organizationId
|
orgId: req.params.organizationId,
|
||||||
|
status: membership.status || OrgMembershipStatus.Accepted
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -269,6 +271,7 @@ export const registerOrgRouter = async (server: FastifyZodProvider) => {
|
|||||||
return {
|
return {
|
||||||
membership: {
|
membership: {
|
||||||
...membership,
|
...membership,
|
||||||
|
status: membership.status || OrgMembershipStatus.Accepted,
|
||||||
role: "",
|
role: "",
|
||||||
orgId: req.params.organizationId
|
orgId: req.params.organizationId
|
||||||
}
|
}
|
||||||
@@ -317,6 +320,7 @@ export const registerOrgRouter = async (server: FastifyZodProvider) => {
|
|||||||
return {
|
return {
|
||||||
memberships: memberships.map((el) => ({
|
memberships: memberships.map((el) => ({
|
||||||
...el,
|
...el,
|
||||||
|
status: el?.status || OrgMembershipStatus.Accepted,
|
||||||
role: "",
|
role: "",
|
||||||
orgId: req.params.organizationId
|
orgId: req.params.organizationId
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -1,21 +1,11 @@
|
|||||||
import { TDbClient } from "@app/db";
|
import { TDbClient } from "@app/db";
|
||||||
import { TableName } from "@app/db/schemas";
|
import { TableName } from "@app/db/schemas";
|
||||||
import { ormify, selectAllTableCols } from "@app/lib/knex";
|
import { ormify } from "@app/lib/knex";
|
||||||
|
|
||||||
export type TAdditionalPrivilegeDALFactory = ReturnType<typeof additionalPrivilegeDALFactory>;
|
export type TAdditionalPrivilegeDALFactory = ReturnType<typeof additionalPrivilegeDALFactory>;
|
||||||
|
|
||||||
export const additionalPrivilegeDALFactory = (db: TDbClient) => {
|
export const additionalPrivilegeDALFactory = (db: TDbClient) => {
|
||||||
const orm = ormify(db, TableName.AdditionalPrivilege);
|
const orm = ormify(db, TableName.AdditionalPrivilege);
|
||||||
|
|
||||||
const getMembershipById = async (privilegeId: string) => {
|
return orm;
|
||||||
const doc = await db
|
|
||||||
.replicaNode()(TableName.AdditionalPrivilege)
|
|
||||||
.join(TableName.Membership, `${TableName.AdditionalPrivilege}.membershipId`, `${TableName.Membership}.id`)
|
|
||||||
.select(selectAllTableCols(TableName.Membership))
|
|
||||||
.where(`${TableName.AdditionalPrivilege}.id`, privilegeId)
|
|
||||||
.first();
|
|
||||||
return doc;
|
|
||||||
};
|
|
||||||
|
|
||||||
return { ...orm, getMembershipById };
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { AccessScope } from "@app/db/schemas";
|
import { AccessScope } from "@app/db/schemas";
|
||||||
import { NotFoundError } from "@app/lib/errors";
|
import { NotFoundError } from "@app/lib/errors";
|
||||||
|
|
||||||
|
import { TAdditionalPrivilegeDALFactory } from "../additional-privilege/additional-privilege-dal";
|
||||||
import { TMembershipDALFactory } from "../membership/membership-dal";
|
import { TMembershipDALFactory } from "../membership/membership-dal";
|
||||||
import { TProjectDALFactory } from "../project/project-dal";
|
import { TProjectDALFactory } from "../project/project-dal";
|
||||||
import { TAdditionalPrivilegeDALFactory } from "../additional-privilege/additional-privilege-dal";
|
|
||||||
|
|
||||||
type TConvertorServiceFactoryDep = {
|
type TConvertorServiceFactoryDep = {
|
||||||
projectDAL: Pick<TProjectDALFactory, "findOne">;
|
projectDAL: Pick<TProjectDALFactory, "findOne">;
|
||||||
membershipDAL: Pick<TMembershipDALFactory, "findOne">;
|
membershipDAL: Pick<TMembershipDALFactory, "findOne">;
|
||||||
additionalPrivilegeDAL: Pick<TAdditionalPrivilegeDALFactory, "getMembershipById" | "findOne">;
|
additionalPrivilegeDAL: Pick<TAdditionalPrivilegeDALFactory, "findOne">;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type TConvertorServiceFactory = ReturnType<typeof convertorServiceFactory>;
|
export type TConvertorServiceFactory = ReturnType<typeof convertorServiceFactory>;
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ export const groupProjectDALFactory = (db: TDbClient) => {
|
|||||||
.join(TableName.MembershipRole, `${TableName.MembershipRole}.membershipId`, `${TableName.Membership}.id`)
|
.join(TableName.MembershipRole, `${TableName.MembershipRole}.membershipId`, `${TableName.Membership}.id`)
|
||||||
.leftJoin(TableName.Role, `${TableName.MembershipRole}.customRoleId`, `${TableName.Role}.id`)
|
.leftJoin(TableName.Role, `${TableName.MembershipRole}.customRoleId`, `${TableName.Role}.id`)
|
||||||
.join<TMemberships>(db(TableName.Membership).as("orgMembership"), (qb) => {
|
.join<TMemberships>(db(TableName.Membership).as("orgMembership"), (qb) => {
|
||||||
qb.on(`${TableName.Users}.id`, `orgMembership.userId`)
|
qb.on(`${TableName.Users}.id`, `orgMembership.actorUserId`)
|
||||||
.andOn(`orgMembership.scope`, db.raw("?", [AccessScope.Organization]))
|
.andOn(`orgMembership.scope`, db.raw("?", [AccessScope.Organization]))
|
||||||
.andOn(`orgMembership.scopeOrgId`, `${TableName.Project}.orgId`);
|
.andOn(`orgMembership.scopeOrgId`, `${TableName.Project}.orgId`);
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
|||||||
import { logger } from "@app/lib/logger";
|
import { logger } from "@app/lib/logger";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
|
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityAliCloudAuthDALFactory } from "./identity-alicloud-auth-dal";
|
import { TIdentityAliCloudAuthDALFactory } from "./identity-alicloud-auth-dal";
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import RE2 from "re2";
|
|||||||
|
|
||||||
import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
||||||
import {
|
import {
|
||||||
constructPermissionErrorMessage,
|
constructPermissionErrorMessage,
|
||||||
@@ -18,9 +17,10 @@ import { BadRequestError, NotFoundError, PermissionBoundaryError, UnauthorizedEr
|
|||||||
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
|
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityAwsAuthDALFactory } from "./identity-aws-auth-dal";
|
import { TIdentityAwsAuthDALFactory } from "./identity-aws-auth-dal";
|
||||||
import { extractPrincipalArn, extractPrincipalArnEntity } from "./identity-aws-auth-fns";
|
import { extractPrincipalArn, extractPrincipalArnEntity } from "./identity-aws-auth-fns";
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import { ForbiddenError } from "@casl/ability";
|
|||||||
|
|
||||||
import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
||||||
import {
|
import {
|
||||||
constructPermissionErrorMessage,
|
constructPermissionErrorMessage,
|
||||||
@@ -15,9 +14,10 @@ import { BadRequestError, NotFoundError, PermissionBoundaryError, UnauthorizedEr
|
|||||||
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
|
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityAzureAuthDALFactory } from "./identity-azure-auth-dal";
|
import { TIdentityAzureAuthDALFactory } from "./identity-azure-auth-dal";
|
||||||
import { validateAzureIdentity } from "./identity-azure-auth-fns";
|
import { validateAzureIdentity } from "./identity-azure-auth-fns";
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import { ForbiddenError } from "@casl/ability";
|
|||||||
|
|
||||||
import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
||||||
import {
|
import {
|
||||||
constructPermissionErrorMessage,
|
constructPermissionErrorMessage,
|
||||||
@@ -15,9 +14,10 @@ import { BadRequestError, NotFoundError, PermissionBoundaryError, UnauthorizedEr
|
|||||||
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
|
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityGcpAuthDALFactory } from "./identity-gcp-auth-dal";
|
import { TIdentityGcpAuthDALFactory } from "./identity-gcp-auth-dal";
|
||||||
import { validateIamIdentity, validateIdTokenIdentity } from "./identity-gcp-auth-fns";
|
import { validateIamIdentity, validateIdTokenIdentity } from "./identity-gcp-auth-fns";
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import { JwksClient } from "jwks-rsa";
|
|||||||
|
|
||||||
import { AccessScope, IdentityAuthMethod, TIdentityJwtAuthsUpdate } from "@app/db/schemas";
|
import { AccessScope, IdentityAuthMethod, TIdentityJwtAuthsUpdate } from "@app/db/schemas";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
||||||
import {
|
import {
|
||||||
constructPermissionErrorMessage,
|
constructPermissionErrorMessage,
|
||||||
@@ -25,11 +24,12 @@ import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
|||||||
import { getValueByDot } from "@app/lib/template/dot-access";
|
import { getValueByDot } from "@app/lib/template/dot-access";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
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 { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityJwtAuthDALFactory } from "./identity-jwt-auth-dal";
|
import { TIdentityJwtAuthDALFactory } from "./identity-jwt-auth-dal";
|
||||||
import { doesFieldValueMatchJwtPolicy } from "./identity-jwt-auth-fns";
|
import { doesFieldValueMatchJwtPolicy } from "./identity-jwt-auth-fns";
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import { TGatewayServiceFactory } from "@app/ee/services/gateway/gateway-service
|
|||||||
import { TGatewayV2DALFactory } from "@app/ee/services/gateway-v2/gateway-v2-dal";
|
import { TGatewayV2DALFactory } from "@app/ee/services/gateway-v2/gateway-v2-dal";
|
||||||
import { TGatewayV2ServiceFactory } from "@app/ee/services/gateway-v2/gateway-v2-service";
|
import { TGatewayV2ServiceFactory } from "@app/ee/services/gateway-v2/gateway-v2-service";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import {
|
import {
|
||||||
OrgPermissionGatewayActions,
|
OrgPermissionGatewayActions,
|
||||||
OrgPermissionIdentityActions,
|
OrgPermissionIdentityActions,
|
||||||
@@ -29,11 +28,12 @@ import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
|||||||
import { logger } from "@app/lib/logger";
|
import { logger } from "@app/lib/logger";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
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 { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityKubernetesAuthDALFactory } from "./identity-kubernetes-auth-dal";
|
import { TIdentityKubernetesAuthDALFactory } from "./identity-kubernetes-auth-dal";
|
||||||
import { extractK8sUsername } from "./identity-kubernetes-auth-fns";
|
import { extractK8sUsername } from "./identity-kubernetes-auth-fns";
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
|||||||
import { TIdentityAuthTemplateDALFactory } from "@app/ee/services/identity-auth-template";
|
import { TIdentityAuthTemplateDALFactory } from "@app/ee/services/identity-auth-template";
|
||||||
import { testLDAPConfig } from "@app/ee/services/ldap-config/ldap-fns";
|
import { testLDAPConfig } from "@app/ee/services/ldap-config/ldap-fns";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import {
|
import {
|
||||||
OrgPermissionIdentityActions,
|
OrgPermissionIdentityActions,
|
||||||
OrgPermissionMachineIdentityAuthTemplateActions,
|
OrgPermissionMachineIdentityAuthTemplateActions,
|
||||||
@@ -32,11 +31,12 @@ import { logger } from "@app/lib/logger";
|
|||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TIdentityDALFactory } from "../identity/identity-dal";
|
import { TIdentityDALFactory } from "../identity/identity-dal";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
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 { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityLdapAuthDALFactory } from "./identity-ldap-auth-dal";
|
import { TIdentityLdapAuthDALFactory } from "./identity-ldap-auth-dal";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -19,9 +19,10 @@ import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
|||||||
import { logger } from "@app/lib/logger";
|
import { logger } from "@app/lib/logger";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
|
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityOciAuthDALFactory } from "./identity-oci-auth-dal";
|
import { TIdentityOciAuthDALFactory } from "./identity-oci-auth-dal";
|
||||||
import {
|
import {
|
||||||
@@ -32,7 +33,6 @@ import {
|
|||||||
TRevokeOciAuthDTO,
|
TRevokeOciAuthDTO,
|
||||||
TUpdateOciAuthDTO
|
TUpdateOciAuthDTO
|
||||||
} from "./identity-oci-auth-types";
|
} from "./identity-oci-auth-types";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
|
|
||||||
type TIdentityOciAuthServiceFactoryDep = {
|
type TIdentityOciAuthServiceFactoryDep = {
|
||||||
identityAccessTokenDAL: Pick<TIdentityAccessTokenDALFactory, "create" | "delete">;
|
identityAccessTokenDAL: Pick<TIdentityAccessTokenDALFactory, "create" | "delete">;
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import { JwksClient } from "jwks-rsa";
|
|||||||
|
|
||||||
import { AccessScope, IdentityAuthMethod, TIdentityOidcAuthsUpdate } from "@app/db/schemas";
|
import { AccessScope, IdentityAuthMethod, TIdentityOidcAuthsUpdate } from "@app/db/schemas";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
||||||
import {
|
import {
|
||||||
constructPermissionErrorMessage,
|
constructPermissionErrorMessage,
|
||||||
@@ -26,11 +25,12 @@ import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
|||||||
import { getValueByDot } from "@app/lib/template/dot-access";
|
import { getValueByDot } from "@app/lib/template/dot-access";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
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 { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityOidcAuthDALFactory } from "./identity-oidc-auth-dal";
|
import { TIdentityOidcAuthDALFactory } from "./identity-oidc-auth-dal";
|
||||||
import { doesAudValueMatchOidcPolicy, doesFieldValueMatchOidcPolicy } from "./identity-oidc-auth-fns";
|
import { doesAudValueMatchOidcPolicy, doesFieldValueMatchOidcPolicy } from "./identity-oidc-auth-fns";
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import { ForbiddenError } from "@casl/ability";
|
|||||||
|
|
||||||
import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
import { AccessScope, IdentityAuthMethod } from "@app/db/schemas";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
||||||
import {
|
import {
|
||||||
constructPermissionErrorMessage,
|
constructPermissionErrorMessage,
|
||||||
@@ -16,11 +15,12 @@ import { BadRequestError, NotFoundError, PermissionBoundaryError, UnauthorizedEr
|
|||||||
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
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 { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityTlsCertAuthDALFactory } from "./identity-tls-cert-auth-dal";
|
import { TIdentityTlsCertAuthDALFactory } from "./identity-tls-cert-auth-dal";
|
||||||
import { TIdentityTlsCertAuthServiceFactory } from "./identity-tls-cert-auth-types";
|
import { TIdentityTlsCertAuthServiceFactory } from "./identity-tls-cert-auth-types";
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { TIdentityAccessTokens, TMemberships, TIdentityTlsCertAuths } from "@app/db/schemas";
|
import { TIdentityAccessTokens, TIdentityTlsCertAuths, TMemberships } from "@app/db/schemas";
|
||||||
import { TProjectPermission } from "@app/lib/types";
|
import { TProjectPermission } from "@app/lib/types";
|
||||||
|
|
||||||
export type TLoginTlsCertAuthDTO = {
|
export type TLoginTlsCertAuthDTO = {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import { ForbiddenError } from "@casl/ability";
|
|||||||
|
|
||||||
import { AccessScope, IdentityAuthMethod, TableName } from "@app/db/schemas";
|
import { AccessScope, IdentityAuthMethod, TableName } from "@app/db/schemas";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
|
||||||
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionIdentityActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
||||||
import {
|
import {
|
||||||
constructPermissionErrorMessage,
|
constructPermissionErrorMessage,
|
||||||
@@ -15,9 +14,10 @@ import { BadRequestError, NotFoundError, PermissionBoundaryError } from "@app/li
|
|||||||
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
import { extractIPDetails, isValidIpOrCidr } from "@app/lib/ip";
|
||||||
|
|
||||||
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
import { ActorType, AuthTokenType } from "../auth/auth-type";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identity-access-token-dal";
|
||||||
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types";
|
||||||
|
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityTokenAuthDALFactory } from "./identity-token-auth-dal";
|
import { TIdentityTokenAuthDALFactory } from "./identity-token-auth-dal";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import { TKeyStoreFactory } from "@app/keystore/keystore";
|
|||||||
import { BadRequestError, NotFoundError, PermissionBoundaryError } from "@app/lib/errors";
|
import { BadRequestError, NotFoundError, PermissionBoundaryError } from "@app/lib/errors";
|
||||||
import { TIdentityProjectDALFactory } from "@app/services/identity-project/identity-project-dal";
|
import { TIdentityProjectDALFactory } from "@app/services/identity-project/identity-project-dal";
|
||||||
|
|
||||||
|
import { TMembershipRoleDALFactory } from "../membership/membership-role-dal";
|
||||||
|
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
import { validateIdentityUpdateForSuperAdminPrivileges } from "../super-admin/super-admin-fns";
|
||||||
import { TIdentityDALFactory } from "./identity-dal";
|
import { TIdentityDALFactory } from "./identity-dal";
|
||||||
@@ -26,8 +28,6 @@ import {
|
|||||||
TSearchOrgIdentitiesByOrgIdDTO,
|
TSearchOrgIdentitiesByOrgIdDTO,
|
||||||
TUpdateIdentityDTO
|
TUpdateIdentityDTO
|
||||||
} from "./identity-types";
|
} from "./identity-types";
|
||||||
import { TMembershipIdentityDALFactory } from "../membership-identity/membership-identity-dal";
|
|
||||||
import { TMembershipRoleDALFactory } from "../membership/membership-role-dal";
|
|
||||||
|
|
||||||
type TIdentityServiceFactoryDep = {
|
type TIdentityServiceFactoryDep = {
|
||||||
identityDAL: TIdentityDALFactory;
|
identityDAL: TIdentityDALFactory;
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ type TProjectMembershipGroupScopeFactoryDep = {
|
|||||||
membershipGroupDAL: Pick<TMembershipGroupDALFactory, "findOne">;
|
membershipGroupDAL: Pick<TMembershipGroupDALFactory, "findOne">;
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO(simp): check for group in org
|
|
||||||
export const newProjectMembershipGroupFactory = ({
|
export const newProjectMembershipGroupFactory = ({
|
||||||
permissionService,
|
permissionService,
|
||||||
orgDAL,
|
orgDAL,
|
||||||
|
|||||||
@@ -638,7 +638,6 @@ export const orgDALFactory = (db: TDbClient) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO(simp): resolve this role field later
|
|
||||||
const findIdentityOrganization = async (
|
const findIdentityOrganization = async (
|
||||||
identityId: string
|
identityId: string
|
||||||
): Promise<{ id: string; name: string; slug: string; role: string }> => {
|
): Promise<{ id: string; name: string; slug: string; role: string }> => {
|
||||||
|
|||||||
@@ -385,8 +385,6 @@ export const projectMembershipServiceFactory = ({
|
|||||||
tx
|
tx
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO(simp): likewise check in all services if i am missing anything
|
|
||||||
// Deletion should handle all cleanups like wise
|
|
||||||
await secretReminderRecipientsDAL.delete(
|
await secretReminderRecipientsDAL.delete(
|
||||||
{
|
{
|
||||||
projectId,
|
projectId,
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ import { logger } from "@app/lib/logger";
|
|||||||
import { QueueJobs, QueueName, TQueueJobTypes, TQueueServiceFactory } from "@app/queue";
|
import { QueueJobs, QueueName, TQueueJobTypes, TQueueServiceFactory } from "@app/queue";
|
||||||
|
|
||||||
import { TIntegrationAuthDALFactory } from "../integration-auth/integration-auth-dal";
|
import { TIntegrationAuthDALFactory } from "../integration-auth/integration-auth-dal";
|
||||||
|
import { TMembershipRoleDALFactory } from "../membership/membership-role-dal";
|
||||||
|
import { TMembershipUserDALFactory } from "../membership-user/membership-user-dal";
|
||||||
import { TOrgDALFactory } from "../org/org-dal";
|
import { TOrgDALFactory } from "../org/org-dal";
|
||||||
import { TOrgServiceFactory } from "../org/org-service";
|
import { TOrgServiceFactory } from "../org/org-service";
|
||||||
import { TProjectBotDALFactory } from "../project-bot/project-bot-dal";
|
import { TProjectBotDALFactory } from "../project-bot/project-bot-dal";
|
||||||
@@ -41,8 +43,6 @@ import { TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal";
|
|||||||
import { TUserDALFactory } from "../user/user-dal";
|
import { TUserDALFactory } from "../user/user-dal";
|
||||||
import { TProjectDALFactory } from "./project-dal";
|
import { TProjectDALFactory } from "./project-dal";
|
||||||
import { assignWorkspaceKeysToMembers, createProjectKey } from "./project-fns";
|
import { assignWorkspaceKeysToMembers, createProjectKey } from "./project-fns";
|
||||||
import { TMembershipUserDALFactory } from "../membership-user/membership-user-dal";
|
|
||||||
import { TMembershipRoleDALFactory } from "../membership/membership-role-dal";
|
|
||||||
|
|
||||||
export type TProjectQueueFactory = ReturnType<typeof projectQueueFactory>;
|
export type TProjectQueueFactory = ReturnType<typeof projectQueueFactory>;
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import {
|
|||||||
} from "@app/ee/services/permission/org-permission";
|
} from "@app/ee/services/permission/org-permission";
|
||||||
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service-types";
|
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service-types";
|
||||||
import { BadRequestError } from "@app/lib/errors";
|
import { BadRequestError } from "@app/lib/errors";
|
||||||
|
import { isCustomOrgRole } from "@app/services/org/org-role-fns";
|
||||||
|
|
||||||
import { TRoleScopeFactory } from "../role-types";
|
import { TRoleScopeFactory } from "../role-types";
|
||||||
import { isCustomOrgRole } from "@app/services/org/org-role-fns";
|
|
||||||
|
|
||||||
// TODO(simp): missing external group checking
|
// TODO(simp): missing external group checking
|
||||||
type TOrgRoleScopeFactoryDep = {
|
type TOrgRoleScopeFactoryDep = {
|
||||||
|
|||||||
@@ -1,16 +1,7 @@
|
|||||||
import { v4 as uuidv4 } from "uuid";
|
|
||||||
import { ForbiddenError } from "@casl/ability";
|
import { ForbiddenError } from "@casl/ability";
|
||||||
|
import { v4 as uuidv4 } from "uuid";
|
||||||
|
|
||||||
import { AccessScope, ActionProjectType, ProjectMembershipRole, ProjectType } from "@app/db/schemas";
|
import { AccessScope, ActionProjectType, ProjectMembershipRole, ProjectType } from "@app/db/schemas";
|
||||||
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service-types";
|
|
||||||
import {
|
|
||||||
isCustomProjectRole,
|
|
||||||
ProjectPermissionActions,
|
|
||||||
ProjectPermissionSub
|
|
||||||
} from "@app/ee/services/permission/project-permission";
|
|
||||||
import { BadRequestError } from "@app/lib/errors";
|
|
||||||
|
|
||||||
import { TRoleScopeFactory } from "../role-types";
|
|
||||||
import {
|
import {
|
||||||
cryptographicOperatorPermissions,
|
cryptographicOperatorPermissions,
|
||||||
projectAdminPermissions,
|
projectAdminPermissions,
|
||||||
@@ -19,8 +10,17 @@ import {
|
|||||||
projectViewerPermission,
|
projectViewerPermission,
|
||||||
sshHostBootstrapPermissions
|
sshHostBootstrapPermissions
|
||||||
} from "@app/ee/services/permission/default-roles";
|
} from "@app/ee/services/permission/default-roles";
|
||||||
|
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service-types";
|
||||||
|
import {
|
||||||
|
isCustomProjectRole,
|
||||||
|
ProjectPermissionActions,
|
||||||
|
ProjectPermissionSub
|
||||||
|
} from "@app/ee/services/permission/project-permission";
|
||||||
|
import { BadRequestError } from "@app/lib/errors";
|
||||||
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
import { TProjectDALFactory } from "@app/services/project/project-dal";
|
||||||
|
|
||||||
|
import { TRoleScopeFactory } from "../role-types";
|
||||||
|
|
||||||
type TProjectRoleScopeFactoryDep = {
|
type TProjectRoleScopeFactoryDep = {
|
||||||
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission">;
|
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission">;
|
||||||
projectDAL: Pick<TProjectDALFactory, "findById">;
|
projectDAL: Pick<TProjectDALFactory, "findById">;
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
|
import { packRules } from "@casl/ability/extra";
|
||||||
|
import { requestContext } from "@fastify/request-context";
|
||||||
|
|
||||||
import { AccessScope, ActionProjectType, TableName } from "@app/db/schemas";
|
import { AccessScope, ActionProjectType, TableName } from "@app/db/schemas";
|
||||||
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service-types";
|
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service-types";
|
||||||
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
||||||
import { validateHandlebarTemplate } from "@app/lib/template/validate-handlebars";
|
import { validateHandlebarTemplate } from "@app/lib/template/validate-handlebars";
|
||||||
import { UnpackedPermissionSchema, unpackPermissions } from "@app/server/routes/sanitizedSchema/permission";
|
import { UnpackedPermissionSchema, unpackPermissions } from "@app/server/routes/sanitizedSchema/permission";
|
||||||
|
|
||||||
|
import { ActorType } from "../auth/auth-type";
|
||||||
|
import { TIdentityDALFactory } from "../identity/identity-dal";
|
||||||
|
import { TProjectDALFactory } from "../project/project-dal";
|
||||||
|
import { TUserDALFactory } from "../user/user-dal";
|
||||||
import { newNamespaceRoleFactory } from "./namespace/namespace-role-factory";
|
import { newNamespaceRoleFactory } from "./namespace/namespace-role-factory";
|
||||||
import { newOrgRoleFactory } from "./org/org-role-factory";
|
import { newOrgRoleFactory } from "./org/org-role-factory";
|
||||||
import { newProjectRoleFactory } from "./project/project-role-factory";
|
import { newProjectRoleFactory } from "./project/project-role-factory";
|
||||||
@@ -17,12 +24,6 @@ import {
|
|||||||
TListRoleDTO,
|
TListRoleDTO,
|
||||||
TUpdateRoleDTO
|
TUpdateRoleDTO
|
||||||
} from "./role-types";
|
} from "./role-types";
|
||||||
import { TProjectDALFactory } from "../project/project-dal";
|
|
||||||
import { packRules } from "@casl/ability/extra";
|
|
||||||
import { requestContext } from "@fastify/request-context";
|
|
||||||
import { TIdentityDALFactory } from "../identity/identity-dal";
|
|
||||||
import { TUserDALFactory } from "../user/user-dal";
|
|
||||||
import { ActorType } from "../auth/auth-type";
|
|
||||||
|
|
||||||
type TRoleServiceFactoryDep = {
|
type TRoleServiceFactoryDep = {
|
||||||
roleDAL: TRoleDALFactory;
|
roleDAL: TRoleDALFactory;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
import { MongoAbility, RawRuleOf } from "@casl/ability";
|
||||||
|
|
||||||
import { AccessScopeData, TRoles } from "@app/db/schemas";
|
import { AccessScopeData, TRoles } from "@app/db/schemas";
|
||||||
import { OrgServiceActor } from "@app/lib/types";
|
import { OrgServiceActor } from "@app/lib/types";
|
||||||
import { MongoAbility, RawRuleOf } from "@casl/ability";
|
|
||||||
|
|
||||||
export interface TRoleScopeFactory {
|
export interface TRoleScopeFactory {
|
||||||
onCreateRoleGuard: (arg: TCreateRoleDTO) => Promise<void>;
|
onCreateRoleGuard: (arg: TCreateRoleDTO) => Promise<void>;
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ import { TIntegrationAuthServiceFactory } from "../integration-auth/integration-
|
|||||||
import { syncIntegrationSecrets } from "../integration-auth/integration-sync-secret";
|
import { syncIntegrationSecrets } from "../integration-auth/integration-sync-secret";
|
||||||
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 { TMembershipDALFactory } from "../membership/membership-dal";
|
||||||
|
import { TMembershipRoleDALFactory } from "../membership/membership-role-dal";
|
||||||
import { TOrgServiceFactory } from "../org/org-service";
|
import { TOrgServiceFactory } from "../org/org-service";
|
||||||
import { TProjectDALFactory } from "../project/project-dal";
|
import { TProjectDALFactory } from "../project/project-dal";
|
||||||
import { createProjectKey } from "../project/project-fns";
|
import { createProjectKey } from "../project/project-fns";
|
||||||
@@ -76,8 +78,6 @@ import {
|
|||||||
TRemoveSecretReminderDTO,
|
TRemoveSecretReminderDTO,
|
||||||
TSyncSecretsDTO
|
TSyncSecretsDTO
|
||||||
} from "./secret-types";
|
} from "./secret-types";
|
||||||
import { TMembershipDALFactory } from "../membership/membership-dal";
|
|
||||||
import { TMembershipRoleDALFactory } from "../membership/membership-role-dal";
|
|
||||||
|
|
||||||
export type TSecretQueueFactory = ReturnType<typeof secretQueueFactory>;
|
export type TSecretQueueFactory = ReturnType<typeof secretQueueFactory>;
|
||||||
type TSecretQueueFactoryDep = {
|
type TSecretQueueFactoryDep = {
|
||||||
|
|||||||
@@ -1283,7 +1283,8 @@ export const secretServiceFactory = ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const { userPermissions, identityPermissions, groupPermissions } = await permissionService.getProjectPermissions(
|
const { userPermissions, identityPermissions, groupPermissions } = await permissionService.getProjectPermissions(
|
||||||
dto.projectId
|
dto.projectId,
|
||||||
|
dto.actorOrgId
|
||||||
);
|
);
|
||||||
|
|
||||||
const attachAllowedActions = (
|
const attachAllowedActions = (
|
||||||
|
|||||||
@@ -266,6 +266,5 @@ export type TSecretReferenceTraceNode = {
|
|||||||
export type SecretAccessListEntry = {
|
export type SecretAccessListEntry = {
|
||||||
allowedActions: ProjectPermissionActions[];
|
allowedActions: ProjectPermissionActions[];
|
||||||
id: string;
|
id: string;
|
||||||
membershipId: string;
|
|
||||||
name: string;
|
name: string;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -746,18 +746,9 @@ export const SecretDetailSidebar = ({
|
|||||||
.join(", ")}
|
.join(", ")}
|
||||||
className="z-[100] capitalize"
|
className="z-[100] capitalize"
|
||||||
>
|
>
|
||||||
<Link
|
<div className="text-secondary/80 rounded-md border border-mineshaft-600 bg-mineshaft-700 px-1 py-0.5 text-sm hover:text-mineshaft-100">
|
||||||
to={
|
|
||||||
`${getProjectBaseURL(currentProject.type)}/members/$membershipId` as const
|
|
||||||
}
|
|
||||||
params={{
|
|
||||||
projectId: currentProject.id,
|
|
||||||
membershipId: user.membershipId
|
|
||||||
}}
|
|
||||||
className="text-secondary/80 rounded-md border border-mineshaft-600 bg-mineshaft-700 px-1 py-0.5 text-sm hover:text-mineshaft-100"
|
|
||||||
>
|
|
||||||
{user.name}
|
{user.name}
|
||||||
</Link>
|
</div>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|||||||
Reference in New Issue
Block a user