Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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 @@ -102,6 +102,8 @@ public class SCIMConnectorConfiguration extends AbstractConfiguration implements

private GuardedString authHttpHeaderValue;

private boolean enableParamsURLEncoding = false;

@ConfigurationProperty(order = 1,
displayMessageKey = "baseAddress.display",
helpMessageKey = "baseAddress.help",
Expand Down Expand Up @@ -430,6 +432,17 @@ public void setAuthHttpHeaderValue(final GuardedString authHttpHeaderValue) {
this.authHttpHeaderValue = authHttpHeaderValue;
}

@ConfigurationProperty(displayMessageKey = "enableParamsURLEncoding.display",
helpMessageKey = "enableParamsURLEncoding.help",
order = 31)
public boolean getEnableParamsURLEncoding() {
return enableParamsURLEncoding;
}

public void setEnableParamsURLEncoding(final boolean enableParamsURLEncoding) {
this.enableParamsURLEncoding = enableParamsURLEncoding;
}

@Override
public void validate() {
if (StringUtil.isBlank(baseAddress)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
Expand Down Expand Up @@ -521,7 +523,8 @@ protected void readCustomAttributes(final PagedResults<UT> resources, final Json
*/
@Override
public void deleteUser(final String userId) {
doDeleteUser(userId, getWebclient("Users", null).path(userId));
doDeleteUser(userId, getWebclient("Users", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(userId, StandardCharsets.UTF_8) : userId));
}

/**
Expand Down Expand Up @@ -567,7 +570,8 @@ protected UT doCreateUser(final UT user) {

protected UT doUpdateUser(final String userId, final P userPatch, final Class<UT> userType) {
UT updated = null;
JsonNode node = doUpdatePatch(userPatch, Collections.emptySet(), getWebclient("Users", null).path(userId));
JsonNode node = doUpdatePatch(userPatch, Collections.emptySet(), getWebclient("Users", null).path(
config.getEnableParamsURLEncoding() ? URLEncoder.encode(userId, StandardCharsets.UTF_8) : userId));
if (node == null) {
SCIMUtils.handleGeneralError("While running update patch on service");
}
Expand All @@ -593,8 +597,10 @@ protected UT doUpdateUser(final UT user, final Set<Attribute> replaceAttributes,
UT updated = null;
JsonNode node =
config.getUpdateUserMethod().equalsIgnoreCase("PATCH") && !replaceAttributes.isEmpty() ? doUpdatePatch(
replaceAttributes, getWebclient("Users", null).path(user.getId()))
: doUpdate(user, getWebclient("Users", null).path(user.getId()));
replaceAttributes, getWebclient("Users", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(user.getId(), StandardCharsets.UTF_8) : user.getId()))
: doUpdate(user, getWebclient("Users", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(user.getId(), StandardCharsets.UTF_8) : user.getId()));
if (node == null) {
SCIMUtils.handleGeneralError("While running update on service");
}
Expand Down Expand Up @@ -810,7 +816,8 @@ protected PagedResults<GT> doGetAllGroups(final WebClient webClient) {

@Override
public void deleteGroup(final String groupId) {
doDeleteGroup(groupId, getWebclient("Groups", null).path(groupId));
doDeleteGroup(groupId, getWebclient("Groups", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(groupId, StandardCharsets.UTF_8) : groupId));
}

@Override
Expand Down Expand Up @@ -878,8 +885,10 @@ protected GT doUpdateGroup(final GT group, final Set<Attribute> replaceAttribute
JsonNode node =
config.getUpdateGroupMethod().equalsIgnoreCase("PATCH") && patch != null
? doUpdatePatch(patch, replaceAttributes,
getWebclient("Groups", null).path(group.getId()))
: doUpdate(group, getWebclient("Groups", null).path(group.getId()));
getWebclient("Groups", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(group.getId(), StandardCharsets.UTF_8) : group.getId()))
: doUpdate(group, getWebclient("Groups", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(group.getId(), StandardCharsets.UTF_8) : group.getId()));
if (node == null) {
SCIMUtils.handleGeneralError("While running update group on service");
}
Expand Down Expand Up @@ -914,7 +923,8 @@ protected JsonNode doUpdate(final GT group, final WebClient webClient) {
String responseEntity = checkServiceErrors(response);
// some servers like Salesforce return empty response on group update with PUT, thus a re-read is needed
result = StringUtil.isNotBlank(responseEntity) ? SCIMUtils.MAPPER.readTree(responseEntity)
: doGet(getWebclient("Groups", null).path(group.getId()));
: doGet(getWebclient("Groups", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(group.getId(), StandardCharsets.UTF_8) : group.getId()));
checkServiceResultErrors(result, response);
} catch (IOException ex) {
LOG.error(ex, "Unable to update entity");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
Expand Down Expand Up @@ -48,7 +50,8 @@ public SCIMv11Client(final SCIMConnectorConfiguration config) {
*/
@Override
public SCIMv11User getUser(final String userId) {
WebClient webClient = getWebclient("Users", null).path(userId);
WebClient webClient = getWebclient("Users", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(userId, StandardCharsets.UTF_8) : userId);
return doGetUser(webClient, SCIMv11User.class, SCIMv11Attribute.class);
}

Expand Down Expand Up @@ -84,7 +87,8 @@ public boolean testService() {

@Override
public SCIMv11Group getGroup(final String groupId) {
return doGetGroup(getWebclient("Groups", null).path(groupId), SCIMv11Group.class);
return doGetGroup(getWebclient("Groups", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(groupId, StandardCharsets.UTF_8) : groupId), SCIMv11Group.class);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Set;
import net.tirasa.connid.bundles.scim.common.SCIMConnectorConfiguration;
Expand Down Expand Up @@ -46,7 +48,8 @@ public SCIMv2Client(final SCIMConnectorConfiguration config) {
*/
@Override
public SCIMv2User getUser(final String userId) {
return doGetUser(getWebclient("Users", null).path(userId), SCIMv2User.class, SCIMv2Attribute.class);
return doGetUser(getWebclient("Users", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(userId, StandardCharsets.UTF_8) : userId), SCIMv2User.class, SCIMv2Attribute.class);
}

/**
Expand Down Expand Up @@ -79,13 +82,15 @@ public SCIMv2User updateUser(final String userId, final SCIMv2Patch userPatch) {

@Override
public SCIMv2Group getGroup(final String groupId) {
return doGetGroup(getWebclient("Groups", null).path(groupId), SCIMv2Group.class);
return doGetGroup(getWebclient("Groups", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(groupId, StandardCharsets.UTF_8) : groupId), SCIMv2Group.class);
}

@Override
public SCIMv2EntitlementResource getEntitlement(final String entitlementId) {
return doGetEntitlement(
getWebclient("Entitlements", null).path(entitlementId), SCIMv2EntitlementResource.class);
return doGetEntitlement(getWebclient("Entitlements", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(entitlementId, StandardCharsets.UTF_8)
: entitlementId), SCIMv2EntitlementResource.class);
}

@Override
Expand All @@ -105,7 +110,8 @@ public SCIMv2Group updateGroup(final SCIMv2Group group, final Set<Attribute> rep

@Override
public void deleteGroup(final String groupId) {
doDeleteGroup(groupId, getWebclient("Groups", null).path(groupId));
doDeleteGroup(groupId, getWebclient("Groups", null).path(config.getEnableParamsURLEncoding()
? URLEncoder.encode(groupId, StandardCharsets.UTF_8) : groupId));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,7 @@ authHttpHeaderName.display=Auth http header name
authHttpHeaderName.help=Specifies the name of the additional header sent on requests containing the authentication information. If empty header won't be added.
authHttpHeaderValue.display=Auth http header value
authHttpHeaderValue.help=The auth http header value to use to authenticate against the server.
enableParamsURLEncoding.display=Enable parameters url encoding
enableParamsURLEncoding.help=Whether to enable url encoding on parameters sent to the SCIM server, for example the user id on user read.


Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,5 @@ authHttpHeaderName.display=Nome header per autenticazione
authHttpHeaderName.help=Specifica il nome dell \u0027header aggiuntivo inviato nelle richieste, contenente informazioni di authenticazione. Se vuota l \u0027header non viene aggiunto.
authHttpHeaderValue.display=Valore http header per l \u0027autenticazione
authHttpHeaderValue.help=Il valore dell \u0027header da usare per l \u0027autenticazione sul server.

enableParamsURLEncoding.display=Abilita url encoding dei parametri di richiesta
enableParamsURLEncoding.help=Specifica se abilitare oppure no l \u0027url encoding dei parametri delle richieste inviate al server SCIM. Per esempio lo user id in fase di lettura utente.
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ public static SCIMConnectorConfiguration buildConfiguration(
break;
}
}
// enable url encoding only for test purposes
connectorConfiguration.setEnableParamsURLEncoding(true);
return connectorConfiguration;
}

Expand Down