From ba52f4add7a96df36112522faf0f85f41b190694 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Wed, 4 Apr 2018 18:55:18 +0300 Subject: /apple-app-site-association --- .../juick/www/configuration/WebSecurityConfig.java | 2 +- .../juick/www/controllers/AppSiteAssociation.java | 49 ++++++++++++++++++++++ juick-www/src/test/java/com/juick/WebAppTests.java | 12 ++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 juick-www/src/main/java/com/juick/www/controllers/AppSiteAssociation.java diff --git a/juick-www/src/main/java/com/juick/www/configuration/WebSecurityConfig.java b/juick-www/src/main/java/com/juick/www/configuration/WebSecurityConfig.java index 46fa7619..4de79363 100644 --- a/juick-www/src/main/java/com/juick/www/configuration/WebSecurityConfig.java +++ b/juick-www/src/main/java/com/juick/www/configuration/WebSecurityConfig.java @@ -135,6 +135,6 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) throws Exception { web.debug(false); - web.ignoring().antMatchers("/style.css*", "/scripts.js*", "/h2-console"); + web.ignoring().antMatchers("/style.css*", "/scripts.js*", "/h2-console", "/.well-known/**"); } } diff --git a/juick-www/src/main/java/com/juick/www/controllers/AppSiteAssociation.java b/juick-www/src/main/java/com/juick/www/controllers/AppSiteAssociation.java new file mode 100644 index 00000000..dcf6c400 --- /dev/null +++ b/juick-www/src/main/java/com/juick/www/controllers/AppSiteAssociation.java @@ -0,0 +1,49 @@ +package com.juick.www.controllers; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; +import java.util.List; + +@RestController +public class AppSiteAssociation { + @Value("${ios_app_id:}") + private String appId; + + @GetMapping("/.well-known/apple-app-site-association") + @ResponseBody + public SiteAssociations appSiteAssociations() { + WebCredentials webCredentials = new WebCredentials(); + webCredentials.setApps(Collections.singletonList(appId)); + SiteAssociations siteAssociations = new SiteAssociations(); + siteAssociations.setWebcredentials(webCredentials); + return siteAssociations; + } + + private class SiteAssociations { + private WebCredentials webcredentials; + + public WebCredentials getWebcredentials() { + return webcredentials; + } + + public void setWebcredentials(WebCredentials webcredentials) { + this.webcredentials = webcredentials; + } + } + + private class WebCredentials { + private List apps; + + public List getApps() { + return apps; + } + + public void setApps(List apps) { + this.apps = apps; + } + } +} diff --git a/juick-www/src/test/java/com/juick/WebAppTests.java b/juick-www/src/test/java/com/juick/WebAppTests.java index 3d8fd031..e383a0a9 100644 --- a/juick-www/src/test/java/com/juick/WebAppTests.java +++ b/juick-www/src/test/java/com/juick/WebAppTests.java @@ -39,8 +39,10 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMock import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.core.io.ClassPathResource; +import org.springframework.http.MediaType; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.mock.web.MockMultipartFile; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; @@ -71,6 +73,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringRunner.class) @AutoConfigureMockMvc @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, classes = { Application.class}) +@TestPropertySource(properties = {"ios_app_id=12345678.com.juick.ExampleApp"}) public class WebAppTests { @MockBean private ImagesService imagesService; @@ -97,6 +100,8 @@ public class WebAppTests { private PebbleEngine pebbleEngine; @Value("${img_path:#{systemEnvironment['TEMP'] ?: '/tmp'}}") private String imgPath; + @Value("${ios_app_id:}") + private String appId; private static User ugnich, freefd; private static String ugnichName, ugnichPassword, freefdName, freefdPassword; @@ -381,4 +386,11 @@ public class WebAppTests { int mid = messagesService.createMessage(ugnich.getUid(), "yo", null, null); mockMvc.perform(get(String.format("/%d", mid))).andExpect(redirectedUrl(String.format("/%s/%d", ugnich.getName(), mid))); } + @Test + public void appAssociationsTest() throws Exception { + mockMvc.perform((get("/.well-known/apple-app-site-association"))) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$.webcredentials.apps[0]", is(appId))); + } } -- cgit v1.2.3