diff --git a/uaa/src/test/java/org/cloudfoundry/identity/uaa/login/LoginMockMvcTests.java b/uaa/src/test/java/org/cloudfoundry/identity/uaa/login/LoginMockMvcTests.java index 38adb6ce52b..d97531f384c 100644 --- a/uaa/src/test/java/org/cloudfoundry/identity/uaa/login/LoginMockMvcTests.java +++ b/uaa/src/test/java/org/cloudfoundry/identity/uaa/login/LoginMockMvcTests.java @@ -294,10 +294,7 @@ public void testDefaultLogo() throws Exception { @Test public void testCustomLogo() throws Exception { - BrandingInformation branding = new BrandingInformation(); - branding.setProductLogo("/bASe/64+"); - identityZoneConfiguration.setBranding(branding); - setZoneConfiguration(identityZoneConfiguration); + setZoneFavIconAndProductLogo(null, "/bASe/64+"); getMockMvc().perform(get("/login")) .andExpect(content().string(allOf(containsString("url(data:image/png;base64,/bASe/64+)"), not(containsString("url(/uaa/resources/oss/images/product-logo.png)"))))); @@ -305,7 +302,7 @@ public void testCustomLogo() throws Exception { @Test public void testCustomFavIcon() throws Exception { - setZoneFavIcon("/sM4lL=="); + setZoneFavIconAndProductLogo("/sM4lL==", null); getMockMvc().perform(get("/login")) .andExpect(content().string(allOf(containsString(".header-image {background-image: url(data:image/png;base64,/sM4lL==);}"), not(containsString("product-logo.png"))))); } - private void setZoneFavIcon(String favIcon) { + private void setZoneFavIconAndProductLogo(String favIcon, String productLogo) { BrandingInformation branding = new BrandingInformation(); branding.setSquareLogo(favIcon); + branding.setProductLogo(productLogo); identityZoneConfiguration.setBranding(branding); setZoneConfiguration(identityZoneConfiguration); } diff --git a/uaa/src/test/java/org/cloudfoundry/identity/uaa/mock/zones/IdentityZoneEndpointDocs.java b/uaa/src/test/java/org/cloudfoundry/identity/uaa/mock/zones/IdentityZoneEndpointDocs.java index fe8b53fb6cc..306be1787f9 100644 --- a/uaa/src/test/java/org/cloudfoundry/identity/uaa/mock/zones/IdentityZoneEndpointDocs.java +++ b/uaa/src/test/java/org/cloudfoundry/identity/uaa/mock/zones/IdentityZoneEndpointDocs.java @@ -3,7 +3,9 @@ import org.cloudfoundry.identity.uaa.mock.InjectedMockContextTest; import org.cloudfoundry.identity.uaa.test.TestClient; import org.cloudfoundry.identity.uaa.util.JsonUtils; +import org.cloudfoundry.identity.uaa.zone.BrandingInformation; import org.cloudfoundry.identity.uaa.zone.IdentityZone; +import org.cloudfoundry.identity.uaa.zone.IdentityZoneConfiguration; import org.junit.Before; import org.junit.Test; import org.springframework.http.HttpStatus; @@ -68,6 +70,12 @@ public class IdentityZoneEndpointDocs extends InjectedMockContextTest { private static final String PROMPTS_TYPE_DESC = "What kind of field this is (e.g. text or password)"; private static final String PROMPTS_TEXT_DESC = "Actual text displayed on prompt for field"; private static final String IDP_DISCOVERY_ENABLED_FLAG = "IDP Discovery should be set to true if you have configured more than one identity provider for UAA. The discovery relies on email domain being set for each additional provider"; + private static final String BRANDING_COMPANY_NAME_DESC = "This name is used on the UAA Pages and in account management related communication in UAA"; + private static final String BRANDING_PRODUCT_LOGO_DESC = "This is a base64 encoded PNG image which will be used as the logo on all UAA pages like Login, Sign Up etc."; + private static final String BRANDING_SQUARE_LOGO_DESC = "This is a base64 encoded PNG image which will be used as the favicon for the UAA pages"; + private static final String BRANDING_FOOTER_LEGAL_TEXT_DESC = "This text appears on the footer of all UAA pages"; + private static final String BRANDING_FOOTER_LINKS_DESC = "These links appear on the footer of all UAA pages. You may choose to add multiple urls for things like Support, Terms of Service etc."; + private TestClient testClient; @Before @@ -93,6 +101,8 @@ public void createIdentityZone() throws Exception { Map keys = new HashMap<>(); keys.put("exampleKeyId", "s1gNiNg.K3y/t3XT"); identityZone.getConfig().getTokenPolicy().setKeys(keys); + IdentityZoneConfiguration brandingConfig = setBranding(identityZone.getConfig()); + identityZone.setConfig(brandingConfig); FieldDescriptor[] fieldDescriptors = { fieldWithPath("id").description(ID_DESC).attributes(key("constraints").value("Optional")), @@ -131,6 +141,12 @@ public void createIdentityZone() throws Exception { fieldWithPath("config.idpDiscoveryEnabled").description(IDP_DISCOVERY_ENABLED_FLAG).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.companyName").description(BRANDING_COMPANY_NAME_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.productLogo").description(BRANDING_PRODUCT_LOGO_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.squareLogo").description(BRANDING_SQUARE_LOGO_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.footerLegalText").description(BRANDING_FOOTER_LEGAL_TEXT_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.footerLinks").description(BRANDING_FOOTER_LINKS_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("created").ignored(), fieldWithPath("last_modified").ignored() }; @@ -142,12 +158,12 @@ public void createIdentityZone() throws Exception { .content(JsonUtils.writeValueAsString(identityZone))) .andExpect(status().is(HttpStatus.CREATED.value())) .andDo(document("{ClassName}/{methodName}", - preprocessRequest(prettyPrint()), - preprocessResponse(prettyPrint()), - requestHeaders( + preprocessRequest(prettyPrint()), + preprocessResponse(prettyPrint()), + requestHeaders( headerWithName("Authorization").description("Bearer token containing `zones.write` or `zones..admin`") - ), - requestFields(fieldDescriptors), + ), + requestFields(fieldDescriptors), getResponseFields() )); } @@ -228,6 +244,12 @@ public void getAllIdentityZones() throws Exception { fieldWithPath("[].config.idpDiscoveryEnabled").description(IDP_DISCOVERY_ENABLED_FLAG), + fieldWithPath("[].config.branding.companyName").description(BRANDING_COMPANY_NAME_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("[].config.branding.productLogo").description(BRANDING_PRODUCT_LOGO_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("[].config.branding.squareLogo").description(BRANDING_SQUARE_LOGO_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("[].config.branding.footerLegalText").description(BRANDING_FOOTER_LEGAL_TEXT_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("[].config.branding.footerLinks").description(BRANDING_FOOTER_LINKS_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("[].created").ignored(), fieldWithPath("[].last_modified").ignored() ); @@ -262,6 +284,8 @@ public void updateIdentityZone() throws Exception { Map keys = new HashMap<>(); keys.put("updatedKeyId", "upD4t3d.s1gNiNg.K3y/t3XT"); updatedIdentityZone.getConfig().getTokenPolicy().setKeys(keys); + IdentityZoneConfiguration brandingConfig = setBranding(updatedIdentityZone.getConfig()); + updatedIdentityZone.setConfig(brandingConfig); Snippet requestFields = requestFields( fieldWithPath("subdomain").description(SUBDOMAIN_DESC).attributes(key("constraints").value("Required")), @@ -299,6 +323,12 @@ public void updateIdentityZone() throws Exception { fieldWithPath("config.idpDiscoveryEnabled").description(IDP_DISCOVERY_ENABLED_FLAG).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.companyName").description(BRANDING_COMPANY_NAME_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.productLogo").description(BRANDING_PRODUCT_LOGO_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.squareLogo").description(BRANDING_SQUARE_LOGO_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.footerLegalText").description(BRANDING_FOOTER_LEGAL_TEXT_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("config.branding.footerLinks").description(BRANDING_FOOTER_LINKS_DESC).attributes(key("constraints").value("Optional")), + fieldWithPath("created").ignored(), fieldWithPath("last_modified").ignored() ); @@ -356,10 +386,14 @@ private void createIdentityZoneHelper(String id) throws Exception { "identitysecret", "zones.write"); - Map identityZone = new HashMap<>(); - identityZone.put("id", id); - identityZone.put("subdomain", StringUtils.hasText(id) ? id : new RandomValueStringGenerator().generate()); - identityZone.put("name", "The Twiglet Zone"); + IdentityZone identityZone = new IdentityZone(); + identityZone.setId(id); + identityZone.setSubdomain(StringUtils.hasText(id) ? id : new RandomValueStringGenerator().generate()); + identityZone.setName("The Twiglet Zone"); + + IdentityZoneConfiguration brandingConfig = setBranding(identityZone.getConfig()); + identityZone.setConfig(brandingConfig); + getMockMvc().perform( post("/identity-zones") @@ -406,9 +440,25 @@ private Snippet getResponseFields() { fieldWithPath("config.prompts[].text").description(PROMPTS_TEXT_DESC), fieldWithPath("config.idpDiscoveryEnabled").description(IDP_DISCOVERY_ENABLED_FLAG), + fieldWithPath("config.branding.companyName").description(BRANDING_COMPANY_NAME_DESC), + fieldWithPath("config.branding.productLogo").description(BRANDING_PRODUCT_LOGO_DESC), + fieldWithPath("config.branding.squareLogo").description(BRANDING_SQUARE_LOGO_DESC), + fieldWithPath("config.branding.footerLegalText").description(BRANDING_FOOTER_LEGAL_TEXT_DESC), + fieldWithPath("config.branding.footerLinks").description(BRANDING_FOOTER_LINKS_DESC), fieldWithPath("created").ignored(), fieldWithPath("last_modified").ignored() ); } + + private IdentityZoneConfiguration setBranding(IdentityZoneConfiguration config){ + BrandingInformation branding = new BrandingInformation(); + branding.setCompanyName("Test Company"); + branding.setProductLogo("VGVzdFByb2R1Y3RMb2dv"); + branding.setSquareLogo("VGVzdFNxdWFyZUxvZ28="); + branding.setFooterLegalText("Test footer legal text"); + branding.setFooterLinks(new HashMap<>()); + config.setBranding(branding); + return config; + } }