Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,29 @@ public class TenantDiscoveryResponse {
@JsonProperty("tenant_id")
private String tenantId;

@JsonProperty("tenant_name")
private String tenantName;

private String domain;

/**
* @deprecated Superseded by {@link #openframeLoginEnabled} and {@link #customProviders}: this
* list mixes the tenant's own apps, system defaults and the built-in login, so the login form
* can't tell which buttons are the tenant's. Kept while the web frontend and the app shell
* still read it.
* TODO(CU-17tkuw5x9mz): remove once both are migrated.
*/
@Deprecated
@JsonProperty("auth_providers")
private List<String> authProviders;

@JsonProperty("openframe_login_enabled")
private Boolean openframeLoginEnabled;

/**
* Providers the tenant configured with its own app (e.g. google, microsoft), without the
* system defaults that {@link #authProviders} also includes.
*/
@JsonProperty("custom_providers")
private List<String> customProviders;
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,18 @@ public List<String> getEffectiveProvidersForTenant(String tenantId) {
return List.copyOf(result);
}

/**
* Providers the tenant configured with its own app — active per-tenant configs only, no
* defaults and no built-in login toggle.
*/
public List<String> getCustomProvidersForTenant(String tenantId) {
return getActiveForTenant(tenantId).stream()
.map(cfg -> cfg.getProvider().toLowerCase(Locale.ROOT))
.filter(provider -> !SSOConfig.OPENFRAME_PROVIDER.equals(provider))
.distinct()
.toList();
}

/**
* Whether the built-in OpenFrame (password) login is enabled for the tenant. Controlled by a
* pseudo-provider document ({@link SSOConfig#OPENFRAME_PROVIDER}) in {@code sso_configs};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,16 @@ private Optional<Tenant> resolveActiveTenant(String tenantId) {
}

private TenantDiscoveryResponse tenantFound(String email, Tenant tenant) {
boolean openframeLoginEnabled = ssoConfigService.isOpenframeLoginEnabled(tenant.getId());
return TenantDiscoveryResponse.builder()
.email(email)
.hasExistingAccounts(true)
.tenantId(tenant.getId())
.tenantName(tenant.getName())
.domain(tenant.getDomain())
.authProviders(availableAuthProviders(tenant))
.authProviders(availableAuthProviders(tenant, openframeLoginEnabled))
.openframeLoginEnabled(openframeLoginEnabled)
.customProviders(ssoConfigService.getCustomProvidersForTenant(tenant.getId()))
.build();
}

Expand All @@ -94,9 +98,9 @@ private TenantDiscoveryResponse noAccounts(String email) {
.build();
}

private List<String> availableAuthProviders(Tenant tenant) {
private List<String> availableAuthProviders(Tenant tenant, boolean openframeLoginEnabled) {
List<String> providers = new ArrayList<>(ssoConfigService.getEffectiveProvidersForTenant(tenant.getId()));
if (ssoConfigService.isOpenframeLoginEnabled(tenant.getId())) {
if (openframeLoginEnabled) {
providers.add(OPENFRAME_PROVIDER);
}
return providers.stream()
Expand Down
Loading