Skip to content

Commit d986d09

Browse files
[SCIM-42] add support for auth http header (#138)
1 parent 912c3df commit d986d09

File tree

6 files changed

+57
-1
lines changed

6 files changed

+57
-1
lines changed

src/main/java/net/tirasa/connid/bundles/scim/common/SCIMConnectorConfiguration.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ public class SCIMConnectorConfiguration extends AbstractConfiguration implements
9797
private boolean requestAttributesOnSearch = true;
9898

9999
private boolean useColonOnExtensionAttributes = true;
100+
101+
private String authHttpHeaderName;
102+
103+
private GuardedString authHttpHeaderValue;
100104

101105
@ConfigurationProperty(order = 1,
102106
displayMessageKey = "baseAddress.display",
@@ -403,6 +407,29 @@ public void setUseColonOnExtensionAttributes(final boolean useColonOnExtensionAt
403407
this.useColonOnExtensionAttributes = useColonOnExtensionAttributes;
404408
}
405409

410+
@ConfigurationProperty(displayMessageKey = "authHttpHeaderName.display",
411+
helpMessageKey = "authHttpHeaderName.help",
412+
order = 29)
413+
public String getAuthHttpHeaderName() {
414+
return authHttpHeaderName;
415+
}
416+
417+
public void setAuthHttpHeaderName(final String authHttpHeaderName) {
418+
this.authHttpHeaderName = authHttpHeaderName;
419+
}
420+
421+
@ConfigurationProperty(displayMessageKey = "authHttpHeaderValue.display",
422+
helpMessageKey = "authHttpHeaderValue.help",
423+
order = 30,
424+
confidential = true)
425+
public GuardedString getAuthHttpHeaderValue() {
426+
return authHttpHeaderValue;
427+
}
428+
429+
public void setAuthHttpHeaderValue(final GuardedString authHttpHeaderValue) {
430+
this.authHttpHeaderValue = authHttpHeaderValue;
431+
}
432+
406433
@Override
407434
public void validate() {
408435
if (StringUtil.isBlank(baseAddress)) {
@@ -469,6 +496,11 @@ public void validate() {
469496
if (StringUtil.isNotBlank(proxyServerPassword) && StringUtil.isBlank(proxyServerUser)) {
470497
failValidation("Proxy server user cannot be null or empty if password is specified.");
471498
}
499+
500+
if ((StringUtil.isNotBlank(authHttpHeaderName) && authHttpHeaderValue == null) || (
501+
StringUtil.isBlank(authHttpHeaderName) && authHttpHeaderValue != null)) {
502+
failValidation("If provided both auth http header value and auth http header name must be set.");
503+
}
472504
}
473505

474506
@Override

src/main/java/net/tirasa/connid/bundles/scim/common/service/AbstractSCIMService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ protected WebClient getWebclient(final String path, final Map<String, String> pa
118118
conduit.setClient(policy);
119119
}
120120

121+
// include additional api key header if requested by configuration
122+
if (StringUtil.isNotBlank(config.getAuthHttpHeaderName())) {
123+
webClient.header(config.getAuthHttpHeaderName(), SecurityUtil.decrypt(config.getAuthHttpHeaderValue()));
124+
}
125+
121126
webClient.type(config.getContentType()).accept(config.getAccept()).path(path);
122127

123128
Optional.ofNullable(params).ifPresent(p -> p.forEach((k, v) -> webClient.query(k, v)));
@@ -492,7 +497,7 @@ protected <T extends SCIMBaseAttribute<T>> void readCustomAttributes(
492497
}
493498

494499
protected <T extends SCIMBaseAttribute<T>> List<Object> extractValuesFromJsonNode(
495-
final T attr,
500+
final T attr,
496501
final JsonNode arrayNode) {
497502
List<Object> values = new ArrayList<>();
498503
for (JsonNode element : arrayNode) {

src/main/resources/net/tirasa/connid/bundles/scim/common/Messages.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,8 @@ requestAttributesOnSearch.display=Request attributes while searching
7575
requestAttributesOnSearch.help=Specifies whether to request 'attributes' while searching. Defaults to true, but may be set to false, to comply with some providers like Egnyte.
7676
useColonOnExtensionAttributes.display=Use colon for extension attributes
7777
useColonOnExtensionAttributes.help=Specifies whether to use colon ':' to separate the attribute name from the extension schema URI definition, e.g. urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager.value. Defaults to true, according to the SCIM specification, but may be set to false, to comply with some providers.
78+
authHttpHeaderName.display=Auth http header name
79+
authHttpHeaderName.help=Specifies the name of the additional header sent on requests containing the authentication information. If empty header won't be added.
80+
authHttpHeaderValue.display=Auth http header value
81+
authHttpHeaderValue.help=The auth http header value to use to authenticate against the server.
82+

src/main/resources/net/tirasa/connid/bundles/scim/common/Messages_it.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,8 @@ requestAttributesOnSearch.display=Richiedi gli attributi in ricerca
7575
requestAttributesOnSearch.help=Specifica se richiedere gli attributi tramite parametro 'attributes' durante la ricerca. Il valore di default \u00e8 true, ma pu\u00f2 essere settato a false, se necessario, per integrarsi con provider come Egnyte.
7676
useColonOnExtensionAttributes.display=Usa i due punti per gli attributi estesi
7777
useColonOnExtensionAttributes.help=Specifica se usare i due punti ':' per separare il nome dell'attributo dalla definizione dello schema estensione, ad es. urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager.value. Il valore di default \u00e8 true, secondo specifica SCIM, ma pu\u00f2 essere settato a false, se necessario, per integrarsi con i vari provider.
78+
authHttpHeaderName.display=Nome header per autenticazione
79+
authHttpHeaderName.help=Specifica il nome dell \u0027header aggiuntivo inviato nelle richieste, contenente informazioni di authenticazione. Se vuota l \u0027header non viene aggiunto.
80+
authHttpHeaderValue.display=Valore http header per l \u0027autenticazione
81+
authHttpHeaderValue.help=Il valore dell \u0027header da usare per l \u0027autenticazione sul server.
82+

src/test/java/net/tirasa/connid/bundles/scim/v2/SCIMv2ConnectorTestsUtils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ public static SCIMConnectorConfiguration buildConfiguration(
135135
case "auth.genericComplexType":
136136
connectorConfiguration.setGenericComplexType(entry.getValue());
137137
break;
138+
case "auth.authHttpHeaderName":
139+
connectorConfiguration.setAuthHttpHeaderName(entry.getValue());
140+
break;
141+
case "auth.authHttpHeaderValue":
142+
connectorConfiguration.setAuthHttpHeaderValue(new GuardedString(entry.getValue().toCharArray()));
143+
break;
138144
default:
139145
LOG.info("Occurrence of an non defined parameter");
140146
break;

src/test/resources/net/tirasa/connid/bundles/scim/authv2.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,6 @@ auth.customDeltaAttributesKeys=urn:mem:params:scim:schemas:extension:LuckyNumber
3939
auth.customDeltaAttributesValues=12345
4040
# other schemas you want to add and retrieve to and from entities
4141
auth.otherSchemas=urn:mem:params:scim:schemas:extension:LuckyNumberExtension
42+
auth.authHttpHeaderName=apikey
43+
auth.authHttpHeaderValue=abcd12345!
44+

0 commit comments

Comments
 (0)