From 22ccfaa30f49f7818afb23ee010af20d4648398d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Sibiril?= <81782+aureliensibiril@users.noreply.github.com> Date: Wed, 8 Apr 2026 09:09:17 +0200 Subject: [PATCH] Replace Organization.googleWorkspaceOAuth2Scopes with SCIMBridgeTypeInfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A Google-Workspace-specific field on the generic Organization type was future-hostile: each new SCIM bridge type would need its own top-level field. Replace with a generic SCIMBridgeTypeInfo type queried through Organization.scimBridgeTypes, parallel to the ConnectorProviderInfo pattern in console/v1. ConnectorList looks up the Google Workspace entry from the list and passes its scopes to GoogleWorkspaceConnector as before. Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com> --- .../settings/_components/ConnectorList.tsx | 10 ++++++++-- pkg/server/api/connect/v1/schema.graphql | 7 ++++++- pkg/server/api/connect/v1/v1_resolver.go | 11 ++++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/apps/console/src/pages/iam/organizations/settings/_components/ConnectorList.tsx b/apps/console/src/pages/iam/organizations/settings/_components/ConnectorList.tsx index 54b41797b..ad27a46d4 100644 --- a/apps/console/src/pages/iam/organizations/settings/_components/ConnectorList.tsx +++ b/apps/console/src/pages/iam/organizations/settings/_components/ConnectorList.tsx @@ -21,7 +21,10 @@ import { GoogleWorkspaceConnector } from "./GoogleWorkspaceConnector"; const connectorListFragment = graphql` fragment ConnectorListFragment on Organization { - googleWorkspaceOAuth2Scopes + scimBridgeTypes { + type + oauth2Scopes + } scimConfiguration { ...GoogleWorkspaceConnectorFragment } @@ -33,6 +36,9 @@ export function ConnectorList(props: { fKey: ConnectorListFragment$key }) { const data = useFragment(connectorListFragment, fKey); const { __ } = useTranslate(); + const googleWorkspaceScopes + = data.scimBridgeTypes.find(info => info.type === "GOOGLE_WORKSPACE")?.oauth2Scopes ?? []; + return (

{__("Identity Provider")}

@@ -43,7 +49,7 @@ export function ConnectorList(props: { fKey: ConnectorListFragment$key }) {

); diff --git a/pkg/server/api/connect/v1/schema.graphql b/pkg/server/api/connect/v1/schema.graphql index 6e4d9d4a0..a97554c83 100644 --- a/pkg/server/api/connect/v1/schema.graphql +++ b/pkg/server/api/connect/v1/schema.graphql @@ -250,7 +250,7 @@ type Organization implements Node { ): SAMLConfigurationConnection @goField(forceResolver: true) scimConfiguration: SCIMConfiguration @goField(forceResolver: true) - googleWorkspaceOAuth2Scopes: [String!]! @goField(forceResolver: true) + scimBridgeTypes: [SCIMBridgeTypeInfo!]! @goField(forceResolver: true) auditLogEntries( first: Int @@ -422,6 +422,11 @@ enum SCIMBridgeType GOOGLE_WORKSPACE @goEnum(value: "go.probo.inc/probo/pkg/coredata.SCIMBridgeTypeGoogleWorkspace") } +type SCIMBridgeTypeInfo { + type: SCIMBridgeType! + oauth2Scopes: [String!]! +} + enum SCIMBridgeState @goModel(model: "go.probo.inc/probo/pkg/coredata.SCIMBridgeState") { PENDING @goEnum(value: "go.probo.inc/probo/pkg/coredata.SCIMBridgeStatePending") diff --git a/pkg/server/api/connect/v1/v1_resolver.go b/pkg/server/api/connect/v1/v1_resolver.go index 49457e800..abfff6775 100644 --- a/pkg/server/api/connect/v1/v1_resolver.go +++ b/pkg/server/api/connect/v1/v1_resolver.go @@ -1334,9 +1334,14 @@ func (r *organizationResolver) ScimConfiguration(ctx context.Context, obj *types return types.NewSCIMConfiguration(config), nil } -// GoogleWorkspaceOAuth2Scopes is the resolver for the googleWorkspaceOAuth2Scopes field. -func (r *organizationResolver) GoogleWorkspaceOAuth2Scopes(ctx context.Context, obj *types.Organization) ([]string, error) { - return googleworkspace.OAuth2Scopes, nil +// ScimBridgeTypes is the resolver for the scimBridgeTypes field. +func (r *organizationResolver) ScimBridgeTypes(ctx context.Context, obj *types.Organization) ([]*types.SCIMBridgeTypeInfo, error) { + return []*types.SCIMBridgeTypeInfo{ + { + Type: coredata.SCIMBridgeTypeGoogleWorkspace, + Oauth2Scopes: googleworkspace.OAuth2Scopes, + }, + }, nil } // AuditLogEntries is the resolver for the auditLogEntries field.