Skip to content

Commit 97fc457

Browse files
Add tags in the idp authenticator responses.
1 parent a25fe0f commit 97fc457

File tree

2 files changed

+59
-34
lines changed

2 files changed

+59
-34
lines changed

components/org.wso2.carbon.identity.api.server.idp/org.wso2.carbon.identity.api.server.idp.v1/src/main/java/org/wso2/carbon/identity/api/server/idp/v1/core/ServerIdpManagementService.java

+2-24
Original file line numberDiff line numberDiff line change
@@ -2428,30 +2428,8 @@ private FederatedAuthenticatorListResponse createFederatedAuthenticatorResponse(
24282428

24292429
FederatedAuthenticatorConfig[] fedAuthConfigs = idp.getFederatedAuthenticatorConfigs();
24302430
FederatedAuthenticatorListResponse fedAuthIDPResponse = new FederatedAuthenticatorListResponse();
2431-
List<FederatedAuthenticatorListItem> authenticators = new ArrayList<>();
2432-
for (FederatedAuthenticatorConfig fedAuthConfig : fedAuthConfigs) {
2433-
FederatedAuthenticatorListItem fedAuthListItem = new FederatedAuthenticatorListItem();
2434-
fedAuthListItem.setAuthenticatorId(base64URLEncode(fedAuthConfig.getName()));
2435-
fedAuthListItem.setName(fedAuthConfig.getName());
2436-
fedAuthListItem.setIsEnabled(fedAuthConfig.isEnabled());
2437-
fedAuthListItem.setDefinedBy(FederatedAuthenticatorListItem.DefinedByEnum.valueOf(
2438-
fedAuthConfig.getDefinedByType().toString()));
2439-
FederatedAuthenticatorConfig federatedAuthenticatorConfig =
2440-
ApplicationAuthenticatorService.getInstance().getFederatedAuthenticatorByName(
2441-
fedAuthConfig.getName());
2442-
if (federatedAuthenticatorConfig != null) {
2443-
String[] tags = federatedAuthenticatorConfig.getTags();
2444-
if (ArrayUtils.isNotEmpty(tags)) {
2445-
fedAuthListItem.setTags(Arrays.asList(tags));
2446-
}
2447-
}
2448-
fedAuthListItem.setSelf(
2449-
ContextLoader.buildURIForBody(String.format(V1_API_PATH_COMPONENT + IDP_PATH_COMPONENT +
2450-
"/%s/federated-authenticators/%s", idp.getResourceId(),
2451-
base64URLEncode(fedAuthConfig.getName())))
2452-
.toString());
2453-
authenticators.add(fedAuthListItem);
2454-
}
2431+
List<FederatedAuthenticatorListItem> authenticators =
2432+
FederatedAuthenticatorConfigBuilderFactory.build(fedAuthConfigs, idp.getResourceId());
24552433
fedAuthIDPResponse.setDefaultAuthenticatorId(idp.getDefaultAuthenticatorConfig() != null ? base64URLEncode(idp
24562434
.getDefaultAuthenticatorConfig().getName()) : null);
24572435
fedAuthIDPResponse.setAuthenticators(authenticators);

components/org.wso2.carbon.identity.api.server.idp/org.wso2.carbon.identity.api.server.idp.v1/src/main/java/org/wso2/carbon/identity/api/server/idp/v1/impl/FederatedAuthenticatorConfigBuilderFactory.java

+57-10
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@
2020

2121
import org.apache.commons.lang.ArrayUtils;
2222
import org.apache.commons.lang.StringUtils;
23+
import org.wso2.carbon.identity.api.server.common.ContextLoader;
2324
import org.wso2.carbon.identity.api.server.idp.common.Constants;
2425
import org.wso2.carbon.identity.api.server.idp.common.IdentityProviderServiceHolder;
2526
import org.wso2.carbon.identity.api.server.idp.v1.model.AuthenticationType;
2627
import org.wso2.carbon.identity.api.server.idp.v1.model.Endpoint;
2728
import org.wso2.carbon.identity.api.server.idp.v1.model.FederatedAuthenticator;
29+
import org.wso2.carbon.identity.api.server.idp.v1.model.FederatedAuthenticatorListItem;
2830
import org.wso2.carbon.identity.api.server.idp.v1.model.FederatedAuthenticatorPUTRequest;
2931
import org.wso2.carbon.identity.application.common.ApplicationAuthenticatorService;
3032
import org.wso2.carbon.identity.application.common.model.FederatedAuthenticatorConfig;
@@ -38,6 +40,7 @@
3840
import org.wso2.carbon.idp.mgt.IdentityProviderManagementServerException;
3941

4042
import java.nio.charset.StandardCharsets;
43+
import java.util.ArrayList;
4144
import java.util.Arrays;
4245
import java.util.Base64;
4346
import java.util.List;
@@ -47,7 +50,10 @@
4750
import java.util.function.Function;
4851
import java.util.stream.Collectors;
4952

53+
import static org.wso2.carbon.identity.api.server.common.Constants.V1_API_PATH_COMPONENT;
54+
import static org.wso2.carbon.identity.api.server.common.Util.base64URLEncode;
5055
import static org.wso2.carbon.identity.api.server.idp.common.Constants.GOOGLE_PRIVATE_KEY;
56+
import static org.wso2.carbon.identity.api.server.idp.common.Constants.IDP_PATH_COMPONENT;
5157

5258
/**
5359
* The factory class for building federated authenticator configuration related models.
@@ -118,17 +124,10 @@ public static FederatedAuthenticator build(FederatedAuthenticatorConfig config)
118124

119125
federatedAuthenticator.setName(config.getName());
120126
federatedAuthenticator.setIsEnabled(config.isEnabled());
121-
122-
FederatedAuthenticatorConfig federatedAuthenticatorConfig =
123-
ApplicationAuthenticatorService.getInstance().getFederatedAuthenticatorByName(
124-
config.getName());
125-
if (federatedAuthenticatorConfig != null) {
126-
String[] tags = federatedAuthenticatorConfig.getTags();
127-
if (ArrayUtils.isNotEmpty(tags)) {
128-
federatedAuthenticator.setTags(Arrays.asList(tags));
129-
}
127+
String[] tags = resolveAuthenticatorTags(config);
128+
if (ArrayUtils.isNotEmpty(tags)) {
129+
federatedAuthenticator.setTags(Arrays.asList(tags));
130130
}
131-
132131
if (DefinedByType.SYSTEM == config.getDefinedByType()) {
133132
federatedAuthenticator.setDefinedBy(FederatedAuthenticator.DefinedByEnum.SYSTEM);
134133
List<org.wso2.carbon.identity.api.server.idp.v1.model.Property> properties =
@@ -141,6 +140,37 @@ public static FederatedAuthenticator build(FederatedAuthenticatorConfig config)
141140

142141
return federatedAuthenticator;
143142
}
143+
144+
/**
145+
* Builds a list of FederatedAuthenticatorListItem instances based on the given array of
146+
* FederatedAuthenticatorConfig.
147+
*
148+
* @param fedAuthConfigs Array of FederatedAuthenticatorConfig instances.
149+
* @return List of FederatedAuthenticatorListItem instances.
150+
*/
151+
public static List<FederatedAuthenticatorListItem> build(FederatedAuthenticatorConfig[] fedAuthConfigs,
152+
String idpResourceId) {
153+
154+
List<FederatedAuthenticatorListItem> authenticators = new ArrayList<>();
155+
for (FederatedAuthenticatorConfig config : fedAuthConfigs) {
156+
FederatedAuthenticatorListItem authenticatorListItem = new FederatedAuthenticatorListItem();
157+
authenticatorListItem.setAuthenticatorId(base64URLEncode(config.getName()));
158+
authenticatorListItem.setName(config.getName());
159+
authenticatorListItem.setIsEnabled(config.isEnabled());
160+
authenticatorListItem.definedBy(FederatedAuthenticatorListItem.DefinedByEnum.valueOf(
161+
config.getDefinedByType().toString()));
162+
String[] tags = resolveAuthenticatorTags(config);
163+
if (ArrayUtils.isNotEmpty(tags)) {
164+
authenticatorListItem.setTags(Arrays.asList(tags));
165+
}
166+
authenticatorListItem.setSelf(ContextLoader.buildURIForBody(String.format(V1_API_PATH_COMPONENT +
167+
IDP_PATH_COMPONENT + "/%s/federated-authenticators/%s", idpResourceId,
168+
base64URLEncode(config.getName()))).toString());
169+
authenticators.add(authenticatorListItem);
170+
}
171+
172+
return authenticators;
173+
}
144174

145175
private static FederatedAuthenticatorConfig createFederatedAuthenticatorConfig(Config config)
146176
throws IdentityProviderManagementClientException {
@@ -435,6 +465,23 @@ private static void resolveEndpointConfiguration(FederatedAuthenticator authenti
435465
}
436466
}
437467

468+
private static String[] resolveAuthenticatorTags(FederatedAuthenticatorConfig config) {
469+
470+
/* If the authenticator is defined by the user, return the tags of the authenticator config. Otherwise, return
471+
the tags of the system registered federated template.
472+
*/
473+
if (DefinedByType.USER == config.getDefinedByType()) {
474+
return config.getTags();
475+
476+
}
477+
FederatedAuthenticatorConfig federatedAuthenticatorConfig =
478+
ApplicationAuthenticatorService.getInstance().getFederatedAuthenticatorByName(config.getName());
479+
if (federatedAuthenticatorConfig != null) {
480+
return federatedAuthenticatorConfig.getTags();
481+
}
482+
return new String[0];
483+
}
484+
438485
/**
439486
* Config class to build FederatedAuthenticatorConfig.
440487
*/

0 commit comments

Comments
 (0)