aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/server/api/webfinger
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick/server/api/webfinger')
-rw-r--r--src/main/java/com/juick/server/api/webfinger/Resource.java51
-rw-r--r--src/main/java/com/juick/server/api/webfinger/model/Account.java24
-rw-r--r--src/main/java/com/juick/server/api/webfinger/model/Link.java31
3 files changed, 106 insertions, 0 deletions
diff --git a/src/main/java/com/juick/server/api/webfinger/Resource.java b/src/main/java/com/juick/server/api/webfinger/Resource.java
new file mode 100644
index 00000000..71a0ca31
--- /dev/null
+++ b/src/main/java/com/juick/server/api/webfinger/Resource.java
@@ -0,0 +1,51 @@
+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.Collections;
+
+import static com.juick.server.api.activity.model.Context.ACTIVITY_MEDIA_TYPE;
+
+@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(ACTIVITY_MEDIA_TYPE);
+ blog.setHref(builder.toUriString());
+ Account result = new Account();
+ result.setSubject(resource);
+ result.setLinks(Collections.singletonList(blog));
+ return result;
+ }
+ }
+ }
+ throw new HttpNotFoundException();
+ }
+}
diff --git a/src/main/java/com/juick/server/api/webfinger/model/Account.java b/src/main/java/com/juick/server/api/webfinger/model/Account.java
new file mode 100644
index 00000000..892fa303
--- /dev/null
+++ b/src/main/java/com/juick/server/api/webfinger/model/Account.java
@@ -0,0 +1,24 @@
+package com.juick.server.api.webfinger.model;
+
+import java.util.List;
+
+public class Account {
+ private String subject;
+ private List<Link> links;
+
+ public String getSubject() {
+ return subject;
+ }
+
+ public void setSubject(String subject) {
+ this.subject = subject;
+ }
+
+ public List<Link> getLinks() {
+ return links;
+ }
+
+ public void setLinks(List<Link> links) {
+ this.links = links;
+ }
+}
diff --git a/src/main/java/com/juick/server/api/webfinger/model/Link.java b/src/main/java/com/juick/server/api/webfinger/model/Link.java
new file mode 100644
index 00000000..48e7ab67
--- /dev/null
+++ b/src/main/java/com/juick/server/api/webfinger/model/Link.java
@@ -0,0 +1,31 @@
+package com.juick.server.api.webfinger.model;
+
+public class Link {
+ private String rel;
+ private String type;
+ private String href;
+
+ public String getRel() {
+ return rel;
+ }
+
+ public void setRel(String rel) {
+ this.rel = rel;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getHref() {
+ return href;
+ }
+
+ public void setHref(String href) {
+ this.href = href;
+ }
+}