From f925b2f981f9ea2651146151f363ab1780d73d4e Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Mon, 9 Feb 2026 09:46:20 -0600 Subject: [PATCH 01/10] add TenantManagerIdentityProviderTypeConfiguration domain object ENG-3779 --- src/main/client/netcore.domain.ftl | 2 +- ...agerIdentityProviderTypeConfiguration.json | 38 ++++++++++++++ ...agerIdentityProviderTypeConfiguration.json | 51 +++++++++++++++++++ 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 src/main/domain/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json create mode 100644 src/main/domainNG/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json diff --git a/src/main/client/netcore.domain.ftl b/src/main/client/netcore.domain.ftl index 60a456a4a..0522f353f 100644 --- a/src/main/client/netcore.domain.ftl +++ b/src/main/client/netcore.domain.ftl @@ -56,7 +56,7 @@ using ${replaceKeywords(package)}; [/#if] [/#list] -[#if ["DeviceUserCodeResponse", "IdentityProviderLink", "IdentityProviderPendingLinkResponse", "IdentityProviderSearchCriteria", "SAMLv2Configuration"]?seq_contains(domain_item.type)] +[#if ["DeviceUserCodeResponse", "IdentityProviderLink", "IdentityProviderPendingLinkResponse", "IdentityProviderSearchCriteria", "SAMLv2Configuration", "TenantManagerIdentityProviderTypeConfiguration"]?seq_contains(domain_item.type)] using io.fusionauth.domain.provider; [/#if] [#if domain_item.enum?? && (global.needsConverter(domain_item) || global.needsConverterNoArgs(domain_item))] diff --git a/src/main/domain/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json b/src/main/domain/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json new file mode 100644 index 000000000..2a3c1631a --- /dev/null +++ b/src/main/domain/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json @@ -0,0 +1,38 @@ +{ + "packageName" : "io.fusionauth.domain.tenantManager", + "type" : "TenantManagerIdentityProviderTypeConfiguration", + "description" : "/**\n * Configuration object for identity provider types allowed in Tenant Manager\n */\n", + "extends" : [ { + "type" : "Enableable" + } ], + "implements" : [ { + "type" : "Buildable", + "typeArguments" : [ { + "type" : "TenantManagerIdentityProviderTypeConfiguration" + } ] + }, { + "type" : "JSONColumnable" + } ], + "fields" : { + "defaultAttributeMappings" : { + "type" : "Map", + "typeArguments" : [ { + "type" : "String" + }, { + "type" : "String" + } ] + }, + "insertInstant" : { + "type" : "ZonedDateTime" + }, + "lastUpdateInstant" : { + "type" : "ZonedDateTime" + }, + "linkingStrategy" : { + "type" : "IdentityProviderLinkingStrategy" + }, + "type" : { + "type" : "IdentityProviderType" + } + } +} \ No newline at end of file diff --git a/src/main/domainNG/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json b/src/main/domainNG/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json new file mode 100644 index 000000000..c7d0a22a2 --- /dev/null +++ b/src/main/domainNG/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json @@ -0,0 +1,51 @@ +{ + "className" : "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration", + "extends" : { + "className" : "io.fusionauth.domain.Enableable", + "type" : "Enableable" + }, + "fields" : { + "defaultAttributeMappings" : { + "className" : "java.util.Map", + "type" : "Map", + "typeArguments" : [ { + "className" : "java.lang.String", + "type" : "String" + }, { + "className" : "java.lang.String", + "type" : "String" + } ] + }, + "insertInstant" : { + "className" : "java.time.ZonedDateTime", + "type" : "ZonedDateTime" + }, + "lastUpdateInstant" : { + "className" : "java.time.ZonedDateTime", + "type" : "ZonedDateTime" + }, + "linkingStrategy" : { + "className" : "io.fusionauth.domain.provider.IdentityProviderLinkingStrategy", + "type" : "IdentityProviderLinkingStrategy" + }, + "type" : { + "className" : "io.fusionauth.domain.provider.IdentityProviderType", + "type" : "IdentityProviderType" + } + }, + "imports" : [ "io.fusionauth.domain.Enableable", "io.fusionauth.domain.Buildable", "com.inversoft.mybatis.JSONColumnable", "java.util.Map", "java.lang.String", "java.time.ZonedDateTime", "io.fusionauth.domain.provider.IdentityProviderLinkingStrategy", "io.fusionauth.domain.provider.IdentityProviderType" ], + "interfaces" : [ { + "className" : "io.fusionauth.domain.Buildable", + "type" : "Buildable", + "typeArguments" : [ { + "className" : "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration", + "type" : "TenantManagerIdentityProviderTypeConfiguration" + } ] + }, { + "className" : "com.inversoft.mybatis.JSONColumnable", + "type" : "JSONColumnable" + } ], + "objectType" : "Object", + "packageName" : "io.fusionauth.domain.tenantManager", + "type" : "TenantManagerIdentityProviderTypeConfiguration" +} \ No newline at end of file From 3a9e056bbf663126342b7b271097762614bb9526 Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Mon, 9 Feb 2026 11:05:29 -0600 Subject: [PATCH 02/10] add IdP type configs to SystemConfiguration.tenantManagerConfiguration ENG-3779 --- src/main/client/netcore.domain.ftl | 2 +- ...temConfiguration$TenantManagerConfiguration.json | 8 ++++++++ ...temConfiguration$TenantManagerConfiguration.json | 13 ++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/client/netcore.domain.ftl b/src/main/client/netcore.domain.ftl index 0522f353f..bfd1e4485 100644 --- a/src/main/client/netcore.domain.ftl +++ b/src/main/client/netcore.domain.ftl @@ -56,7 +56,7 @@ using ${replaceKeywords(package)}; [/#if] [/#list] -[#if ["DeviceUserCodeResponse", "IdentityProviderLink", "IdentityProviderPendingLinkResponse", "IdentityProviderSearchCriteria", "SAMLv2Configuration", "TenantManagerIdentityProviderTypeConfiguration"]?seq_contains(domain_item.type)] +[#if ["DeviceUserCodeResponse", "IdentityProviderLink", "IdentityProviderPendingLinkResponse", "IdentityProviderSearchCriteria", "SAMLv2Configuration", "TenantManagerConfiguration", "TenantManagerIdentityProviderTypeConfiguration"]?seq_contains(domain_item.type)] using io.fusionauth.domain.provider; [/#if] [#if domain_item.enum?? && (global.needsConverter(domain_item) || global.needsConverterNoArgs(domain_item))] diff --git a/src/main/domain/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json b/src/main/domain/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json index 84581f84d..74a2cf3da 100644 --- a/src/main/domain/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json +++ b/src/main/domain/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json @@ -13,6 +13,14 @@ }, "brandName" : { "type" : "String" + }, + "identityProviderTypeConfigurations" : { + "type" : "Map", + "typeArguments" : [ { + "type" : "IdentityProviderType" + }, { + "type" : "TenantManagerIdentityProviderTypeConfiguration" + } ] } } } \ No newline at end of file diff --git a/src/main/domainNG/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json b/src/main/domainNG/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json index 67414f418..238f155a7 100644 --- a/src/main/domainNG/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json +++ b/src/main/domainNG/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json @@ -12,9 +12,20 @@ "brandName" : { "className" : "java.lang.String", "type" : "String" + }, + "identityProviderTypeConfigurations" : { + "className" : "java.util.Map", + "type" : "Map", + "typeArguments" : [ { + "className" : "io.fusionauth.domain.provider.IdentityProviderType", + "type" : "IdentityProviderType" + }, { + "className" : "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration", + "type" : "TenantManagerIdentityProviderTypeConfiguration" + } ] } }, - "imports" : [ "io.fusionauth.domain.Buildable", "java.util.UUID", "java.lang.String" ], + "imports" : [ "io.fusionauth.domain.Buildable", "java.util.UUID", "java.lang.String", "java.util.Map", "io.fusionauth.domain.provider.IdentityProviderType", "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration" ], "interfaces" : [ { "className" : "io.fusionauth.domain.Buildable", "type" : "Buildable", From 68b4ff9944fd646bb0a1aec81f6ee950eff183a4 Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Tue, 10 Feb 2026 08:18:14 -0600 Subject: [PATCH 03/10] add new /api/tenant-manager/identity-provider endpoints to client-builder ENG-3779 --- ...agerIdentityProviderTypeConfiguration.json | 28 +++++++++++++++++++ ...agerIdentityProviderTypeConfiguration.json | 20 +++++++++++++ ...agerIdentityProviderTypeConfiguration.json | 28 +++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 src/main/api/createTenantManagerIdentityProviderTypeConfiguration.json create mode 100644 src/main/api/deleteTenantManagerIdentityProviderTypeConfiguration.json create mode 100644 src/main/api/updateTenantManagerIdentityProviderTypeConfiguration.json diff --git a/src/main/api/createTenantManagerIdentityProviderTypeConfiguration.json b/src/main/api/createTenantManagerIdentityProviderTypeConfiguration.json new file mode 100644 index 000000000..af67f9b5a --- /dev/null +++ b/src/main/api/createTenantManagerIdentityProviderTypeConfiguration.json @@ -0,0 +1,28 @@ +{ + "uri": "/api/tenant-manager/identity-provider", + "comments": [ + "Creates a tenant manager identity provider type configuration for the given identity provider type." + ], + "method": "post", + "methodName": "createTenantManagerIdentityProviderTypeConfiguration", + "successResponse": "TenantManagerIdentityProviderTypeConfigurationResponse", + "errorResponse": "Errors", + "params": [ + { + "name": "type", + "comments": [ + "The type of the identity provider." + ], + "type": "urlSegment", + "javaType": "IdentityProviderType" + }, + { + "name": "request", + "comments": [ + "The request object that contains all the information used to create the tenant manager identity provider type configuration." + ], + "type": "body", + "javaType": "TenantManagerIdentityProviderTypeConfigurationRequest" + } + ] +} diff --git a/src/main/api/deleteTenantManagerIdentityProviderTypeConfiguration.json b/src/main/api/deleteTenantManagerIdentityProviderTypeConfiguration.json new file mode 100644 index 000000000..7fc3c09a8 --- /dev/null +++ b/src/main/api/deleteTenantManagerIdentityProviderTypeConfiguration.json @@ -0,0 +1,20 @@ +{ + "uri": "/api/tenant-manager/identity-provider", + "comments": [ + "Deletes the tenant manager identity provider type configuration for the given identity provider type." + ], + "method": "delete", + "methodName": "deleteTenantManagerIdentityProviderTypeConfiguration", + "successResponse": "Void", + "errorResponse": "Errors", + "params": [ + { + "name": "type", + "comments": [ + "The type of the identity provider." + ], + "type": "urlSegment", + "javaType": "IdentityProviderType" + } + ] +} diff --git a/src/main/api/updateTenantManagerIdentityProviderTypeConfiguration.json b/src/main/api/updateTenantManagerIdentityProviderTypeConfiguration.json new file mode 100644 index 000000000..d53c17590 --- /dev/null +++ b/src/main/api/updateTenantManagerIdentityProviderTypeConfiguration.json @@ -0,0 +1,28 @@ +{ + "uri": "/api/tenant-manager/identity-provider", + "comments": [ + "Updates the tenant manager identity provider type configuration for the given identity provider type." + ], + "method": "put", + "methodName": "updateTenantManagerIdentityProviderTypeConfiguration", + "successResponse": "TenantManagerIdentityProviderTypeConfigurationResponse", + "errorResponse": "Errors", + "params": [ + { + "name": "type", + "comments": [ + "The type of the identity provider." + ], + "type": "urlSegment", + "javaType": "IdentityProviderType" + }, + { + "name": "request", + "comments": [ + "The request object that contains the updated tenant manager identity provider type configuration." + ], + "type": "body", + "javaType": "TenantManagerIdentityProviderTypeConfigurationRequest" + } + ] +} From 93e65babf183c68a4467c83e80d76d53f94b59ed Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Wed, 11 Feb 2026 10:31:51 -0600 Subject: [PATCH 04/10] fix up client library generation for new types ENG-3779 --- src/main/client/go.client.ftl | 4 +++- src/main/client/java.client.ftl | 2 ++ src/main/client/netcore.client.ftl | 1 + src/main/client/netcore.client.interface.ftl | 1 + src/main/client/netcore.client.sync.ftl | 1 + ...enantManagerIdentityProviderTypeConfiguration.json | 11 +++++++++++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/client/go.client.ftl b/src/main/client/go.client.ftl index 6aecd5e9f..a5b7be942 100644 --- a/src/main/client/go.client.ftl +++ b/src/main/client/go.client.ftl @@ -263,14 +263,16 @@ func (c *FusionAuthClient) ${api.methodName?cap_first}WithContext(ctx context.Co WithAuthorization(${api.authorization}). [/#if] [#list api.params![] as param] + [#if param.javaType??][#assign goType = global.convertType(param.javaType, "go")/][/#if] [#if param.type == "urlSegment"] [#if !param.constant?? && param.javaType == "Integer"] WithUriSegment(strconv.Itoa(${(param.constant?? && param.constant)?then(param.value, global.convertValue(param.name, "go"))})). + [#elseif !param.constant?? && goType != "string"] + WithUriSegment(string(${(param.constant?? && param.constant)?then(param.value, global.convertValue(param.name, "go"))})). [#else] WithUriSegment(${(param.constant?? && param.constant)?then(param.value, global.convertValue(param.name, "go"))}). [/#if] [#elseif param.type == "urlParameter"] - [#if param.javaType??][#assign goType = global.convertType(param.javaType, "go")/][/#if] [#if param.value?? && param.value == "true"] WithParameter("${param.parameterName}", strconv.FormatBool(true)). [#elseif param.value?? && param.value == "false"] diff --git a/src/main/client/java.client.ftl b/src/main/client/java.client.ftl index 9e50cb3c9..1ac1b60b6 100644 --- a/src/main/client/java.client.ftl +++ b/src/main/client/java.client.ftl @@ -213,6 +213,8 @@ import io.fusionauth.domain.api.report.LoginReportResponse; import io.fusionauth.domain.api.report.MonthlyActiveUserReportResponse; import io.fusionauth.domain.api.report.RegistrationReportResponse; import io.fusionauth.domain.api.report.TotalsReportResponse; +import io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest; +import io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse; import io.fusionauth.domain.api.twoFactor.SecretResponse; import io.fusionauth.domain.api.twoFactor.TwoFactorLoginRequest; import io.fusionauth.domain.api.twoFactor.TwoFactorSendRequest; diff --git a/src/main/client/netcore.client.ftl b/src/main/client/netcore.client.ftl index b0eadac30..5cbf55ccf 100644 --- a/src/main/client/netcore.client.ftl +++ b/src/main/client/netcore.client.ftl @@ -27,6 +27,7 @@ using io.fusionauth.domain.api.identityProvider; using io.fusionauth.domain.api.jwt; using io.fusionauth.domain.api.passwordless; using io.fusionauth.domain.api.report; +using io.fusionauth.domain.api.tenantManager; using io.fusionauth.domain.api.twoFactor; using io.fusionauth.domain.api.user; using io.fusionauth.domain.oauth2; diff --git a/src/main/client/netcore.client.interface.ftl b/src/main/client/netcore.client.interface.ftl index 09be1fccf..26c8e10a4 100644 --- a/src/main/client/netcore.client.interface.ftl +++ b/src/main/client/netcore.client.interface.ftl @@ -26,6 +26,7 @@ using io.fusionauth.domain.api.identityProvider; using io.fusionauth.domain.api.jwt; using io.fusionauth.domain.api.passwordless; using io.fusionauth.domain.api.report; +using io.fusionauth.domain.api.tenantManager; using io.fusionauth.domain.api.twoFactor; using io.fusionauth.domain.api.user; using io.fusionauth.domain.oauth2; diff --git a/src/main/client/netcore.client.sync.ftl b/src/main/client/netcore.client.sync.ftl index 90df895a3..d3587764d 100644 --- a/src/main/client/netcore.client.sync.ftl +++ b/src/main/client/netcore.client.sync.ftl @@ -41,6 +41,7 @@ using io.fusionauth.domain.api.identityProvider; using io.fusionauth.domain.api.jwt; using io.fusionauth.domain.api.passwordless; using io.fusionauth.domain.api.report; +using io.fusionauth.domain.api.tenantManager; using io.fusionauth.domain.api.twoFactor; using io.fusionauth.domain.api.user; using io.fusionauth.domain.oauth2; diff --git a/src/main/domainNG/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json b/src/main/domainNG/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json index c7d0a22a2..381e62df2 100644 --- a/src/main/domainNG/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json +++ b/src/main/domainNG/io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration.json @@ -5,6 +5,17 @@ "type" : "Enableable" }, "fields" : { + "data" : { + "className" : "java.util.Map", + "type" : "Map", + "typeArguments" : [ { + "className" : "java.lang.String", + "type" : "String" + }, { + "className" : "java.lang.Object", + "type" : "Object" + } ] + }, "defaultAttributeMappings" : { "className" : "java.util.Map", "type" : "Map", From 3c21ec919ddb1b1f548823b9058dadb25d62bf37 Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Wed, 11 Feb 2026 11:01:03 -0600 Subject: [PATCH 05/10] generate client libraries for /api/tenant-manager/identity-provider ENG-3779 --- ...rIdentityProviderTypeConfigurationRequest.json | 10 ++++++++++ ...IdentityProviderTypeConfigurationResponse.json | 10 ++++++++++ ...rIdentityProviderTypeConfigurationRequest.json | 15 +++++++++++++++ ...IdentityProviderTypeConfigurationResponse.json | 15 +++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest.json create mode 100644 src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json create mode 100644 src/main/domainNG/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest.json create mode 100644 src/main/domainNG/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json diff --git a/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest.json b/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest.json new file mode 100644 index 000000000..6d4aad14a --- /dev/null +++ b/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest.json @@ -0,0 +1,10 @@ +{ + "packageName" : "io.fusionauth.domain.api.tenantManager", + "type" : "TenantManagerIdentityProviderTypeConfigurationRequest", + "description" : "/**\n * The Tenant Manager IdP type configuration request object\n */\n", + "fields" : { + "typeConfiguration" : { + "type" : "TenantManagerIdentityProviderTypeConfiguration" + } + } +} \ No newline at end of file diff --git a/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json b/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json new file mode 100644 index 000000000..f3f3660c4 --- /dev/null +++ b/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json @@ -0,0 +1,10 @@ +{ + "packageName" : "io.fusionauth.domain.api.tenantManager", + "type" : "TenantManagerIdentityProviderTypeConfigurationResponse", + "description" : "/**\n * The Tenant Manager IdP type configuration request object\n */\n", + "fields" : { + "typeConfiguration" : { + "type" : "TenantManagerIdentityProviderTypeConfiguration" + } + } +} \ No newline at end of file diff --git a/src/main/domainNG/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest.json b/src/main/domainNG/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest.json new file mode 100644 index 000000000..932dd7b62 --- /dev/null +++ b/src/main/domainNG/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest.json @@ -0,0 +1,15 @@ +{ + "className" : "io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationRequest", + "extends" : { }, + "fields" : { + "typeConfiguration" : { + "className" : "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration", + "type" : "TenantManagerIdentityProviderTypeConfiguration" + } + }, + "imports" : [ "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration" ], + "interfaces" : [ ], + "objectType" : "Object", + "packageName" : "io.fusionauth.domain.api.tenantManager", + "type" : "TenantManagerIdentityProviderTypeConfigurationRequest" +} \ No newline at end of file diff --git a/src/main/domainNG/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json b/src/main/domainNG/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json new file mode 100644 index 000000000..c4f6585ec --- /dev/null +++ b/src/main/domainNG/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json @@ -0,0 +1,15 @@ +{ + "className" : "io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse", + "extends" : { }, + "fields" : { + "typeConfiguration" : { + "className" : "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration", + "type" : "TenantManagerIdentityProviderTypeConfiguration" + } + }, + "imports" : [ "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration" ], + "interfaces" : [ ], + "objectType" : "Object", + "packageName" : "io.fusionauth.domain.api.tenantManager", + "type" : "TenantManagerIdentityProviderTypeConfigurationResponse" +} \ No newline at end of file From aea2a7e9cb9895187017101b9d09fca3d3597047 Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Wed, 11 Feb 2026 14:43:14 -0600 Subject: [PATCH 06/10] PR feedback ENG-3779 --- ....TenantManagerIdentityProviderTypeConfigurationResponse.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json b/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json index f3f3660c4..06cf2dac6 100644 --- a/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json +++ b/src/main/domain/io.fusionauth.domain.api.tenantManager.TenantManagerIdentityProviderTypeConfigurationResponse.json @@ -1,7 +1,7 @@ { "packageName" : "io.fusionauth.domain.api.tenantManager", "type" : "TenantManagerIdentityProviderTypeConfigurationResponse", - "description" : "/**\n * The Tenant Manager IdP type configuration request object\n */\n", + "description" : "/**\n * The Tenant Manager IdP type configuration response object\n */\n", "fields" : { "typeConfiguration" : { "type" : "TenantManagerIdentityProviderTypeConfiguration" From 59b6b6d9185d319c25d9cb0c68ca74c17582e08e Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Wed, 11 Feb 2026 17:46:53 -0600 Subject: [PATCH 07/10] use String as map key instead of enum ENG-3779 --- ...main.SystemConfiguration$TenantManagerConfiguration.json | 2 +- ...main.SystemConfiguration$TenantManagerConfiguration.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/domain/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json b/src/main/domain/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json index 74a2cf3da..6c9175682 100644 --- a/src/main/domain/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json +++ b/src/main/domain/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json @@ -17,7 +17,7 @@ "identityProviderTypeConfigurations" : { "type" : "Map", "typeArguments" : [ { - "type" : "IdentityProviderType" + "type" : "String" }, { "type" : "TenantManagerIdentityProviderTypeConfiguration" } ] diff --git a/src/main/domainNG/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json b/src/main/domainNG/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json index 238f155a7..541d1b796 100644 --- a/src/main/domainNG/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json +++ b/src/main/domainNG/io.fusionauth.domain.SystemConfiguration$TenantManagerConfiguration.json @@ -17,15 +17,15 @@ "className" : "java.util.Map", "type" : "Map", "typeArguments" : [ { - "className" : "io.fusionauth.domain.provider.IdentityProviderType", - "type" : "IdentityProviderType" + "className" : "java.lang.String", + "type" : "String" }, { "className" : "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration", "type" : "TenantManagerIdentityProviderTypeConfiguration" } ] } }, - "imports" : [ "io.fusionauth.domain.Buildable", "java.util.UUID", "java.lang.String", "java.util.Map", "io.fusionauth.domain.provider.IdentityProviderType", "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration" ], + "imports" : [ "io.fusionauth.domain.Buildable", "java.util.UUID", "java.lang.String", "java.util.Map", "io.fusionauth.domain.tenantManager.TenantManagerIdentityProviderTypeConfiguration" ], "interfaces" : [ { "className" : "io.fusionauth.domain.Buildable", "type" : "Buildable", From fc0da7c0bea65d6c4ec5282102dc91ddc7aeb0ca Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Wed, 11 Feb 2026 19:54:31 -0600 Subject: [PATCH 08/10] self-review ENG-3779 --- src/main/client/netcore.domain.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/client/netcore.domain.ftl b/src/main/client/netcore.domain.ftl index bfd1e4485..0522f353f 100644 --- a/src/main/client/netcore.domain.ftl +++ b/src/main/client/netcore.domain.ftl @@ -56,7 +56,7 @@ using ${replaceKeywords(package)}; [/#if] [/#list] -[#if ["DeviceUserCodeResponse", "IdentityProviderLink", "IdentityProviderPendingLinkResponse", "IdentityProviderSearchCriteria", "SAMLv2Configuration", "TenantManagerConfiguration", "TenantManagerIdentityProviderTypeConfiguration"]?seq_contains(domain_item.type)] +[#if ["DeviceUserCodeResponse", "IdentityProviderLink", "IdentityProviderPendingLinkResponse", "IdentityProviderSearchCriteria", "SAMLv2Configuration", "TenantManagerIdentityProviderTypeConfiguration"]?seq_contains(domain_item.type)] using io.fusionauth.domain.provider; [/#if] [#if domain_item.enum?? && (global.needsConverter(domain_item) || global.needsConverterNoArgs(domain_item))] From 41e0e8d3d577f636547a1e0805cc7ad68114aabc Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Thu, 12 Feb 2026 09:23:05 -0600 Subject: [PATCH 09/10] add patchTenantManagerIdentityProviderTypeConfiguration client method. fix missing operations check ENG-3779 --- bin/check-operations.sh | 17 ++++++++++- ...agerIdentityProviderTypeConfiguration.json | 28 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/main/api/patchTenantManagerIdentityProviderTypeConfiguration.json diff --git a/bin/check-operations.sh b/bin/check-operations.sh index 7877ec77b..eaa6e0d05 100755 --- a/bin/check-operations.sh +++ b/bin/check-operations.sh @@ -1,5 +1,20 @@ #!/bin/bash +# +# Copyright (c) 2026, FusionAuth, All Rights Reserved +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +# either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +# # Directory containing the JSON files DIRECTORY="src/main/api/" @@ -7,7 +22,7 @@ DIRECTORY="src/main/api/" OPERATIONS=("create" "update" "delete" "retrieve" "patch") # Entities/ops to exclude from validation -EXCLUDE_ENTITIES_OPS=("UserConsent-delete" "ApplicationRole-retrieve" "Family-delete" "Family-patch" "Family-retrieve" "EntityTypePermission-retrieve" "ApplicationRole-retrieve" "GroupMembers-retrieve" "GroupMembers-patch" "UserLink-patch" "UserLink-update" "AuditLog-delete" "AuditLog-patch" "AuditLog-update") +EXCLUDE_ENTITIES_OPS=("UserConsent-delete" "ApplicationRole-retrieve" "Family-delete" "Family-patch" "Family-retrieve" "EntityTypePermission-retrieve" "ApplicationRole-retrieve" "GroupMembers-retrieve" "GroupMembers-patch" "UserLink-patch" "UserLink-update" "AuditLog-delete" "AuditLog-patch" "AuditLog-update" "TenantManagerIdentityProviderTypeConfiguration-retrieve") # Function to check if an entity is in the exclude list diff --git a/src/main/api/patchTenantManagerIdentityProviderTypeConfiguration.json b/src/main/api/patchTenantManagerIdentityProviderTypeConfiguration.json new file mode 100644 index 000000000..8617a709b --- /dev/null +++ b/src/main/api/patchTenantManagerIdentityProviderTypeConfiguration.json @@ -0,0 +1,28 @@ +{ + "uri": "/api/tenant-manager/identity-provider", + "comments": [ + "Patches the tenant manager identity provider type configuration for the given identity provider type." + ], + "method": "patch", + "methodName": "patchTenantManagerIdentityProviderTypeConfiguration", + "successResponse": "TenantManagerIdentityProviderTypeConfigurationResponse", + "errorResponse": "Errors", + "params": [ + { + "name": "type", + "comments": [ + "The type of the identity provider." + ], + "type": "urlSegment", + "javaType": "IdentityProviderType" + }, + { + "name": "request", + "comments": [ + "The request object that contains the new tenant manager identity provider type configuration information." + ], + "type": "body", + "javaType": "TenantManagerIdentityProviderTypeConfigurationRequest" + } + ] +} From 691badaf34ef18953ea81fcc119beac73ec323d0 Mon Sep 17 00:00:00 2001 From: Spencer Witt <3409780+spwitt@users.noreply.github.com> Date: Thu, 12 Feb 2026 09:24:24 -0600 Subject: [PATCH 10/10] remove copyright notice --- bin/check-operations.sh | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/bin/check-operations.sh b/bin/check-operations.sh index eaa6e0d05..873b40821 100755 --- a/bin/check-operations.sh +++ b/bin/check-operations.sh @@ -1,20 +1,5 @@ #!/bin/bash -# -# Copyright (c) 2026, FusionAuth, All Rights Reserved -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -# either express or implied. See the License for the specific -# language governing permissions and limitations under the License. -# # Directory containing the JSON files DIRECTORY="src/main/api/"