aboutsummaryrefslogtreecommitdiff
path: root/juick-server/src/main/java/com/juick/server/api/webfinger/Resource.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-server/src/main/java/com/juick/server/api/webfinger/Resource.java')
-rw-r--r--juick-server/src/main/java/com/juick/server/api/webfinger/Resource.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/juick-server/src/main/java/com/juick/server/api/webfinger/Resource.java b/juick-server/src/main/java/com/juick/server/api/webfinger/Resource.java
new file mode 100644
index 00000000..e43e02d1
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/server/api/webfinger/Resource.java
@@ -0,0 +1,56 @@
+package com.juick.server.api.webfinger;
+
+import com.juick.User;
+import com.juick.server.api.webfinger.model.Account;
+import com.juick.server.api.webfinger.model.Link;
+import com.juick.server.util.HttpNotFoundException;
+import com.juick.service.UserService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.util.UriComponentsBuilder;
+import rocks.xmpp.addr.Jid;
+
+import javax.inject.Inject;
+import java.util.Arrays;
+import java.util.Collections;
+
+@RestController
+public class Resource {
+ @Inject
+ private UserService userService;
+ @Value("${web_domain:localhost}")
+ private String domain;
+ @Value("${ap_base_uri:http://localhost:8080/}")
+ private String baseUri;
+
+ @GetMapping("/.well-known/webfinger")
+ public Account getWebResource(@RequestParam String resource) {
+ if (resource.startsWith("acct:")) {
+ Jid account = Jid.of(resource.substring(5));
+ if (account.getDomain().equals(domain)) {
+ User user = userService.getUserByName(account.getLocal());
+ if (!user.isAnonymous()) {
+ UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUri);
+ builder.path(String.format("/u/%s", user.getName()));
+ Link blog = new Link();
+ blog.setRel("self");
+ blog.setType("application/activity+json");
+ blog.setHref(builder.toUriString());
+ UriComponentsBuilder rssBuilder = UriComponentsBuilder.fromHttpUrl(baseUri);
+ rssBuilder.path(String.format("/rss/%s/blog", user.getName()));
+ Link rss = new Link();
+ rss.setRel("self");
+ rss.setType("application/rss+xml");
+ rss.setHref(rssBuilder.toUriString());
+ Account result = new Account();
+ result.setSubject(resource);
+ result.setLinks(Arrays.asList(blog, rss));
+ return result;
+ }
+ }
+ }
+ throw new HttpNotFoundException();
+ }
+}