c2s post distribution to followers

master
Bob Mottram 2019-07-15 18:22:51 +01:00
parent ce44f6ffcb
commit c6a93e624d
2 changed files with 37 additions and 3 deletions

View File

@ -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:

View File

@ -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,