diff --git a/backend/src/ee/routes/v1/license-router.ts b/backend/src/ee/routes/v1/license-router.ts index b19faaf70..0a59fa7b5 100644 --- a/backend/src/ee/routes/v1/license-router.ts +++ b/backend/src/ee/routes/v1/license-router.ts @@ -47,7 +47,7 @@ export const registerLicenseRouter = async (server: FastifyZodProvider) => { 200: z.object({ plan: z.any() }) } }, - onRequest: verifyAuth([AuthMode.JWT]), + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { const plan = await server.services.license.getOrgPlan({ actorId: req.permission.id, diff --git a/backend/src/ee/services/oidc/oidc-config-service.ts b/backend/src/ee/services/oidc/oidc-config-service.ts index d933835e4..c59c05552 100644 --- a/backend/src/ee/services/oidc/oidc-config-service.ts +++ b/backend/src/ee/services/oidc/oidc-config-service.ts @@ -44,6 +44,7 @@ import { TOidcLoginDTO, TUpdateOidcCfgDTO } from "./oidc-config-types"; +import { logger } from "@app/lib/logger"; type TOidcConfigServiceFactoryDep = { userDAL: Pick< @@ -699,6 +700,7 @@ export const oidcConfigServiceFactory = ({ // eslint-disable-next-line @typescript-eslint/no-explicit-any (_req: any, tokenSet: TokenSet, cb: any) => { const claims = tokenSet.claims(); + logger.info(`User OIDC claims received for [orgId=${org.id}] [claims=${JSON.stringify(claims)}]`); if (!claims.email || !claims.given_name) { throw new BadRequestError({ message: "Invalid request. Missing email or first name" diff --git a/backend/src/services/secret-sync/aws-secrets-manager/aws-secrets-manager-sync-fns.ts b/backend/src/services/secret-sync/aws-secrets-manager/aws-secrets-manager-sync-fns.ts index cef1bee15..1b1daf2ac 100644 --- a/backend/src/services/secret-sync/aws-secrets-manager/aws-secrets-manager-sync-fns.ts +++ b/backend/src/services/secret-sync/aws-secrets-manager/aws-secrets-manager-sync-fns.ts @@ -57,7 +57,7 @@ const sleep = async () => setTimeout(resolve, 1000); }); -const getSecretsRecord = async (client: SecretsManagerClient): Promise => { +const getSecretsRecord = async (client: SecretsManagerClient, keySchema?: string): Promise => { const awsSecretsRecord: TAwsSecretsRecord = {}; let hasNext = true; let nextToken: string | undefined; @@ -72,7 +72,7 @@ const getSecretsRecord = async (client: SecretsManagerClient): Promise { - if (secretEntry.Name) { + if (secretEntry.Name && matchesSchema(secretEntry.Name, keySchema)) { awsSecretsRecord[secretEntry.Name] = secretEntry; } }); @@ -311,7 +311,7 @@ export const AwsSecretsManagerSyncFns = { const client = await getSecretsManagerClient(secretSync); - const awsSecretsRecord = await getSecretsRecord(client); + const awsSecretsRecord = await getSecretsRecord(client, syncOptions.keySchema); const awsValuesRecord = await getSecretValuesRecord(client, awsSecretsRecord); @@ -468,14 +468,16 @@ export const AwsSecretsManagerSyncFns = { getSecrets: async (secretSync: TAwsSecretsManagerSyncWithCredentials): Promise => { const client = await getSecretsManagerClient(secretSync); - const awsSecretsRecord = await getSecretsRecord(client); + const awsSecretsRecord = await getSecretsRecord(client, secretSync.syncOptions.keySchema); const awsValuesRecord = await getSecretValuesRecord(client, awsSecretsRecord); const { destinationConfig } = secretSync; if (destinationConfig.mappingBehavior === AwsSecretsManagerSyncMappingBehavior.OneToOne) { return Object.fromEntries( - Object.keys(awsSecretsRecord).map((key) => [key, { value: awsValuesRecord[key].SecretString ?? "" }]) + Object.keys(awsSecretsRecord) + .filter((key) => Object.hasOwn(awsValuesRecord, key)) + .map((key) => [key, { value: awsValuesRecord[key]?.SecretString ?? "" }]) ); } @@ -501,11 +503,11 @@ export const AwsSecretsManagerSyncFns = { } }, removeSecrets: async (secretSync: TAwsSecretsManagerSyncWithCredentials, secretMap: TSecretMap) => { - const { destinationConfig } = secretSync; + const { destinationConfig, syncOptions } = secretSync; const client = await getSecretsManagerClient(secretSync); - const awsSecretsRecord = await getSecretsRecord(client); + const awsSecretsRecord = await getSecretsRecord(client, syncOptions.keySchema); if (destinationConfig.mappingBehavior === AwsSecretsManagerSyncMappingBehavior.OneToOne) { for await (const secretKey of Object.keys(awsSecretsRecord)) { diff --git a/frontend/src/pages/organization/AccessManagementPage/components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal.tsx index 2a92089e5..01bb45598 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal.tsx @@ -4,7 +4,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; -import { Button, Checkbox, Modal, ModalContent } from "@app/components/v2"; +import { Button, Checkbox, Modal, ModalContent, Tooltip } from "@app/components/v2"; import { useOrgPermission } from "@app/context"; import { useUpgradePrivilegeSystem } from "@app/hooks/api"; @@ -262,7 +262,6 @@ export const UpgradePrivilegeSystemModal = ({ isOpen, onOpenChange }: Props) => -
- +
+ +
+