From c6a93e624d071868cb09cd61f26ff6034db91f33 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 15 Jul 2019 18:22:51 +0100 Subject: [PATCH] c2s post distribution to followers --- daemon.py | 19 ++++++++++++++++--- posts.py | 21 +++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/daemon.py b/daemon.py index 0f0d7e2a..cbead8a2 100644 --- a/daemon.py +++ b/daemon.py @@ -21,6 +21,8 @@ from person import personBoxJson from person import createSharedInbox from posts import outboxMessageCreateWrap from posts import savePostToBox +from posts import sendToFollowers +from posts import postIsAddressedToPublic from inbox import inboxPermittedMessage from inbox import inboxMessageHasParams from inbox import runInboxQueue @@ -147,9 +149,20 @@ class PubServer(BaseHTTPRequestHandler): postId=messageJson['id'] else: postId=None - savePostToBox(self.server.baseDir,postId, \ - self.postToNickname, \ - self.server.domain,messageJson,'outbox') + if postIsAddressedToPublic(self.server.baseDir, \ + messageJson): + if self.server.debug: + print('DEBUG: saving c2s post to outbox') + savePostToBox(self.server.baseDir,postId, \ + self.postToNickname, \ + self.server.domain,messageJson,'outbox') + if self.server.debug: + print('DEBUG: sending c2s post to followers') + sendToFollowers(self.server.session,self.server.baseDir, \ + self.postToNickname,self.server.domain, \ + self.server.port,self.server.httpPrefix, + messageJson) + # TODO send to individual named addresses return True def _updateInboxQueue(self,nickname: str,messageJson: {}) -> int: diff --git a/posts.py b/posts.py index 19f64b3c..32030db3 100644 --- a/posts.py +++ b/posts.py @@ -502,6 +502,27 @@ def postIsAddressedToFollowers(baseDir: str, addressedToFollowers=True return addressedToFollowers +def postIsAddressedToPublic(baseDir: str,postJsonObject: {}) -> bool: + """Returns true if the given post is addressed to public + """ + if not postJsonObject.get('object'): + return False + if not postJsonObject['object'].get('to'): + return False + + publicUrl='https://www.w3.org/ns/activitystreams#Public' + + # does the public url exist in 'to' or 'cc' lists? + addressedToPublic=False + if publicUrl in postJsonObject['object']['to']: + addressedToPublic=True + if not addressedToPublic: + if not postJsonObject['object'].get('cc'): + return False + if publicUrl in postJsonObject['object']['cc']: + addressedToPublic=True + return addressedToPublic + def createPublicPost(baseDir: str, nickname: str, domain: str, port: int,httpPrefix: str, \ content: str, followersOnly: bool, saveToFile: bool,