diff --git a/acceptreject.py b/acceptreject.py index 05e7dcbe..c40129bd 100644 --- a/acceptreject.py +++ b/acceptreject.py @@ -109,6 +109,9 @@ def acceptFollow(baseDir: str,domain : str,messageJson: {}, \ print('DEBUG: follow Accept received') thisActor=messageJson['object']['actor'] nickname=getNicknameFromActor(thisActor) + if not nickname: + print('WARN: no nickname found in '+thisActor) + return acceptedDomain,acceptedPort=getDomainFromActor(thisActor) if not acceptedDomain: if debug: diff --git a/announce.py b/announce.py index a7dfad29..18e9353b 100644 --- a/announce.py +++ b/announce.py @@ -33,8 +33,11 @@ def outboxAnnounce(baseDir: str,messageJson: {},debug: bool) -> bool: return False if messageJson['type']=='Announce': if not isinstance(messageJson['object'], str): - return + return False nickname=getNicknameFromActor(messageJson['actor']) + if not nickname: + print('WARN: no nickname found in '+messageJson['actor']) + return False domain,port=getDomainFromActor(messageJson['actor']) postFilename=locatePost(baseDir,nickname,domain,messageJson['object']) if postFilename: @@ -42,13 +45,16 @@ def outboxAnnounce(baseDir: str,messageJson: {},debug: bool) -> bool: return True if messageJson['type']=='Undo': if not isinstance(messageJson['object'], dict): - return + return False if not messageJson['object'].get('type'): return False if messageJson['object']['type']=='Announce': if not isinstance(messageJson['object']['object'], str): - return + return False nickname=getNicknameFromActor(messageJson['actor']) + if not nickname: + print('WARN: no nickname found in '+messageJson['actor']) + return False domain,port=getDomainFromActor(messageJson['actor']) postFilename=locatePost(baseDir,nickname,domain,messageJson['object']['object']) if postFilename: @@ -218,7 +224,7 @@ def createAnnounce(session,baseDir: str,federationList: [], \ announceNickname=None announceDomain=None announcePort=None - if '/users/' in objectUrl: + if '/users/' in objectUrl or '/profile/' in objectUrl: announceNickname=getNicknameFromActor(objectUrl) announceDomain,announcePort=getDomainFromActor(objectUrl) @@ -329,7 +335,7 @@ def undoAnnounce(session,baseDir: str,federationList: [], \ announceNickname=None announceDomain=None announcePort=None - if '/users/' in objectUrl: + if '/users/' in objectUrl or '/profile/' in objectUrl: announceNickname=getNicknameFromActor(objectUrl) announceDomain,announcePort=getDomainFromActor(objectUrl) diff --git a/blocking.py b/blocking.py index 8318eded..f1f00093 100644 --- a/blocking.py +++ b/blocking.py @@ -333,8 +333,11 @@ def outboxBlock(baseDir: str,httpPrefix: str, \ if debug: print('DEBUG: c2s block post not found in inbox or outbox') print(messageId) - return True + return nicknameBlocked=getNicknameFromActor(messageJson['object']) + if not nicknameBlocked: + print('WARN: unable to find nickname in '+messageJson['object']) + return domainBlocked,portBlocked=getDomainFromActor(messageJson['object']) domainBlockedFull=domainBlocked if portBlocked: @@ -405,8 +408,11 @@ def outboxUndoBlock(baseDir: str,httpPrefix: str, \ if debug: print('DEBUG: c2s undo block post not found in inbox or outbox') print(messageId) - return True + return nicknameBlocked=getNicknameFromActor(messageJson['object']['object']) + if not nicknameBlocked: + print('WARN: unable to find nickname in '+messageJson['object']['object']) + return domainBlocked,portBlocked=getDomainFromActor(messageJson['object']['object']) domainBlockedFull=domainBlocked if portBlocked: diff --git a/capabilities.py b/capabilities.py index 302d3ecc..d96e3933 100644 --- a/capabilities.py +++ b/capabilities.py @@ -132,6 +132,9 @@ def capabilitiesAccept(baseDir: str,httpPrefix: str, \ # otherwise create a new capability if not ocapAccept: acceptedActorNickname=getNicknameFromActor(acceptedActor) + if not acceptedActorNickname: + print('WARN: unable to find nickname in '+acceptedActor) + return None acceptedActorDomain,acceptedActorPort=getDomainFromActor(acceptedActor) if acceptedActorPort: ocapId=acceptedActorNickname+'@'+acceptedActorDomain+':'+str(acceptedActorPort)+'#'+createPassword(32) @@ -213,6 +216,9 @@ def capabilitiesUpdate(baseDir: str,httpPrefix: str, \ # change the id, so that the old capabilities can't continue to be used updateActorNickname=getNicknameFromActor(updateActor) + if not updateActorNickname: + print('WARN: unable to find nickname in '+updateActor) + return None updateActorDomain,updateActorPort=getDomainFromActor(updateActor) if updateActorPort: ocapId=updateActorNickname+'@'+updateActorDomain+':'+str(updateActorPort)+'#'+createPassword(32) diff --git a/daemon.py b/daemon.py index 54f415cd..424ad0fe 100644 --- a/daemon.py +++ b/daemon.py @@ -900,6 +900,11 @@ class PubServer(BaseHTTPRequestHandler): repeatUrl=self.path.split('?repeat=')[1] actor=self.path.split('?repeat=')[0] self.postToNickname=getNicknameFromActor(actor) + if not self.postToNickname: + print('WARN: unable to find nickname in '+actor) + self.server.GETbusy=False + self._redirect_headers(actor+'/inbox',cookie) + return if not self.server.session: self.server.session= \ createSession(self.server.domain,self.server.port,self.server.useTor) @@ -929,6 +934,11 @@ class PubServer(BaseHTTPRequestHandler): repeatUrl=self.path.split('?unrepeat=')[1] actor=self.path.split('?unrepeat=')[0] self.postToNickname=getNicknameFromActor(actor) + if not self.postToNickname: + print('WARN: unable to find nickname in '+actor) + self.server.GETbusy=False + self._redirect_headers(actor+'/inbox',cookie) + return if not self.server.session: self.server.session= \ createSession(self.server.domain,self.server.port,self.server.useTor) @@ -996,6 +1006,11 @@ class PubServer(BaseHTTPRequestHandler): likeUrl=self.path.split('?like=')[1] actor=self.path.split('?like=')[0] self.postToNickname=getNicknameFromActor(actor) + if not self.postToNickname: + print('WARN: unable to find nickname in '+actor) + self.server.GETbusy=False + self._redirect_headers(actor+'/inbox',cookie) + return if not self.server.session: self.server.session= \ createSession(self.server.domain,self.server.port,self.server.useTor) @@ -1017,6 +1032,11 @@ class PubServer(BaseHTTPRequestHandler): likeUrl=self.path.split('?unlike=')[1] actor=self.path.split('?unlike=')[0] self.postToNickname=getNicknameFromActor(actor) + if not self.postToNickname: + print('WARN: unable to find nickname in '+actor) + self.server.GETbusy=False + self._redirect_headers(actor+'/inbox',cookie) + return if not self.server.session: self.server.session= \ createSession(self.server.domain,self.server.port,self.server.useTor) @@ -1052,6 +1072,11 @@ class PubServer(BaseHTTPRequestHandler): self._redirect_headers(actor+'/inbox',cookie) return self.postToNickname=getNicknameFromActor(actor) + if not self.postToNickname: + print('WARN: unable to find nickname in '+actor) + self.server.GETbusy=False + self._redirect_headers(actor+'/inbox',cookie) + return if not self.server.session: self.server.session= \ createSession(self.server.domain,self.server.port, \ @@ -2195,6 +2220,7 @@ class PubServer(BaseHTTPRequestHandler): actorStr=self.path.replace('/profiledata','').replace('/editprofile','') nickname=getNicknameFromActor(actorStr) if not nickname: + print('WARN: nickname not found in '+actorStr) self._redirect_headers(actorStr,cookie) self.server.POSTbusy=False return @@ -2659,8 +2685,9 @@ class PubServer(BaseHTTPRequestHandler): if '&' in shareName: shareName=shareName.split('&')[0] shareNickname=getNicknameFromActor(shareActor) - shareDomain,sharePort=getDomainFromActor(shareActor) - removeShare(self.server.baseDir,shareNickname,shareDomain,shareName) + if shareNickname: + shareDomain,sharePort=getDomainFromActor(shareActor) + removeShare(self.server.baseDir,shareNickname,shareDomain,shareName) self._redirect_headers(originPathStr+'/inbox',cookie) self.server.POSTbusy=False return @@ -2689,7 +2716,8 @@ class PubServer(BaseHTTPRequestHandler): if self.server.debug: pprint(deleteJson) self.postToNickname=getNicknameFromActor(removePostActor) - self._postToOutbox(deleteJson) + if self.postToNickname: + self._postToOutbox(deleteJson) self._redirect_headers(originPathStr+'/outbox',cookie) self.server.POSTbusy=False return @@ -2779,6 +2807,11 @@ class PubServer(BaseHTTPRequestHandler): if authorized and self.path.endswith('/unblockconfirm'): originPathStr=self.path.split('/unblockconfirm')[0] blockerNickname=getNicknameFromActor(originPathStr) + if not blockerNickname: + print('WARN: unable to find nickname in '+originPathStr) + self._redirect_headers(originPathStr,cookie) + self.server.POSTbusy=False + return length = int(self.headers['Content-length']) blockConfirmParams=self.rfile.read(length).decode('utf-8') if '&submitYes=' in blockConfirmParams: @@ -2786,6 +2819,11 @@ class PubServer(BaseHTTPRequestHandler): if '&' in blockingActor: blockingActor=blockingActor.split('&')[0] blockingNickname=getNicknameFromActor(blockingActor) + if not blockingNickname: + print('WARN: unable to find nickname in '+blockingActor) + self._redirect_headers(originPathStr,cookie) + self.server.POSTbusy=False + return blockingDomain,blockingPort=getDomainFromActor(blockingActor) blockingDomainFull=blockingDomain if blockingPort: @@ -2810,6 +2848,11 @@ class PubServer(BaseHTTPRequestHandler): if authorized and self.path.endswith('/blockconfirm'): originPathStr=self.path.split('/blockconfirm')[0] blockerNickname=getNicknameFromActor(originPathStr) + if not blockerNickname: + print('WARN: unable to find nickname in '+originPathStr) + self._redirect_headers(originPathStr,cookie) + self.server.POSTbusy=False + return length = int(self.headers['Content-length']) blockConfirmParams=self.rfile.read(length).decode('utf-8') if '&submitYes=' in blockConfirmParams: @@ -2817,6 +2860,11 @@ class PubServer(BaseHTTPRequestHandler): if '&' in blockingActor: blockingActor=blockingActor.split('&')[0] blockingNickname=getNicknameFromActor(blockingActor) + if not blockingNickname: + print('WARN: unable to find nickname in '+blockingActor) + self._redirect_headers(originPathStr,cookie) + self.server.POSTbusy=False + return blockingDomain,blockingPort=getDomainFromActor(blockingActor) blockingDomainFull=blockingDomain if blockingPort: @@ -2842,6 +2890,11 @@ class PubServer(BaseHTTPRequestHandler): if authorized and self.path.endswith('/personoptions'): originPathStr=self.path.split('/personoptions')[0] chooserNickname=getNicknameFromActor(originPathStr) + if not chooserNickname: + print('WARN: unable to find nickname in '+originPathStr) + self._redirect_headers(originPathStr,cookie) + self.server.POSTbusy=False + return length = int(self.headers['Content-length']) optionsConfirmParams=self.rfile.read(length).decode('utf-8').replace('%3A',':').replace('%2F','/') # actor for the person @@ -2860,6 +2913,11 @@ class PubServer(BaseHTTPRequestHandler): postUrl=postUrl.split('&')[0] optionsNickname=getNicknameFromActor(optionsActor) + if not optionsNickname: + print('WARN: unable to find nickname in '+optionsActor) + self._redirect_headers(originPathStr,cookie) + self.server.POSTbusy=False + return optionsDomain,optionsPort=getDomainFromActor(optionsActor) optionsDomainFull=optionsDomain if optionsPort: diff --git a/delete.py b/delete.py index f631f9fa..389b6871 100644 --- a/delete.py +++ b/delete.py @@ -68,7 +68,7 @@ def createDelete(session,baseDir: str,federationList: [], \ deleteNickname=None deleteDomain=None deletePort=None - if '/users/' in objectUrl: + if '/users/' in objectUrl or '/profile/' in objectUrl: deleteNickname=getNicknameFromActor(objectUrl) deleteDomain,deletePort=getDomainFromActor(objectUrl) diff --git a/epicyon.py b/epicyon.py index 17f9e4df..6e297e74 100644 --- a/epicyon.py +++ b/epicyon.py @@ -737,6 +737,9 @@ if args.follow: sys.exit() followNickname=getNicknameFromActor(args.follow) + if not followNickname: + print('Unable to find nickname in '+args.follow) + sys.exit() followDomain,followPort=getDomainFromActor(args.follow) session = createSession(domain,port,useTor) @@ -772,6 +775,9 @@ if args.unfollow: sys.exit() followNickname=getNicknameFromActor(args.unfollow) + if not followNickname: + print('WARN: unable to find nickname in '+args.unfollow) + sys.exit() followDomain,followPort=getDomainFromActor(args.unfollow) session = createSession(domain,port,useTor) diff --git a/follow.py b/follow.py index 39f7cba5..31509499 100644 --- a/follow.py +++ b/follow.py @@ -39,6 +39,9 @@ def isFollowingActor(baseDir: str,nickname: str,domain: str,actor: str) -> bool: if actor in open(followingFile).read(): return True followingNickname=getNicknameFromActor(actor) + if not followingNickname: + print('WARN: unable to find nickname in '+actor) + return False followingDomain,followingPort=getDomainFromActor(actor) followingHandle=followingNickname+'@'+followingDomain if followingPort: @@ -803,6 +806,9 @@ def outboxUndoFollow(baseDir: str,messageJson: {},debug: bool) -> None: print('DEBUG: undo follow arrived in outbox') nicknameFollower=getNicknameFromActor(messageJson['object']['actor']) + if not nicknameFollower: + print('WARN: unable to find nickname in '+messageJson['object']['actor']) + return domainFollower,portFollower=getDomainFromActor(messageJson['object']['actor']) domainFollowerFull=domainFollower if portFollower: @@ -811,6 +817,9 @@ def outboxUndoFollow(baseDir: str,messageJson: {},debug: bool) -> None: domainFollowerFull=domainFollower+':'+str(portFollower) nicknameFollowing=getNicknameFromActor(messageJson['object']['object']) + if not nicknameFollowing: + print('WARN: unable to find nickname in '+messageJson['object']['object']) + return domainFollowing,portFollowing=getDomainFromActor(messageJson['object']['object']) domainFollowingFull=domainFollowing if portFollowing: diff --git a/inbox.py b/inbox.py index d0353682..a50e9e1a 100644 --- a/inbox.py +++ b/inbox.py @@ -188,11 +188,10 @@ def savePostToInboxQueue(baseDir: str,httpPrefix: str, \ if postJsonObject.get('actor'): actor=postJsonObject['actor'] postNickname=getNicknameFromActor(postJsonObject['actor']) - postDomain,postPort=getDomainFromActor(postJsonObject['actor']) if not postNickname: - pprint(postJsonObject) - print('No post Nickname in actor') + print('No post Nickname in actor '+postJsonObject['actor']) return None + postDomain,postPort=getDomainFromActor(postJsonObject['actor']) if not postDomain: pprint(postJsonObject) print('No post Domain in actor') @@ -511,6 +510,9 @@ def receiveUndoFollow(session,baseDir: str,httpPrefix: str, \ return False nicknameFollower=getNicknameFromActor(messageJson['object']['actor']) + if not nicknameFollower: + print('WARN: unable to find nickname in '+messageJson['object']['actor']) + return False domainFollower,portFollower=getDomainFromActor(messageJson['object']['actor']) domainFollowerFull=domainFollower if portFollower: @@ -519,6 +521,9 @@ def receiveUndoFollow(session,baseDir: str,httpPrefix: str, \ domainFollowerFull=domainFollower+':'+str(portFollower) nicknameFollowing=getNicknameFromActor(messageJson['object']['object']) + if not nicknameFollowing: + print('WARN: unable to find nickname in '+messageJson['object']['object']) + return False domainFollowing,portFollowing=getDomainFromActor(messageJson['object']['object']) domainFollowingFull=domainFollowing if portFollowing: @@ -679,30 +684,32 @@ def receiveUpdate(session,baseDir: str, \ messageJson['object']['type']=='Service': if messageJson['object'].get('url') and messageJson['object'].get('id'): print('Request to update actor: '+messageJson['actor']) - updateDomain,updatePort=getDomainFromActor(messageJson['actor']) - updateNickname=getNicknameFromActor(messageJson['actor']) - if personReceiveUpdate(baseDir, \ - domain,port, \ - updateNickname,updateDomain,updatePort, \ - messageJson['object'], \ - personCache,debug): - if debug: - print('DEBUG: Profile update was received for '+messageJson['object']['url']) - return True + updateNickname=getNicknameFromActor(messageJson['actor']) + if updateNickname: + updateDomain,updatePort=getDomainFromActor(messageJson['actor']) + if personReceiveUpdate(baseDir, \ + domain,port, \ + updateNickname,updateDomain,updatePort, \ + messageJson['object'], \ + personCache,debug): + if debug: + print('DEBUG: Profile update was received for '+messageJson['object']['url']) + return True if messageJson['object'].get('capability') and messageJson['object'].get('scope'): - domain,tempPort=getDomainFromActor(messageJson['object']['scope']) nickname=getNicknameFromActor(messageJson['object']['scope']) + if nickname: + domain,tempPort=getDomainFromActor(messageJson['object']['scope']) - if messageJson['object']['type']=='Capability': - if capabilitiesReceiveUpdate(baseDir,nickname,domain,port, - messageJson['actor'], \ - messageJson['object']['id'], \ - messageJson['object']['capability'], \ - debug): - if debug: - print('DEBUG: An update was received') - return True + if messageJson['object']['type']=='Capability': + if capabilitiesReceiveUpdate(baseDir,nickname,domain,port, + messageJson['actor'], \ + messageJson['object']['id'], \ + messageJson['object']['capability'], \ + debug): + if debug: + print('DEBUG: An update was received') + return True return False def receiveLike(session,handle: str,baseDir: str, \ @@ -994,8 +1001,7 @@ def populateReplies(baseDir :str,httpPrefix :str,domain :str, \ return False replyToNickname=getNicknameFromActor(replyTo) if not replyToNickname: - if debug: - print('DEBUG: no nickname found for '+replyTo) + print('DEBUG: no nickname found for '+replyTo) return False replyToDomain,replyToPort=getDomainFromActor(replyTo) if not replyToDomain: diff --git a/like.py b/like.py index cc305b69..cc202681 100644 --- a/like.py +++ b/like.py @@ -170,7 +170,7 @@ def like(session,baseDir: str,federationList: [],nickname: str,domain: str,port: likedPostNickname=None likedPostDomain=None likedPostPort=None - if '/users/' in objectUrl: + if '/users/' in objectUrl or '/profile/' in objectUrl: likedPostNickname=getNicknameFromActor(objectUrl) likedPostDomain,likedPostPort=getDomainFromActor(objectUrl) @@ -267,7 +267,7 @@ def undolike(session,baseDir: str,federationList: [],nickname: str,domain: str,p likedPostNickname=None likedPostDomain=None likedPostPort=None - if '/users/' in objectUrl: + if '/users/' in objectUrl or '/profile/' in objectUrl: likedPostNickname=getNicknameFromActor(objectUrl) likedPostDomain,likedPostPort=getDomainFromActor(objectUrl) diff --git a/posts.py b/posts.py index 1695cad8..172a93ee 100644 --- a/posts.py +++ b/posts.py @@ -1987,6 +1987,9 @@ def sendCapabilitiesUpdate(session,baseDir: str,httpPrefix: str, \ clientToServer=False followerNickname=getNicknameFromActor(followerUrl) + if not followerNickname: + print('WARN: unable to find nickname in '+followerUrl) + return 1 followerDomain,followerPort=getDomainFromActor(followerUrl) return sendSignedJson(updateJson,session,baseDir, \ nickname,domain,port, \ diff --git a/roles.py b/roles.py index 6c07b119..f48be887 100644 --- a/roles.py +++ b/roles.py @@ -180,6 +180,9 @@ def outboxDelegate(baseDir: str,authenticatedNickname: str,messageJson: {},debug if canDelegate==False: return False nickname=getNicknameFromActor(messageJson['object']['actor']) + if not nickname: + print('WARN: unable to find nickname in '+messageJson['object']['actor']) + return False domainFull=domain if port: if port!=80 and port!=443: diff --git a/webinterface.py b/webinterface.py index 9dd30998..a03f79ae 100644 --- a/webinterface.py +++ b/webinterface.py @@ -388,6 +388,8 @@ def htmlEditProfile(baseDir: str,path: str,domain: str,port: int) -> str: pathOriginal=path path=path.replace('/inbox','').replace('/outbox','').replace('/shares','') nickname=getNicknameFromActor(path) + if not nickname: + return '' domainFull=domain if port: if port!=80 and port!=443: @@ -1416,18 +1418,22 @@ def individualPostAsHtml(baseDir: str, \ #avatarPosition=' class="right"' if '/statuses/' in postJsonObject['object']['inReplyTo']: replyNickname=getNicknameFromActor(postJsonObject['object']['inReplyTo']) - replyDomain,replyPort=getDomainFromActor(postJsonObject['object']['inReplyTo']) - if replyNickname and replyDomain: - replyDisplayName=getDisplayName(postJsonObject['object']['inReplyTo'],personCache) - if replyDisplayName: - titleStr+=' '+replyDisplayName+'' - else: - titleStr+=' @'+replyNickname+'@'+replyDomain+'' + if replyNickname: + replyDomain,replyPort=getDomainFromActor(postJsonObject['object']['inReplyTo']) + if replyNickname and replyDomain: + replyDisplayName=getDisplayName(postJsonObject['object']['inReplyTo'],personCache) + if replyDisplayName: + titleStr+=' '+replyDisplayName+'' + else: + titleStr+=' @'+replyNickname+'@'+replyDomain+'' + else: + titleStr+=' @unknown' else: postDomain=postJsonObject['object']['inReplyTo'].replace('https://','').replace('http://','').replace('dat://','') if '/' in postDomain: postDomain=postDomain.split('/',1)[0] - titleStr+=' '+postDomain+'' + if postDomain: + titleStr+=' '+postDomain+'' attachmentStr='' if postJsonObject['object'].get('attachment'): if isinstance(postJsonObject['object']['attachment'], list):