package org.apereo.cas.authentication; import org.apereo.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler; import org.apereo.cas.authentication.principal.DefaultPrincipalFactory; import org.apereo.cas.authentication.principal.Principal; import org.apereo.cas.authentication.principal.Service; import org.apereo.cas.services.RegisteredService; import org.apereo.cas.services.RegisteredServiceAccessStrategy; import org.apereo.services.persondir.IPersonAttributeDao; import org.apereo.services.persondir.support.StubPersonAttributeDao; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.mockito.Mockito.*; /** * @author Scott Battaglia * @since 3.0.0.2 */ public final class CoreAuthenticationTestUtils { public static final String CONST_USERNAME = "test"; public static final String CONST_TEST_URL = "https://google.com"; public static final String CONST_GOOD_URL = "https://github.com/"; private static final String CONST_PASSWORD = "test1"; private static final DefaultPrincipalFactory PRINCIPAL_FACTORY = new DefaultPrincipalFactory(); private CoreAuthenticationTestUtils() { // do not instantiate } public static UsernamePasswordCredential getCredentialsWithSameUsernameAndPassword() { return getCredentialsWithSameUsernameAndPassword(CONST_USERNAME); } public static UsernamePasswordCredential getCredentialsWithSameUsernameAndPassword(final String username) { return getCredentialsWithDifferentUsernameAndPassword(username, username); } public static UsernamePasswordCredential getCredentialsWithDifferentUsernameAndPassword() { return getCredentialsWithDifferentUsernameAndPassword(CONST_USERNAME, CONST_PASSWORD); } public static UsernamePasswordCredential getCredentialsWithDifferentUsernameAndPassword(final String username, final String password) { final UsernamePasswordCredential usernamePasswordCredentials = new UsernamePasswordCredential(); usernamePasswordCredentials.setUsername(username); usernamePasswordCredentials.setPassword(password); return usernamePasswordCredentials; } public static HttpBasedServiceCredential getHttpBasedServiceCredentials() { return getHttpBasedServiceCredentials(CONST_GOOD_URL); } public static HttpBasedServiceCredential getHttpBasedServiceCredentials(final String url) { try { return new HttpBasedServiceCredential(new URL(url), CoreAuthenticationTestUtils.getRegisteredService(url)); } catch (final MalformedURLException e) { throw new IllegalArgumentException(); } } public static Service getService(final String id) { final Service svc = mock(Service.class); when(svc.getId()).thenReturn(id); when(svc.matches(any(Service.class))).thenReturn(true); return svc; } public static Service getService() { return getService(CONST_TEST_URL); } public static IPersonAttributeDao getAttributeRepository() { final Map<String, List<Object>> attributes = new HashMap<>(); attributes.put("uid", Collections.singletonList(CONST_USERNAME)); attributes.put("cn", Collections.singletonList(CONST_USERNAME.toUpperCase())); attributes.put("givenName", Collections.singletonList(CONST_USERNAME)); attributes.put("memberOf", Arrays.asList("system", "admin", "cas")); return new StubPersonAttributeDao(attributes); } public static Principal getPrincipal() { return getPrincipal(CONST_USERNAME); } public static Principal getPrincipal(final String name) { return getPrincipal(name, Collections.emptyMap()); } public static Principal getPrincipal(final String name, final Map<String, Object> attributes) { return new DefaultPrincipalFactory().createPrincipal(name, attributes); } public static Authentication getAuthentication() { return getAuthentication(CONST_USERNAME); } public static Authentication getAuthentication(final String name) { return getAuthentication(getPrincipal(name)); } public static Authentication getAuthentication(final Principal principal) { return getAuthentication(principal, Collections.emptyMap()); } public static Authentication getAuthentication(final Principal principal, final Map<String, Object> attributes) { final AuthenticationHandler handler = new SimpleTestUsernamePasswordAuthenticationHandler(); final CredentialMetaData meta = new BasicCredentialMetaData(new UsernamePasswordCredential()); return new DefaultAuthenticationBuilder(principal) .addCredential(meta) .addSuccess("testHandler", new DefaultHandlerResult(handler, meta)) .setAttributes(attributes) .build(); } public static RegisteredService getRegisteredService() { return getRegisteredService(CONST_TEST_URL); } public static RegisteredService getRegisteredService(final String url) { final RegisteredService service = mock(RegisteredService.class); when(service.getServiceId()).thenReturn(url); when(service.getName()).thenReturn("service name"); when(service.getId()).thenReturn(Long.MAX_VALUE); when(service.getDescription()).thenReturn("service description"); final RegisteredServiceAccessStrategy access = mock(RegisteredServiceAccessStrategy.class); when(access.isServiceAccessAllowed()).thenReturn(true); when(service.getAccessStrategy()).thenReturn(access); return service; } public static AuthenticationResult getAuthenticationResult(final AuthenticationSystemSupport support, final Service service) throws AuthenticationException { return getAuthenticationResult(support, service, getCredentialsWithSameUsernameAndPassword()); } public static AuthenticationResult getAuthenticationResult(final AuthenticationSystemSupport support) throws AuthenticationException { return getAuthenticationResult(support, getService(), getCredentialsWithSameUsernameAndPassword()); } public static AuthenticationResult getAuthenticationResult(final AuthenticationSystemSupport support, final Credential... credentials) throws AuthenticationException { return getAuthenticationResult(support, getService(), credentials); } public static AuthenticationResult getAuthenticationResult(final AuthenticationSystemSupport support, final Service service, final Credential... credentials) throws AuthenticationException { return support.handleAndFinalizeSingleAuthenticationTransaction(service, credentials); } public static Principal mockPrincipal(final String attrName, final String... attrValues) { return PRINCIPAL_FACTORY.createPrincipal("user", Collections.singletonMap(attrName, attrValues.length == 1 ? attrValues[0] : Arrays.asList(attrValues))); } }