@RequestMapping("/myOtherPath.do") public String myOtherHandle(TB tb, BindingResult errors, ExtendedModelMap model, MySpecialArg arg) { TestBean tbReal = (TestBean) tb; tbReal.setName("myName"); assertTrue(model.get("ITestBean") instanceof DerivedTestBean); assertNotNull(arg); return super.myHandle(tbReal, errors, model); }
@Test public void testLoginHintOriginUaaDoubleEncoded() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); ClientServicesExtension clientDetailsService = mockClientService(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest) mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{URLEncoder.encode("{\"origin\":\"uaa\"}", "utf-8")}); endpoint.loginForHtml(model, null, mockHttpServletRequest, Collections.singletonList(MediaType.TEXT_HTML)); assertTrue(model.get("login_hint").equals(URLEncoder.encode("{\"origin\":\"uaa\"}", "utf-8"))); }
@Test public void oauth_provider_links_shown() throws Exception { RawXOAuthIdentityProviderDefinition definition = new RawXOAuthIdentityProviderDefinition(); definition.setAuthUrl(new URL("http://auth.url")); definition.setTokenUrl(new URL("http://token.url")); IdentityProvider<AbstractXOAuthIdentityProviderDefinition> identityProvider = MultitenancyFixture.identityProvider("oauth-idp-alias", "uaa"); identityProvider.setConfig(definition); when(identityProviderProvisioning.retrieveAll(anyBoolean(), anyString())).thenReturn(Collections.singletonList(identityProvider)); LoginInfoEndpoint endpoint = getEndpoint(); endpoint.loginForHtml(model, null, new MockHttpServletRequest(), Collections.singletonList(MediaType.TEXT_HTML)); assertThat(model.get(SHOW_LOGIN_LINKS), equalTo(true)); }
@Test public void testLoginHintOriginOidcForJson() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); ClientServicesExtension clientDetailsService = mockClientService(); mockOidcProvider(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest)mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{"{\"origin\":\"my-OIDC-idp1\"}"}); endpoint.infoForLoginJson(model, null, mockHttpServletRequest); assertNotNull(model.get("prompts")); assertTrue(model.get("prompts") instanceof Map); Map<String, String[]> returnedPrompts = (Map<String, String[]>)model.get("prompts"); assertEquals(3, returnedPrompts.size()); }
@Test public void testGetPromptsFromNonExistentProvider() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); mockHttpServletRequest.setParameter("origin", "non-OIDC"); LoginInfoEndpoint endpoint = getEndpoint(); when(identityProviderProvisioning.retrieveByOrigin("non-OIDC", "uaa")).thenThrow(mock(DataAccessException.class)); ClientServicesExtension clientDetailsService = mockClientService(); endpoint.setClientDetailsService(clientDetailsService); endpoint.infoForLoginJson(model, null, mockHttpServletRequest); assertNotNull(model.get("prompts")); assertTrue(model.get("prompts") instanceof Map); Map<String, String[]> returnedPrompts = (Map<String, String[]>)model.get("prompts"); assertEquals(2, returnedPrompts.size()); assertNotNull(returnedPrompts.get("username")); assertEquals("Email", returnedPrompts.get("username")[1]); assertNotNull(returnedPrompts.get("password")); assertEquals("Password", returnedPrompts.get("password")[1]); }
@Test public void testLoginHintOriginUaa() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); ClientServicesExtension clientDetailsService = mockClientService(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest) mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{"{\"origin\":\"uaa\"}"}); endpoint.loginForHtml(model, null, mockHttpServletRequest, Collections.singletonList(MediaType.TEXT_HTML)); assertTrue(model.get("login_hint").equals("{\"origin\":\"uaa\"}")); }
@Test public void testLoginHintOriginInvalid() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); ClientServicesExtension clientDetailsService = mockClientService(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest) mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{"{\"origin\":\"my-OIDC-idp1\"}"}); endpoint.loginForHtml(model, null, mockHttpServletRequest, Arrays.asList(MediaType.TEXT_HTML)); assertTrue(model.get("error").equals("invalid_login_hint")); }
@Test public void passcode_prompt_present_whenThereIsAtleastOneActiveOauthProvider() throws Exception { RawXOAuthIdentityProviderDefinition definition = new RawXOAuthIdentityProviderDefinition() .setAuthUrl(new URL("http://auth.url")) .setTokenUrl(new URL("http://token.url")); IdentityProvider<AbstractXOAuthIdentityProviderDefinition> identityProvider = MultitenancyFixture.identityProvider("oauth-idp-alias", "uaa"); identityProvider.setConfig(definition); when(identityProviderProvisioning.retrieveAll(anyBoolean(), anyString())).thenReturn(Collections.singletonList(identityProvider)); LoginInfoEndpoint endpoint = getEndpoint(); endpoint.infoForLoginJson(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl())); Map mapPrompts = (Map) model.get("prompts"); assertNotNull(mapPrompts.get("passcode")); }
@Test public void testDefaultProviderOIDCLoginForJson() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); ClientServicesExtension clientDetailsService = mockClientService(); mockOidcProvider(); IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("my-OIDC-idp1"); endpoint.setClientDetailsService(clientDetailsService); endpoint.infoForLoginJson(model, null, mockHttpServletRequest); assertNotNull(model.get("prompts")); assertTrue(model.get("prompts") instanceof Map); Map<String, String[]> returnedPrompts = (Map<String, String[]>)model.get("prompts"); assertEquals(3, returnedPrompts.size()); }
@Test public void testLoginHintOriginOidc() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); ClientServicesExtension clientDetailsService = mockClientService(); mockOidcProvider(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest) mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{"{\"origin\":\"my-OIDC-idp1\"}"}); String redirect = endpoint.loginForHtml(model, null, mockHttpServletRequest, Arrays.asList(MediaType.TEXT_HTML)); assertThat(redirect, startsWith("redirect:http://localhost:8080/uaa")); assertThat(redirect, containsString("my-OIDC-idp1")); assertNull(model.get("login_hint")); }
@Test public void discoverIdentityProviderWritesLoginHintIfOnlyUaa() throws Exception { LoginInfoEndpoint endpoint = getEndpoint(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpSession session = new MockHttpSession(); UaaIdentityProviderDefinition uaaConfig = new UaaIdentityProviderDefinition(); uaaConfig.setEmailDomain(Collections.singletonList("fake.com")); uaaProvider.setConfig(uaaConfig); uaaProvider.setType(OriginKeys.UAA); when(identityProviderProvisioning.retrieveActive("uaa")).thenReturn(Collections.singletonList(uaaProvider)); endpoint.discoverIdentityProvider("testuser@fake.com", null, null, model, session, request); String loginHint = "{\"origin\":\"uaa\"}"; assertEquals(loginHint, model.get("login_hint")); }
public void mfa_prompt(IdentityZone zone) throws Exception { zone.getConfig().getMfaConfig().setEnabled(true); IdentityZoneHolder.set(zone); String baseUrl = check_links_urls(zone); Map mapPrompts = (Map) model.get("prompts"); assertNotNull(mapPrompts.get("mfaCode")); assertEquals( "MFA Code ( Register at "+addSubdomainToUrl(baseUrl) + " )", ((String[])mapPrompts.get("mfaCode"))[1] ); } @Test
@Test public void no_usernamePasswordBoxes_if_internalAuth_and_ldap_disabled() throws Exception { when(mockIDPConfigurator.getIdentityProviderDefinitions(anyList(), any())).thenReturn(idps); IdentityProvider ldapIdentityProvider = new IdentityProvider(); ldapIdentityProvider.setActive(false); when(identityProviderProvisioning.retrieveByOrigin(OriginKeys.LDAP, "uaa")).thenReturn(ldapIdentityProvider); IdentityProvider uaaIdentityProvider = new IdentityProvider(); uaaIdentityProvider.setActive(false); when(identityProviderProvisioning.retrieveByOrigin(OriginKeys.UAA, "uaa")).thenReturn(uaaIdentityProvider); LoginInfoEndpoint endpoint = getEndpoint(); endpoint.setIdpDefinitions(mockIDPConfigurator); endpoint.loginForHtml(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl()), null); assertFalse((Boolean) model.get("fieldUsernameShow")); }
@Test public void saml_links_for_html() throws Exception { LoginInfoEndpoint endpoint = getEndpoint(); endpoint.setIdpDefinitions(mockIDPConfigurator); endpoint.loginForHtml(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl()), null); Map<String, Object> links = (Map<String, Object>) model.asMap().get("links"); assertNotNull(links); assertEquals("http://someurl", links.get("login")); assertTrue(model.get(LoginInfoEndpoint.IDP_DEFINITIONS) instanceof Collection); }
@Test public void testLoginHintLdapOverridesDefaultProviderUaa() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("uaa"); ClientServicesExtension clientDetailsService = mockClientService(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest) mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{"{\"origin\":\"ldap\"}"}); String redirect = endpoint.loginForHtml(model, null, mockHttpServletRequest, Arrays.asList(MediaType.TEXT_HTML)); assertEquals("{\"origin\":\"ldap\"}", model.get("login_hint")); assertEquals("login", redirect); }
@Test public void discoverIdentityProviderCarriesLoginHintIfProvided() throws Exception { LoginInfoEndpoint endpoint = getEndpoint(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpSession session = new MockHttpSession(); String loginHint = "{\"origin\":\"my-OIDC-idp1\"}"; endpoint.discoverIdentityProvider("testuser@fake.com", "true", loginHint, model, session, request); assertEquals(loginHint, model.get("login_hint")); }
@Test public void testLoginHintOriginUaaSkipAccountChooser() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); ClientServicesExtension clientDetailsService = mockClientService(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest) mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{"{\"origin\":\"uaa\"}"}); IdentityZoneHolder.get().getConfig().setIdpDiscoveryEnabled(true); IdentityZoneHolder.get().getConfig().setAccountChooserEnabled(true); String redirect = endpoint.loginForHtml(model, null, mockHttpServletRequest, Collections.singletonList(MediaType.TEXT_HTML)); assertTrue(model.get("login_hint").equals("{\"origin\":\"uaa\"}")); assertEquals("idp_discovery/password", redirect); }
@Test public void discoverIdentityProviderCarriesEmailIfProvided() throws Exception { LoginInfoEndpoint endpoint = getEndpoint(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpSession session = new MockHttpSession(); endpoint.discoverIdentityProvider("testuser@fake.com", "true", null, model, session, request); assertEquals(model.get("email"), "testuser@fake.com"); }
@Test public void testLoginHintOverridesDefaultProvider() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("uaa"); ClientServicesExtension clientDetailsService = mockClientService(); mockOidcProvider(); endpoint.setClientDetailsService(clientDetailsService); SavedRequest savedRequest = (SavedRequest) mockHttpServletRequest.getSession().getAttribute(SAVED_REQUEST_SESSION_ATTRIBUTE); when(savedRequest.getParameterValues("login_hint")).thenReturn(new String[]{"{\"origin\":\"my-OIDC-idp1\"}"}); String redirect = endpoint.loginForHtml(model, null, mockHttpServletRequest, Arrays.asList(MediaType.TEXT_HTML)); assertThat(redirect, startsWith("redirect:http://localhost:8080/uaa")); assertThat(redirect, containsString("my-OIDC-idp1")); assertNull(model.get("login_hint")); }
@Test public void testDefaultProviderUaa() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("uaa"); ClientServicesExtension clientDetailsService = mockClientService(); endpoint.setClientDetailsService(clientDetailsService); String redirect = endpoint.loginForHtml(model, null, mockHttpServletRequest, Collections.singletonList(MediaType.TEXT_HTML)); assertEquals("login", redirect); assertEquals("{\"origin\":\"uaa\"}",model.get("login_hint")); }