Send shared items token to domains within the approved federation

merge-requests/20/merge
Bob Mottram 2021-07-26 14:12:51 +01:00
parent ebac11f502
commit 84ad6d9f4f
8 changed files with 68 additions and 21 deletions

View File

@ -169,7 +169,7 @@ def createAnnounce(session, baseDir: str, federationList: [],
announceNickname, announceDomain, announcePort, None,
httpPrefix, True, clientToServer, federationList,
sendThreads, postLog, cachedWebfingers, personCache,
debug, projectVersion)
debug, projectVersion, None)
return newAnnounce

View File

@ -1131,7 +1131,9 @@ class PubServer(BaseHTTPRequestHandler):
self.server.YTReplacementDomain,
self.server.showPublishedDateOnly,
self.server.allowLocalNetworkAccess,
city, self.server.systemLanguage)
city, self.server.systemLanguage,
self.server.sharedItemsFederatedDomains,
self.server.sharedItemFederationTokens)
def _postToOutboxThread(self, messageJson: {}) -> bool:
"""Creates a thread to send a post

View File

@ -821,7 +821,7 @@ def followedAccountAccepts(session, baseDir: str, httpPrefix: str,
httpPrefix, True, clientToServer,
federationList,
sendThreads, postLog, cachedWebfingers,
personCache, debug, projectVersion)
personCache, debug, projectVersion, None)
def followedAccountRejects(session, baseDir: str, httpPrefix: str,
@ -882,7 +882,7 @@ def followedAccountRejects(session, baseDir: str, httpPrefix: str,
httpPrefix, True, clientToServer,
federationList,
sendThreads, postLog, cachedWebfingers,
personCache, debug, projectVersion)
personCache, debug, projectVersion, None)
def sendFollowRequest(session, baseDir: str,
@ -941,7 +941,7 @@ def sendFollowRequest(session, baseDir: str,
httpPrefix, True, clientToServer,
federationList,
sendThreads, postLog, cachedWebfingers, personCache,
debug, projectVersion)
debug, projectVersion, None)
return newFollowJson

View File

@ -2000,7 +2000,7 @@ def _sendToGroupMembers(session, baseDir: str, handle: str, port: int,
memberNickname, memberDomain, memberPort, cc,
httpPrefix, False, False, federationList,
sendThreads, postLog, cachedWebfingers,
personCache, debug, __version__)
personCache, debug, __version__, None)
def _inboxUpdateCalendar(baseDir: str, handle: str,
@ -2178,7 +2178,7 @@ def _bounceDM(senderPostId: str, session, httpPrefix: str,
senderNickname, senderDomain, senderPort, cc,
httpPrefix, False, False, federationList,
sendThreads, postLog, cachedWebfingers,
personCache, debug, __version__)
personCache, debug, __version__, None)
return True
@ -2476,6 +2476,8 @@ def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int,
# if the votes on a question have changed then
# send out an update
questionJson['type'] = 'Update'
sharedItemsFederatedDomains = []
sharedItemFederationTokens = {}
sendToFollowersThread(session, baseDir,
nickname, domain,
onionDomain, i2pDomain, port,
@ -2483,7 +2485,9 @@ def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int,
sendThreads, postLog,
cachedWebfingers, personCache,
postJsonObject, debug,
__version__)
__version__,
sharedItemsFederatedDomains,
sharedItemFederationTokens)
isReplyToMutedPost = False

View File

@ -113,7 +113,7 @@ def _like(recentPostsCache: {},
'https://www.w3.org/ns/activitystreams#Public',
httpPrefix, True, clientToServer, federationList,
sendThreads, postLog, cachedWebfingers, personCache,
debug, projectVersion)
debug, projectVersion, None)
return newLikeJson

View File

@ -190,7 +190,9 @@ def postMessageToOutbox(session, translate: {},
YTReplacementDomain: str,
showPublishedDateOnly: bool,
allowLocalNetworkAccess: bool,
city: str, systemLanguage: str) -> bool:
city: str, systemLanguage: str,
sharedItemsFederatedDomains: [],
sharedItemFederationTokens: {}) -> bool:
"""post is received by the outbox
Client to server message post
https://www.w3.org/TR/activitypub/#client-to-server-outbox-delivery
@ -462,7 +464,9 @@ def postMessageToOutbox(session, translate: {},
cachedWebfingers,
personCache,
messageJson, debug,
version)
version,
sharedItemsFederatedDomains,
sharedItemFederationTokens)
followersThreads.append(followersThread)
if debug:
@ -584,5 +588,7 @@ def postMessageToOutbox(session, translate: {},
cachedWebfingers,
personCache,
messageJson, debug,
version)
version,
sharedItemsFederatedDomains,
sharedItemFederationTokens)
return True

View File

