aboutsummaryrefslogtreecommitdiff
path: root/juick-server/src/main/java/com/juick/server/ActivityPubManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-server/src/main/java/com/juick/server/ActivityPubManager.java')
-rw-r--r--juick-server/src/main/java/com/juick/server/ActivityPubManager.java38
1 files changed, 36 insertions, 2 deletions
diff --git a/juick-server/src/main/java/com/juick/server/ActivityPubManager.java b/juick-server/src/main/java/com/juick/server/ActivityPubManager.java
index 2e511738..f08754c6 100644
--- a/juick-server/src/main/java/com/juick/server/ActivityPubManager.java
+++ b/juick-server/src/main/java/com/juick/server/ActivityPubManager.java
@@ -6,9 +6,11 @@ import com.juick.server.api.activity.model.Link;
import com.juick.server.api.activity.model.Note;
import com.juick.server.api.activity.model.Person;
import com.juick.server.api.activity.model.activities.Accept;
+import com.juick.server.api.activity.model.activities.Announce;
import com.juick.server.api.activity.model.activities.Create;
import com.juick.server.api.activity.model.activities.Delete;
import com.juick.service.SocialService;
+import com.juick.service.UserService;
import com.juick.service.activities.*;
import com.juick.service.component.*;
import com.juick.util.MessageUtils;
@@ -20,6 +22,7 @@ import org.springframework.stereotype.Component;
import org.springframework.web.util.UriComponentsBuilder;
import javax.annotation.Nonnull;
+import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.io.IOException;
import java.net.URI;
@@ -29,11 +32,22 @@ import java.util.Collections;
public class ActivityPubManager implements ActivityListener, NotificationListener {
private static final Logger logger = LoggerFactory.getLogger(ActivityPubManager.class);
@Inject
- SignatureManager signatureManager;
+ private SignatureManager signatureManager;
@Inject
- SocialService socialService;
+ private SocialService socialService;
+ @Inject
+ private UserService userService;
@Value("${ap_base_uri:http://localhost:8080/}")
private String baseUri;
+ @Value("${service_user:juick}")
+ private String serviceUsername;
+
+ private User serviceUser;
+
+ @PostConstruct
+ public void init() {
+ serviceUser = userService.getUserByName(serviceUsername);
+ }
@Override
public void processFollowEvent(@Nonnull FollowEvent followEvent) {
@@ -204,4 +218,24 @@ public class ActivityPubManager implements ActivityListener, NotificationListene
public void processMessageReadEvent(MessageReadEvent messageReadEvent) {
}
+
+ @Override
+ public void processTopEvent(TopEvent topEvent) {
+ Message message = topEvent.getMessage();
+ Note note = makeNote(message);
+ Announce announce = new Announce();
+ announce.setId(note.getId() + "#top");
+ announce.setActor(personUri(serviceUser));
+ announce.setObject(note);
+ Person me = (Person) signatureManager.getContext(URI.create(announce.getActor())).get();
+ socialService.getFollowers(serviceUser).forEach(acct -> {
+ Person follower = (Person) signatureManager.getContext(URI.create(acct)).get();
+ try {
+ logger.info("Announcing top: {}", message.getMid());
+ signatureManager.post(me, follower, announce);
+ } catch (IOException e) {
+ logger.warn("activitypub exception", e);
+ }
+ });
+ }
}