/**
* Copyright (c) Codice Foundation
* <p>
* This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
* General Public License as published by the Free Software Foundation, either version 3 of the
* License, or any later version.
* <p>
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. A copy of the GNU Lesser General Public License
* is distributed along with this program and can be found at
* <http://www.gnu.org/licenses/lgpl.html>.
*/
package org.codice.ddf.security.claims.certificate;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import java.net.URI;
import java.net.URISyntaxException;
import java.security.Principal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.cxf.rt.security.claims.Claim;
import org.apache.cxf.rt.security.claims.ClaimCollection;
import org.apache.cxf.sts.claims.ClaimsParameters;
import org.apache.cxf.sts.claims.ProcessedClaimCollection;
import org.junit.Test;
import ddf.security.SubjectUtils;
public class CertificateClaimsHandlerTest {
private ClaimCollection getClaims() throws URISyntaxException {
ClaimCollection claims = new ClaimCollection();
Claim claim = new Claim();
claim.setClaimType(new URI(SubjectUtils.COUNTRY_CLAIM_URI));
claims.add(claim);
Claim claim1 = new Claim();
claim1.setClaimType(new URI(SubjectUtils.EMAIL_ADDRESS_CLAIM_URI));
claims.add(claim1);
return claims;
}
@Test
public void testGetSupportedClaimTypes() throws URISyntaxException {
CertificateClaimsHandler certificateClaimsHandler = new CertificateClaimsHandler();
List<URI> supportedClaimTypes = certificateClaimsHandler.getSupportedClaimTypes();
assertThat(supportedClaimTypes.size(), is(2));
}
@Test
public void testRetrieveClaimValuesNoCertValues() throws URISyntaxException {
CertificateClaimsHandler certificateClaimsHandler = new CertificateClaimsHandler();
ClaimCollection claims = getClaims();
ClaimsParameters parameters = new ClaimsParameters();
parameters.setPrincipal(mock(Principal.class));
ProcessedClaimCollection processedClaims = certificateClaimsHandler.retrieveClaimValues(
claims,
parameters);
assertThat(processedClaims.size(), is(0));
}
@Test
public void testRetrieveClaimValuesWithCertValues() throws URISyntaxException {
CertificateClaimsHandler certificateClaimsHandler = new CertificateClaimsHandler();
ClaimCollection claims = getClaims();
ClaimsParameters parameters = new ClaimsParameters();
parameters.setPrincipal(mock(Principal.class));
Map<String, Object> map = new HashMap<>();
map.put(SubjectUtils.EMAIL_ADDRESS_CLAIM_URI, "local@localhost");
map.put(SubjectUtils.COUNTRY_CLAIM_URI, "USA");
parameters.setAdditionalProperties(map);
ProcessedClaimCollection processedClaims = certificateClaimsHandler.retrieveClaimValues(
claims,
parameters);
assertThat(processedClaims.size(), is(2));
assertThat(processedClaims.stream()
.map(c -> c.getClaimType()
.toString())
.collect(Collectors.toList()),
containsInAnyOrder(SubjectUtils.EMAIL_ADDRESS_CLAIM_URI,
SubjectUtils.COUNTRY_CLAIM_URI));
}
@Test
public void testRetrieveClaimValuesWithAltNamesRequested() throws URISyntaxException {
CertificateClaimsHandler certificateClaimsHandler = new CertificateClaimsHandler();
certificateClaimsHandler.setCountryClaim("Country");
certificateClaimsHandler.setEmailClaim("Email");
ClaimCollection claims = new ClaimCollection();
Claim claim = new Claim();
claim.setClaimType(new URI("Country"));
claims.add(claim);
Claim claim1 = new Claim();
claim1.setClaimType(new URI("Email"));
claims.add(claim1);
ClaimsParameters parameters = new ClaimsParameters();
parameters.setPrincipal(mock(Principal.class));
Map<String, Object> map = new HashMap<>();
map.put(SubjectUtils.EMAIL_ADDRESS_CLAIM_URI, "local@localhost");
map.put(SubjectUtils.COUNTRY_CLAIM_URI, "USA");
parameters.setAdditionalProperties(map);
ProcessedClaimCollection processedClaims = certificateClaimsHandler.retrieveClaimValues(
claims,
parameters);
assertThat(processedClaims.size(), is(2));
assertThat(processedClaims.stream()
.map(c -> c.getClaimType()
.toString())
.collect(Collectors.toList()), containsInAnyOrder("Email", "Country"));
}
@Test
public void testRetrieveClaimValuesWithAltNamesNotRequested() throws URISyntaxException {
CertificateClaimsHandler certificateClaimsHandler = new CertificateClaimsHandler();
certificateClaimsHandler.setCountryClaim("Country");
certificateClaimsHandler.setEmailClaim("Email");
ClaimCollection claims = getClaims();
ClaimsParameters parameters = new ClaimsParameters();
parameters.setPrincipal(mock(Principal.class));
Map<String, Object> map = new HashMap<>();
map.put(SubjectUtils.EMAIL_ADDRESS_CLAIM_URI, "local@localhost");
map.put(SubjectUtils.COUNTRY_CLAIM_URI, "USA");
parameters.setAdditionalProperties(map);
ProcessedClaimCollection processedClaims = certificateClaimsHandler.retrieveClaimValues(
claims,
parameters);
assertThat(processedClaims.size(), is(0));
}
@Test
public void testRetrieveClaimValuesWithEmail() throws URISyntaxException {
CertificateClaimsHandler certificateClaimsHandler = new CertificateClaimsHandler();
ClaimCollection claims = getClaims();
ClaimsParameters parameters = new ClaimsParameters();
parameters.setPrincipal(mock(Principal.class));
Map<String, Object> map = new HashMap<>();
map.put(SubjectUtils.EMAIL_ADDRESS_CLAIM_URI, "local@localhost");
parameters.setAdditionalProperties(map);
ProcessedClaimCollection processedClaims = certificateClaimsHandler.retrieveClaimValues(
claims,
parameters);
assertThat(processedClaims.size(), is(1));
assertThat(processedClaims.stream()
.map(c -> c.getClaimType()
.toString())
.collect(Collectors.toList()),
containsInAnyOrder(SubjectUtils.EMAIL_ADDRESS_CLAIM_URI));
}
@Test
public void testRetrieveClaimValuesWithCountry() throws URISyntaxException {
CertificateClaimsHandler certificateClaimsHandler = new CertificateClaimsHandler();
ClaimCollection claims = getClaims();
ClaimsParameters parameters = new ClaimsParameters();
parameters.setPrincipal(mock(Principal.class));
Map<String, Object> map = new HashMap<>();
map.put(SubjectUtils.COUNTRY_CLAIM_URI, "USA");
parameters.setAdditionalProperties(map);
ProcessedClaimCollection processedClaims = certificateClaimsHandler.retrieveClaimValues(
claims,
parameters);
assertThat(processedClaims.size(), is(1));
assertThat(processedClaims.stream()
.map(c -> c.getClaimType()
.toString())
.collect(Collectors.toList()),
containsInAnyOrder(SubjectUtils.COUNTRY_CLAIM_URI));
}
}