diff options
author | Vitaly Takmazov | 2018-09-04 11:22:57 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2018-09-04 11:22:57 +0300 |
commit | b3d633cf0e8a6c35be9755702dedbea29ff3d897 (patch) | |
tree | dd3f854063c03a3881594c2a592e9827dbbbbbf0 /juick-server/src/main/java/com/juick/server/api/webfinger/Resource.java | |
parent | 2f4701110c5deff4d0f83d728ac15c98b965f3a8 (diff) |
WebFinger support
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.java | 56 |
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(); + } +} |