aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2018-04-04 18:55:18 +0300
committerGravatar Vitaly Takmazov2018-04-04 18:55:18 +0300
commitba52f4add7a96df36112522faf0f85f41b190694 (patch)
tree4653c4fdf6a4627fae6d08d31f64e0dcc22023de
parenta5f045a3780ef8530afa7493cf090771b8fdcfe1 (diff)
/apple-app-site-association
-rw-r--r--juick-www/src/main/java/com/juick/www/configuration/WebSecurityConfig.java2
-rw-r--r--juick-www/src/main/java/com/juick/www/controllers/AppSiteAssociation.java49
-rw-r--r--juick-www/src/test/java/com/juick/WebAppTests.java12
3 files changed, 62 insertions, 1 deletions
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<String> apps;
+
+ public List<String> getApps() {
+ return apps;
+ }
+
+ public void setApps(List<String> 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)));
+ }
}