private Model initModel() { if (this.model == null) { this.model = new ExtendedModelMap(); } return this.model; }
@Override public void putAll(Map<? extends String, ?> map) { map.forEach(this::removeBindingResultIfNecessary); super.putAll(map); }
@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 testGetSystemConfiguration() { ExtendedModelMap model = new ExtendedModelMap(); controller.getOne(model); assertThat(model.containsAttribute("content"), is(true)); }
private WebDataBinder resolveModelAttribute(String attrName, MethodParameter methodParam, ExtendedModelMap implicitModel, NativeWebRequest webRequest, Object handler) throws Exception { // Bind request parameter onto object... if ("".equals(attrName)) { attrName = Conventions.getVariableNameForParameter(methodParam); } Class paramType = methodParam.getParameterType(); if (!implicitModel.containsKey(attrName) && this.methodResolver.isSessionAttribute(attrName, paramType)) { Object sessionAttr = this.sessionAttributeStore.retrieveAttribute( webRequest, attrName); if (sessionAttr == null) { raiseSessionRequiredException("Session attribute '" + attrName + "' required - not found in session"); } implicitModel.addAttribute(attrName, sessionAttr); } Object bindObject = implicitModel.get(attrName); if (bindObject == null) { bindObject = BeanUtils.instantiateClass(paramType); } WebDataBinder binder = createBinder(webRequest, bindObject, attrName); initBinder(handler, attrName, binder, webRequest); return binder; }
@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); }
private WebDataBinder resolveModelAttribute(String attrName, MethodParameter methodParam, ExtendedModelMap implicitModel, NativeWebRequest webRequest, Object handler) throws Exception { // Bind request parameter onto object... String name = attrName; if ("".equals(name)) { name = Conventions.getVariableNameForParameter(methodParam); } Class<?> paramType = methodParam.getParameterType(); Object bindObject; if (implicitModel.containsKey(name)) { bindObject = implicitModel.get(name); } else if (this.methodResolver.isSessionAttribute(name, paramType)) { bindObject = this.sessionAttributeStore.retrieveAttribute(webRequest, name); if (bindObject == null) { raiseSessionRequiredException("Session attribute '" + name + "' required - not found in session"); } } else { bindObject = BeanUtils.instantiateClass(paramType); } WebDataBinder binder = createBinder(webRequest, bindObject, name); initBinder(handler, name, binder, webRequest); return binder; }
LoginInfoEndpoint endpoint = getEndpoint(); endpoint.loginForHtml(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl()), singletonList(MediaType.TEXT_HTML)); assertNotNull("prompts attribute should be present", model.get("prompts")); assertTrue("prompts should be a Map for Html content", model.get("prompts") instanceof Map); Map mapPrompts = (Map)model.get("prompts"); assertEquals("there should be two prompts for html", 2, mapPrompts.size()); assertNotNull(mapPrompts.get("username")); model.clear(); endpoint.infoForJson(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl())); assertNotNull("prompts attribute should be present", model.get("prompts")); assertTrue("prompts should be a Map for JSON content", model.get("prompts") instanceof Map); mapPrompts = (Map)model.get("prompts"); assertEquals("there should be two prompts for html", 3, mapPrompts.size()); assertNotNull(mapPrompts.get("username")); model.clear(); when(mockIDPConfigurator.getIdentityProviderDefinitions((List<String>) isNull(), eq(IdentityZone.getUaa()))).thenReturn(idps); endpoint.setIdpDefinitions(mockIDPConfigurator); endpoint.infoForJson(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl())); assertNotNull("prompts attribute should be present", model.get("prompts")); assertTrue("prompts should be a Map for JSON content", model.get("prompts") instanceof Map); mapPrompts = (Map)model.get("prompts"); assertEquals("there should be three prompts for html", 4, mapPrompts.size()); assertNotNull(mapPrompts.get("username")); model.clear(); endpoint.infoForJson(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl())); assertNotNull("prompts attribute should be present", model.get("prompts"));
if (isSessionAttr) { if (this.sessionStatus.isComplete()) { implicitModel.put(MODEL_KEY_PREFIX_STALE + attrName, Boolean.TRUE); else if (!implicitModel.containsKey(MODEL_KEY_PREFIX_STALE + attrName)) { this.sessionAttributeStore.storeAttribute(webRequest, attrName, attrValue);
@Override public Object put(String key, Object value) { removeBindingResultIfNecessary(key, value); return super.put(key, value); }
@Test public void testLoginReturnsSystemZone() throws Exception { LoginInfoEndpoint endpoint = getEndpoint(); assertFalse(model.containsAttribute("zone_name")); endpoint.loginForHtml(model, null, new MockHttpServletRequest(), Collections.singletonList(MediaType.TEXT_HTML)); assertEquals(OriginKeys.UAA, model.asMap().get("zone_name")); }
Object attrValue = this.sessionAttributeStore.retrieveAttribute(webRequest, attrName); if (attrValue != null) { implicitModel.addAttribute(attrName, attrValue); if (!"".equals(attrName) && implicitModel.containsAttribute(attrName)) { continue; attrName = Conventions.getVariableNameForReturnType(attributeMethodToInvoke, resolvedType, attrValue); if (!implicitModel.containsAttribute(attrName)) { implicitModel.addAttribute(attrName, attrValue);
@Test public void testDefaultProviderLdapWithAllowedOnlyOIDC() throws Exception { MockHttpServletRequest mockHttpServletRequest = getMockHttpServletRequest(); LoginInfoEndpoint endpoint = getEndpoint(); List<String> allowedProviders = Collections.singletonList("my-OIDC-idp1"); // mock Client service BaseClientDetails clientDetails = new BaseClientDetails(); clientDetails.setClientId("client-id"); clientDetails.addAdditionalInformation(ClientConstants.ALLOWED_PROVIDERS, new LinkedList<>(allowedProviders)); ClientServicesExtension clientDetailsService = mock(ClientServicesExtension.class); when(clientDetailsService.loadClientByClientId("client-id", "uaa")).thenReturn(clientDetails); mockOidcProvider(); IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("ldap"); endpoint.setClientDetailsService(clientDetailsService); 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")); assertFalse(model.containsKey("login_hint")); }
@Test public void saml_links_for_json() throws Exception { LoginInfoEndpoint endpoint = getEndpoint(); endpoint.setIdpDefinitions(mockIDPConfigurator); when(mockIDPConfigurator.getIdentityProviderDefinitions(any(), any())).thenReturn(idps); endpoint.setIdpDefinitions(mockIDPConfigurator); endpoint.infoForJson(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl())); Map<String, Object> links = (Map<String, Object>) model.asMap().get("links"); assertEquals("http://someurl", links.get("login")); assertTrue(model.get(LoginInfoEndpoint.IDP_DEFINITIONS) instanceof Map); Map<String,String> idpDefinitions = (Map<String,String>)model.get(LoginInfoEndpoint.IDP_DEFINITIONS); for (SamlIdentityProviderDefinition def : idps) { assertEquals( "http://someurl/saml/discovery?returnIDParam=idp&entityID=" + endpoint.getZonifiedEntityId() + "&idp="+def.getIdpEntityAlias()+"&isPassive=true", idpDefinitions.get(def.getIdpEntityAlias()) ); } }
@Override public Object put(String key, Object value) { removeBindingResultIfNecessary(key, value); return super.put(key, value); }
@Test public void testLoginReturnsOtherZone() throws Exception { IdentityZone zone = new IdentityZone(); zone.setName("some_other_zone"); zone.setId("other-zone-id"); zone.setSubdomain(zone.getName()); IdentityZoneHolder.set(zone); LoginInfoEndpoint endpoint = getEndpoint(); assertFalse(model.containsAttribute("zone_name")); endpoint.loginForHtml(model, null, new MockHttpServletRequest(), Collections.singletonList(MediaType.TEXT_HTML)); assertEquals("some_other_zone", model.asMap().get("zone_name")); }
@Test public void handleModelReturnValue() throws Exception { mavContainer.addAttribute("attr1", "value1"); Model returnValue = new ExtendedModelMap(); returnValue.addAttribute("attr2", "value2"); processor.handleReturnValue(returnValue , returnParamModel, mavContainer, webRequest); assertEquals("value1", mavContainer.getModel().get("attr1")); assertEquals("value2", mavContainer.getModel().get("attr2")); }
@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"))); }
@Override public void putAll(Map<? extends String, ?> map) { map.forEach(this::removeBindingResultIfNecessary); super.putAll(map); }
public String check_links_urls(IdentityZone zone) throws Exception { IdentityZoneHolder.set(zone); LoginInfoEndpoint endpoint = getEndpoint(); String baseUrl = "http://uaa.domain.com"; endpoint.setBaseUrl(baseUrl); endpoint.infoForJson(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl())); assertEquals(addSubdomainToUrl(baseUrl), ((Map<String, String>) model.asMap().get("links")).get("uaa")); assertEquals(addSubdomainToUrl(baseUrl.replace("uaa", "login")), ((Map<String, String>) model.asMap().get("links")).get("login")); String loginBaseUrl = "http://external-login.domain.com"; endpoint.setExternalLoginUrl(loginBaseUrl); endpoint.infoForJson(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl())); assertEquals(addSubdomainToUrl(baseUrl), ((Map<String, String>) model.asMap().get("links")).get("uaa")); assertEquals(loginBaseUrl, ((Map<String, String>) model.asMap().get("links")).get("login")); when(mockIDPConfigurator.getIdentityProviderDefinitions((List<String>) isNull(), eq(zone))).thenReturn(idps); endpoint.setIdpDefinitions(mockIDPConfigurator); endpoint.infoForJson(model, null, new MockHttpServletRequest("GET", endpoint.getBaseUrl())); Map mapPrompts = (Map) model.get("prompts"); assertNotNull(mapPrompts.get("passcode")); assertEquals("Temporary Authentication Code ( Get one at "+addSubdomainToUrl(HTTP_LOCALHOST_8080_UAA) + "/passcode )", ((String[])mapPrompts.get("passcode"))[1]); return baseUrl; }