@ -2211,7 +2211,8 @@ def sendSignedJson(postJsonObject: {}, session, baseDir: str,
httpPrefix: str, saveToFile: bool, clientToServer: bool,
federationList: [],
sendThreads: [], postLog: [], cachedWebfingers: {},
personCache: {}, debug: bool, projectVersion: str) -> int:
personCache: {}, debug: bool, projectVersion: str,
sharedItemsToken: str) -> int:
"""Sends a signed json object to an inbox/outbox
"""
if debug:
@ -2336,6 +2337,10 @@ def sendSignedJson(postJsonObject: {}, session, baseDir: str,
createSignedHeader(privateKeyPem, nickname, domain, port,
toDomain, toPort,
postPath, httpPrefix, withDigest, postJsonStr)
# optionally add a token so that the receiving instance may access
# your shared items catalog
if sharedItemsToken:
signatureHeaderJson['SharesCatalog'] = sharedItemsToken
# Keep the number of threads being used small
while len(sendThreads) > 1000:
@ -2446,7 +2451,9 @@ def sendToNamedAddresses(session, baseDir: str,
sendThreads: [], postLog: [],
cachedWebfingers: {}, personCache: {},
postJsonObject: {}, debug: bool,
projectVersion: str) -> None:
projectVersion: str,
sharedItemsFederatedDomains: [],
sharedItemFederationTokens: {}) -> None:
"""sends a post to the specific named addresses in to/cc
"""
if not session:
@ -2562,13 +2569,23 @@ def sendToNamedAddresses(session, baseDir: str,
fromDomain = i2pDomain
fromHttpPrefix = 'http'
cc = []
# if the "to" domain is within the shared items
# federation list then send the token for this domain
# so that it can request a catalog
sharedItemsToken = None
if toDomain in sharedItemsFederatedDomains:
if sharedItemFederationTokens.get(fromDomain):
sharedItemsToken = sharedItemFederationTokens[fromDomain]
sendSignedJson(postJsonObject, session, baseDir,
nickname, fromDomain, port,
toNickname, toDomain, toPort,
cc, fromHttpPrefix, True, clientToServer,
federationList,
sendThreads, postLog, cachedWebfingers,
personCache, debug, projectVersion)
personCache, debug, projectVersion,
sharedItemsToken)
def _hasSharedInbox(session, httpPrefix: str, domain: str,
@ -2616,7 +2633,9 @@ def sendToFollowers(session, baseDir: str,
sendThreads: [], postLog: [],
cachedWebfingers: {}, personCache: {},
postJsonObject: {}, debug: bool,
projectVersion: str) -> None:
projectVersion: str,
sharedItemsFederatedDomains: [],
sharedItemFederationTokens: {}) -> None:
"""sends a post to the followers of the given nickname
"""
print('sendToFollowers')
@ -2656,6 +2675,14 @@ def sendToFollowers(session, baseDir: str,
if debug:
pprint(followerHandles)
# if the followers domain is within the shared items
# federation list then send the token for this domain
# so that it can request a catalog
sharedItemsToken = None
if followerDomain in sharedItemsFederatedDomains:
if sharedItemFederationTokens.get(domain):
sharedItemsToken = sharedItemFederationTokens[domain]
# check that the follower's domain is active
followerDomainUrl = httpPrefix + '://' + followerDomain
if not siteIsActive(followerDomainUrl):
@ -2720,7 +2747,8 @@ def sendToFollowers(session, baseDir: str,
cc, fromHttpPrefix, True, clientToServer,
federationList,
sendThreads, postLog, cachedWebfingers,
personCache, debug, projectVersion)
personCache, debug, projectVersion,
sharedItemsToken)
else:
# send to individual followers without using a shared inbox
for handle in followerHandles:
@ -2742,7 +2770,8 @@ def sendToFollowers(session, baseDir: str,
cc, fromHttpPrefix, True, clientToServer,
federationList,
sendThreads, postLog, cachedWebfingers,
personCache, debug, projectVersion)
personCache, debug, projectVersion,
sharedItemsToken)
time.sleep(4)
@ -2762,7 +2791,9 @@ def sendToFollowersThread(session, baseDir: str,
sendThreads: [], postLog: [],
cachedWebfingers: {}, personCache: {},
postJsonObject: {}, debug: bool,
projectVersion: str):
projectVersion: str,
sharedItemsFederatedDomains: [],
sharedItemFederationTokens: {}):
"""Returns a thread used to send a post to followers
"""
sendThread = \
@ -2774,7 +2805,9 @@ def sendToFollowersThread(session, baseDir: str,
sendThreads, postLog,
cachedWebfingers, personCache,
postJsonObject.copy(), debug,
projectVersion), daemon=True)
projectVersion,
sharedItemsFederatedDomains,
sharedItemFederationTokens), daemon=True)
try:
sendThread.start()
except SocketError as e:

View File

@ -112,7 +112,9 @@ def _updatePostSchedule(baseDir: str, handle: str, httpd,
httpd.YTReplacementDomain,
httpd.showPublishedDateOnly,
httpd.allowLocalNetworkAccess,
httpd.city, httpd.systemLanguage):
httpd.city, httpd.systemLanguage,
httpd.sharedItemsFederatedDomains,
httpd.sharedItemFederationTokens):
indexLines.remove(line)
os.remove(postFilename)
continue