From 3813809958d2491eaa1362b265b1641c167b17ca Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 16 Jul 2019 23:57:45 +0100 Subject: [PATCH] Fix follower ports --- acceptreject.py | 13 +++++++------ follow.py | 13 +++++++++++-- inbox.py | 2 ++ posts.py | 22 +++++++++++++++++++++- tests.py | 10 +++++++--- utils.py | 16 ++++++++++++---- 6 files changed, 60 insertions(+), 16 deletions(-) diff --git a/acceptreject.py b/acceptreject.py index 6e8aae4bc..983f3105b 100644 --- a/acceptreject.py +++ b/acceptreject.py @@ -137,22 +137,23 @@ def acceptFollow(baseDir: str,domain : str,messageJson: {}, \ if not followedNickname: return + acceptedDomainFull=acceptedDomain + if acceptedPort: + acceptedDomainFull=acceptedDomain+':'+str(acceptedPort) + # are capabilities attached? If so then store them if messageJson.get('capabilities'): if isinstance(messageJson['capabilities'], dict): - acceptedDomainFull=acceptedDomain - if acceptedPort: - acceptedDomainFull=acceptedDomain+':'+str(acceptedPort) capabilitiesGrantedSave(baseDir, \ nickname,acceptedDomainFull, \ messageJson['capabilities']) if followPerson(baseDir, \ - nickname,acceptedDomain, \ - followedNickname,followedDomain, \ + nickname,acceptedDomainFull, \ + followedNickname,followedDomainFull, \ federationList,debug): if debug: - print('DEBUG: '+nickname+'@'+acceptedDomain+' followed '+followedNickname+'@'+followedDomain) + print('DEBUG: '+nickname+'@'+acceptedDomainFull+' followed '+followedNickname+'@'+followedDomainFull) else: if debug: print('DEBUG: Unable to create follow - '+nickname+'@'+acceptedDomain+' -> '+followedNickname+'@'+followedDomain) diff --git a/follow.py b/follow.py index 1b1e6f9cf..818b74567 100644 --- a/follow.py +++ b/follow.py @@ -243,8 +243,11 @@ def receiveFollowRequest(session,baseDir: str,httpPrefix: str, \ return False domain,tempPort=getDomainFromActor(messageJson['actor']) fromPort=port + domainFull=domain if tempPort: fromPort=tempPort + if tempPort!=80 and tempPort!=443: + domainFull=domain+':'+str(tempPort) if not domainPermitted(domain,federationList): if debug: print('DEBUG: follower from domain not permitted - '+domain) @@ -264,6 +267,10 @@ def receiveFollowRequest(session,baseDir: str,httpPrefix: str, \ if debug: print('DEBUG: follow domain not permitted '+domainToFollow) return False + domainToFollowFull=domainToFollow + if tempPort: + if tempPort!=80 and tempPort!=443: + domainToFollowFull=domainToFollow+':'+str(tempPort) nicknameToFollow=getNicknameFromActor(messageJson['object']) if not nicknameToFollow: if debug: @@ -276,8 +283,10 @@ def receiveFollowRequest(session,baseDir: str,httpPrefix: str, \ print('DEBUG: followed account not found - '+ \ baseDir+'/accounts/'+handleToFollow) return False - if not followerOfPerson(baseDir,nicknameToFollow,domainToFollow, \ - nickname,domain,federationList,debug): + + + if not followerOfPerson(baseDir,nicknameToFollow,domainToFollowFull, \ + nickname,domainFull,federationList,debug): if debug: print('DEBUG: '+nickname+'@'+domain+ \ ' is already a follower of '+ \ diff --git a/inbox.py b/inbox.py index d65ae0261..f47f45bcc 100644 --- a/inbox.py +++ b/inbox.py @@ -582,6 +582,8 @@ def receiveAnnounce(session,handle: str,baseDir: str, \ if debug: print('DEBUG: '+messageJson['type']+' has no actor') return False + if debug: + print('DEBUG: receiving announce on '+handle) if not messageJson.get('object'): if debug: print('DEBUG: '+messageJson['type']+' has no object') diff --git a/posts.py b/posts.py index b62f23c03..5d56371af 100644 --- a/posts.py +++ b/posts.py @@ -788,6 +788,8 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str, \ personCache: {}, debug: bool) -> int: """Sends a signed json object to an inbox/outbox """ + if debug: + print('DEBUG: sendSignedJson start') if not session: print('WARN: No session specified for sendSignedJson') return 8 @@ -802,6 +804,8 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str, \ toDomain=toDomain+':'+str(toPort) handle=httpPrefix+'://'+toDomain+'/@'+toNickname + if debug: + print('DEBUG: handle - '+handle+' toPort '+str(toPort)) # lookup the inbox for the To handle wfRequest=webfingerHandle(session,handle,httpPrefix,cachedWebfingers) @@ -831,10 +835,16 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str, \ print('DEBUG: Sending to endpoint '+inboxUrl) if not inboxUrl: + if debug: + print('DEBUG: missing inboxUrl') return 3 if not pubKey: + if debug: + print('DEBUG: missing pubkey') return 4 if not toPersonId: + if debug: + print('DEBUG: missing personId') return 5 # sharedInbox and capabilities are optional @@ -846,6 +856,8 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str, \ return 6 if toDomain not in inboxUrl: + if debug: + print('DEBUG: '+toDomain+' not in '+inboxUrl) return 7 postPath='/'+inboxUrl.split('/')[-1] @@ -858,6 +870,8 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str, \ while len(sendThreads)>10: sendThreads[0].kill() sendThreads.pop(0) + if debug: + print('DEBUG: starting thread to send post') thr = threadWithTrace(target=threadSendPost, \ args=(session, \ postJsonObject.copy(), \ @@ -964,6 +978,9 @@ def sendToFollowers(session,baseDir: str, \ # for each instance for followerDomain,followerHandles in grouped.items(): + if debug: + print('DEBUG: follower handles for '+followerDomain) + pprint(followerHandles) toPort=port index=0 toDomain=followerHandles[index].split('@')[1] @@ -976,7 +993,7 @@ def sendToFollowers(session,baseDir: str, \ nickname='inbox' toNickname='inbox' if debug: - print('Sending from '+nickname+'@'+domain+' to '+toNickname+'@'+toDomain) + print('DEBUG: Sending from '+nickname+'@'+domain+' to '+toNickname+'@'+toDomain) sendSignedJson(postJsonObject,session,baseDir, \ nickname,domain,port, \ toNickname,toDomain,toPort, \ @@ -984,6 +1001,9 @@ def sendToFollowers(session,baseDir: str, \ federationList, \ sendThreads,postLog,cachedWebfingers, \ personCache,debug) + if debug: + print('DEBUG: End of sendToFollowers') + def createInbox(baseDir: str,nickname: str,domain: str,port: int,httpPrefix: str, \ itemsPerPage: int,headerOnly: bool,ocapAlways: bool,pageNumber=None) -> {}: diff --git a/tests.py b/tests.py index f26d4b86d..d9080ba8f 100644 --- a/tests.py +++ b/tests.py @@ -1091,19 +1091,23 @@ def testClientToServer(): sessionBob = createSession(bobDomain,bobPort,useTor) password='bobpass' outboxPath=bobDir+'/accounts/bob@'+bobDomain+'/outbox' + inboxPath=aliceDir+'/accounts/alice@'+aliceDomain+'/inbox' assert len([name for name in os.listdir(outboxPath) if os.path.isfile(os.path.join(outboxPath, name))])==0 + assert len([name for name in os.listdir(inboxPath) if os.path.isfile(os.path.join(inboxPath, name))])==0 sendAnnounceViaServer(sessionBob,'bob',password, \ bobDomain,bobPort, \ httpPrefix,outboxPostId, \ cachedWebfingers, \ personCache,True) - for i in range(10): - if os.path.isdir(outboxPath): + for i in range(20): + if os.path.isdir(outboxPath) and os.path.isdir(inboxPath): if len([name for name in os.listdir(outboxPath) if os.path.isfile(os.path.join(outboxPath, name))])==1: - break + if len([name for name in os.listdir(inboxPath) if os.path.isfile(os.path.join(inboxPath, name))])==1: + break time.sleep(1) assert len([name for name in os.listdir(outboxPath) if os.path.isfile(os.path.join(outboxPath, name))])==1 + assert len([name for name in os.listdir(inboxPath) if os.path.isfile(os.path.join(inboxPath, name))])==1 print('Post repeated') # stop the servers diff --git a/utils.py b/utils.py index e2c2ae9fd..d1a862e08 100644 --- a/utils.py +++ b/utils.py @@ -98,8 +98,16 @@ def followPerson(baseDir: str,nickname: str, domain: str, \ return False if debug: print('DEBUG: follow of domain '+followDomain) - handle=nickname.lower()+'@'+domain.lower() - handleToFollow=followNickname.lower()+'@'+followDomain.lower() + + if ':' in domain: + handle=nickname+'@'+domain.split(':')[0].lower() + else: + handle=nickname+'@'+domain.lower() + + if ':' in followDomain: + handleToFollow=followNickname+'@'+followDomain.split(':')[0].lower() + else: + handleToFollow=followNickname+'@'+followDomain.lower() if not os.path.isdir(baseDir+'/accounts'): os.mkdir(baseDir+'/accounts') if not os.path.isdir(baseDir+'/accounts/'+handle): @@ -111,14 +119,14 @@ def followPerson(baseDir: str,nickname: str, domain: str, \ print('DEBUG: follow already exists') return True with open(filename, "a") as followfile: - followfile.write(handleToFollow+'\n') + followfile.write(followNickname+'@'+followDomain+'\n') if debug: print('DEBUG: follow added') return True if debug: print('DEBUG: creating new following file') with open(filename, "w") as followfile: - followfile.write(handleToFollow+'\n') + followfile.write(followNickname+'@'+followDomain+'\n') return True def locatePost(baseDir: str,nickname: str,domain: str,postUrl: str,replies=False) -> str: