mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			Exception handling
							parent
							
								
									358cd2ea40
								
							
						
					
					
						commit
						3c6122c56c
					
				
							
								
								
									
										40
									
								
								announce.py
								
								
								
								
							
							
						
						
									
										40
									
								
								announce.py
								
								
								
								
							| 
						 | 
				
			
			@ -67,8 +67,14 @@ def undoAnnounceCollectionEntry(postFilename: str,actor: str,debug: bool) -> Non
 | 
			
		|||
    collection within a post. Note that the "shares" collection has no relation
 | 
			
		||||
    to shared items in shares.py. It's shares of posts, not shares of physical objects.
 | 
			
		||||
    """
 | 
			
		||||
    with open(postFilename, 'r') as fp:
 | 
			
		||||
        postJsonObject=commentjson.load(fp)
 | 
			
		||||
    postJsonObject=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(postFilename, 'r') as fp:
 | 
			
		||||
            postJsonObject=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if postJsonObject:
 | 
			
		||||
        if not postJsonObject.get('type'):
 | 
			
		||||
            return
 | 
			
		||||
        if postJsonObject['type']!='Create':
 | 
			
		||||
| 
						 | 
				
			
			@ -103,16 +109,24 @@ def undoAnnounceCollectionEntry(postFilename: str,actor: str,debug: bool) -> Non
 | 
			
		|||
                del postJsonObject['object']['shares']
 | 
			
		||||
            else:
 | 
			
		||||
                postJsonObject['object']['shares']['totalItems']=len(postJsonObject['object']['shares']['items'])
 | 
			
		||||
            with open(postFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)            
 | 
			
		||||
            try:
 | 
			
		||||
                with open(postFilename, 'w') as fp:
 | 
			
		||||
                    commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)            
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print(e)
 | 
			
		||||
 | 
			
		||||
def updateAnnounceCollection(postFilename: str,actor: str,debug: bool) -> None:
 | 
			
		||||
    """Updates the announcements collection within a post
 | 
			
		||||
    Confusingly this is known as "shares", but isn't the same as shared items within shares.py
 | 
			
		||||
    It's shares of posts, not shares of physical objects.
 | 
			
		||||
    """
 | 
			
		||||
    with open(postFilename, 'r') as fp:
 | 
			
		||||
        postJsonObject=commentjson.load(fp)
 | 
			
		||||
    postJsonObject=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(postFilename, 'r') as fp:
 | 
			
		||||
            postJsonObject=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    if postJsonObject:
 | 
			
		||||
        if not postJsonObject.get('object'):
 | 
			
		||||
            if debug:
 | 
			
		||||
                pprint(postJsonObject)
 | 
			
		||||
| 
						 | 
				
			
			@ -154,8 +168,11 @@ def updateAnnounceCollection(postFilename: str,actor: str,debug: bool) -> None:
 | 
			
		|||
        if debug:
 | 
			
		||||
            print('DEBUG: saving post with shares (announcements) added')
 | 
			
		||||
            pprint(postJsonObject)
 | 
			
		||||
        with open(postFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(postFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
 | 
			
		||||
def announcedByPerson(postJsonObject: {}, nickname: str,domain: str) -> bool:
 | 
			
		||||
    """Returns True if the given post is announced by the given person
 | 
			
		||||
| 
						 | 
				
			
			@ -218,8 +235,11 @@ def createAnnounce(session,baseDir: str,federationList: [], \
 | 
			
		|||
    if saveToFile:
 | 
			
		||||
        outboxDir = createOutboxDir(nickname,domain,baseDir)
 | 
			
		||||
        filename=outboxDir+'/'+newAnnounceId.replace('/','#')+'.json'
 | 
			
		||||
        with open(filename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(newAnnounce, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(filename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(newAnnounce, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
 | 
			
		||||
    announceNickname=None
 | 
			
		||||
    announceDomain=None
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,11 +26,19 @@ def setAvailability(baseDir: str,nickname: str,domain: str, \
 | 
			
		|||
    actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
        return False
 | 
			
		||||
    with open(actorFilename, 'r') as fp:
 | 
			
		||||
        actorJson=commentjson.load(fp)
 | 
			
		||||
    actorJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actorJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    if actorJson:
 | 
			
		||||
        actorJson['availability']=status
 | 
			
		||||
        with open(actorFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(actorJson, fp, indent=4, sort_keys=False)    
 | 
			
		||||
        try:
 | 
			
		||||
            with open(actorFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def getAvailability(baseDir: str,nickname: str,domain: str) -> str:
 | 
			
		||||
| 
						 | 
				
			
			@ -39,8 +47,13 @@ def getAvailability(baseDir: str,nickname: str,domain: str) -> str:
 | 
			
		|||
    actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
        return False
 | 
			
		||||
    with open(actorFilename, 'r') as fp:
 | 
			
		||||
        actorJson=commentjson.load(fp)
 | 
			
		||||
    actorJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actorJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    if actorJson:
 | 
			
		||||
        if not actorJson.get('availability'):
 | 
			
		||||
            return None
 | 
			
		||||
        return actorJson['availability']
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										7
									
								
								cache.py
								
								
								
								
							
							
						
						
									
										7
									
								
								cache.py
								
								
								
								
							| 
						 | 
				
			
			@ -26,8 +26,11 @@ def storePersonInCache(baseDir: str,personUrl: str,personJson: {},personCache: {
 | 
			
		|||
    if os.path.isdir(baseDir+'/cache/actors'):
 | 
			
		||||
        cacheFilename=baseDir+'/cache/actors/'+personUrl.replace('/','#')+'.json'
 | 
			
		||||
        if not os.path.isfile(cacheFilename):
 | 
			
		||||
            with open(cacheFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
            try:
 | 
			
		||||
                with open(cacheFilename, 'w') as fp:
 | 
			
		||||
                    commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print(e)
 | 
			
		||||
 | 
			
		||||
def getPersonFromCache(baseDir: str,personUrl: str,personCache: {}) -> {}:
 | 
			
		||||
    """Get an actor from the cache
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,8 +127,11 @@ def capabilitiesAccept(baseDir: str,httpPrefix: str, \
 | 
			
		|||
 | 
			
		||||
    # if the capability already exists then load it from file
 | 
			
		||||
    if os.path.isfile(ocapFilename):
 | 
			
		||||
        with open(ocapFilename, 'r') as fp:
 | 
			
		||||
            ocapAccept=commentjson.load(fp)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(ocapFilename, 'r') as fp:
 | 
			
		||||
                ocapAccept=commentjson.load(fp)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    # otherwise create a new capability    
 | 
			
		||||
    if not ocapAccept:
 | 
			
		||||
        acceptedActorNickname=getNicknameFromActor(acceptedActor)
 | 
			
		||||
| 
						 | 
				
			
			@ -152,8 +155,11 @@ def capabilitiesAccept(baseDir: str,httpPrefix: str, \
 | 
			
		|||
            ocapAccept['actor']=httpPrefix+"://"+fullDomain+'/users/'+nickname
 | 
			
		||||
 | 
			
		||||
    if saveToFile:
 | 
			
		||||
        with open(ocapFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(ocapAccept, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(ocapFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(ocapAccept, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    return ocapAccept
 | 
			
		||||
 | 
			
		||||
def capabilitiesGrantedSave(baseDir :str,nickname :str,domain :str,ocap: {}) -> bool:
 | 
			
		||||
| 
						 | 
				
			
			@ -165,8 +171,11 @@ def capabilitiesGrantedSave(baseDir :str,nickname :str,domain :str,ocap: {}) ->
 | 
			
		|||
    ocapFilename=getOcapFilename(baseDir,nickname,domain,ocap['actor'],'granted')
 | 
			
		||||
    if not ocapFilename:
 | 
			
		||||
        return False
 | 
			
		||||
    with open(ocapFilename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(ocap, fp, indent=4, sort_keys=False)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(ocapFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(ocap, fp, indent=4, sort_keys=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def capabilitiesUpdate(baseDir: str,httpPrefix: str, \
 | 
			
		||||
| 
						 | 
				
			
			@ -208,8 +217,11 @@ def capabilitiesUpdate(baseDir: str,httpPrefix: str, \
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    # read the existing capability
 | 
			
		||||
    with open(ocapFilename, 'r') as fp:
 | 
			
		||||
        ocapJson=commentjson.load(fp)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(ocapFilename, 'r') as fp:
 | 
			
		||||
            ocapJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    # set the new capabilities list. eg. ["inbox:write","objects:read"]
 | 
			
		||||
    ocapJson['capability']=updateCaps
 | 
			
		||||
| 
						 | 
				
			
			@ -228,9 +240,12 @@ def capabilitiesUpdate(baseDir: str,httpPrefix: str, \
 | 
			
		|||
    ocapUpdate['object']=ocapJson
 | 
			
		||||
 | 
			
		||||
    # save it again
 | 
			
		||||
    with open(ocapFilename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(ocapJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    
 | 
			
		||||
    try:
 | 
			
		||||
        with open(ocapFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(ocapJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    return ocapUpdate
 | 
			
		||||
 | 
			
		||||
def capabilitiesReceiveUpdate(baseDir :str, \
 | 
			
		||||
| 
						 | 
				
			
			@ -251,12 +266,21 @@ def capabilitiesReceiveUpdate(baseDir :str, \
 | 
			
		|||
            print(ocapFilename)
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    with open(ocapFilename, 'r') as fp:
 | 
			
		||||
        ocapJson=commentjson.load(fp)
 | 
			
		||||
    ocapJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(ocapFilename, 'r') as fp:
 | 
			
		||||
            ocapJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if ocapJson:
 | 
			
		||||
        ocapJson['id']=newCapabilitiesId
 | 
			
		||||
        ocapJson['capability']=capabilityList
 | 
			
		||||
    
 | 
			
		||||
        with open(ocapFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(ocapJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
            return True
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            with open(ocapFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(ocapJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
                return True
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    return False
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,8 +29,11 @@ def setConfigParam(baseDir: str, variableName: str, variableValue) -> None:
 | 
			
		|||
    """
 | 
			
		||||
    createConfig(baseDir)
 | 
			
		||||
    configFilename=baseDir+'/config.json'
 | 
			
		||||
    with open(configFilename, 'r') as fp:
 | 
			
		||||
        configJson=commentjson.load(fp)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(configFilename, 'r') as fp:
 | 
			
		||||
            configJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    configJson[variableName]=variableValue
 | 
			
		||||
    try:
 | 
			
		||||
        with open(configFilename, 'w') as fp:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								daemon.py
								
								
								
								
							
							
						
						
									
										14
									
								
								daemon.py
								
								
								
								
							| 
						 | 
				
			
			@ -3014,13 +3014,19 @@ class PubServer(BaseHTTPRequestHandler):
 | 
			
		|||
                                os.remove(allowedInstancesFilename)
 | 
			
		||||
                        # save actor json file within accounts
 | 
			
		||||
                        if actorChanged:
 | 
			
		||||
                            with open(actorFilename, 'w') as fp:
 | 
			
		||||
                                commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
                            try:
 | 
			
		||||
                                with open(actorFilename, 'w') as fp:
 | 
			
		||||
                                    commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
                            except Exception as e:
 | 
			
		||||
                                print(e)
 | 
			
		||||
                            # also copy to the actors cache and personCache in memory
 | 
			
		||||
                            storePersonInCache(self.server.baseDir,actorJson['id'],actorJson,self.server.personCache)
 | 
			
		||||
                            actorCacheFilename=self.server.baseDir+'/cache/actors/'+actorJson['id'].replace('/','#')+'.json'
 | 
			
		||||
                            with open(actorCacheFilename, 'w') as fp:
 | 
			
		||||
                                commentjson.dump(actorJson, fp, indent=4, sort_keys=False)                            
 | 
			
		||||
                            try:
 | 
			
		||||
                                with open(actorCacheFilename, 'w') as fp:
 | 
			
		||||
                                    commentjson.dump(actorJson, fp, indent=4, sort_keys=False)                            
 | 
			
		||||
                            except Exception as e:
 | 
			
		||||
                                print(e)
 | 
			
		||||
                            # send actor update to followers
 | 
			
		||||
                            updateActorJson={
 | 
			
		||||
                                'type': 'Update',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										29
									
								
								follow.py
								
								
								
								
							
							
						
						
									
										29
									
								
								follow.py
								
								
								
								
							| 
						 | 
				
			
			@ -319,8 +319,13 @@ def followApprovalRequired(baseDir: str,nicknameToFollow: str, \
 | 
			
		|||
        domainToFollow=domainToFollow.split(':')[0]
 | 
			
		||||
    actorFilename=baseDir+'/accounts/'+nicknameToFollow+'@'+domainToFollow+'.json'
 | 
			
		||||
    if os.path.isfile(actorFilename):
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actor=commentjson.load(fp)
 | 
			
		||||
        actor=None
 | 
			
		||||
        try:
 | 
			
		||||
            with open(actorFilename, 'r') as fp:
 | 
			
		||||
                actor=commentjson.load(fp)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
        if actor:
 | 
			
		||||
            if actor.get('manuallyApprovesFollowers'):
 | 
			
		||||
                manuallyApproveFollows=actor['manuallyApprovesFollowers']
 | 
			
		||||
            else:
 | 
			
		||||
| 
						 | 
				
			
			@ -384,9 +389,12 @@ def storeFollowRequest(baseDir: str, \
 | 
			
		|||
    if not os.path.isdir(requestsDir):
 | 
			
		||||
        os.mkdir(requestsDir)
 | 
			
		||||
    followActivityfilename=requestsDir+'/'+approveHandle+'.follow'
 | 
			
		||||
    with open(followActivityfilename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(followJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        return True
 | 
			
		||||
    try:
 | 
			
		||||
        with open(followActivityfilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(followJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
            return True
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    return False
 | 
			
		||||
 | 
			
		||||
def receiveFollowRequest(session,baseDir: str,httpPrefix: str, \
 | 
			
		||||
| 
						 | 
				
			
			@ -828,9 +836,14 @@ def getFollowersOfActor(baseDir :str,actor :str,debug: bool) -> {}:
 | 
			
		|||
                        ocapFilename=baseDir+'/accounts/'+account+'/ocap/accept/'+httpPrefix+':##'+domain+':'+str(port)+'#users#'+nickname+'.json'
 | 
			
		||||
                        if debug:
 | 
			
		||||
                            print('DEBUG: checking capabilities of'+account)
 | 
			
		||||
                        if os.path.isfile(ocapFilename):                        
 | 
			
		||||
                            with open(ocapFilename, 'r') as fp:
 | 
			
		||||
                                ocapJson=commentjson.load(fp)
 | 
			
		||||
                        if os.path.isfile(ocapFilename):
 | 
			
		||||
                            ocapJson=None
 | 
			
		||||
                            try:
 | 
			
		||||
                                with open(ocapFilename, 'r') as fp:
 | 
			
		||||
                                    ocapJson=commentjson.load(fp)
 | 
			
		||||
                            except Exception as e:
 | 
			
		||||
                                print(e)
 | 
			
		||||
                            if ocapJson:
 | 
			
		||||
                                if ocapJson.get('id'):
 | 
			
		||||
                                    if debug:
 | 
			
		||||
                                        print('DEBUG: capabilities id found for '+account)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										40
									
								
								inbox.py
								
								
								
								
							
							
						
						
									
										40
									
								
								inbox.py
								
								
								
								
							| 
						 | 
				
			
			@ -282,9 +282,11 @@ def savePostToInboxQueue(baseDir: str,httpPrefix: str, \
 | 
			
		|||
    if debug:
 | 
			
		||||
        print('Inbox queue item created')
 | 
			
		||||
        pprint(newQueueItem)
 | 
			
		||||
    
 | 
			
		||||
    with open(filename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(newQueueItem, fp, indent=4, sort_keys=False)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(filename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(newQueueItem, fp, indent=4, sort_keys=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    return filename
 | 
			
		||||
 | 
			
		||||
def inboxCheckCapabilities(baseDir :str,nickname :str,domain :str, \
 | 
			
		||||
| 
						 | 
				
			
			@ -669,9 +671,12 @@ def personReceiveUpdate(baseDir: str, \
 | 
			
		|||
    # save to cache in memory
 | 
			
		||||
    storePersonInCache(baseDir,personJson['id'],personJson,personCache)
 | 
			
		||||
    # save to cache on file
 | 
			
		||||
    with open(actorFilename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        print('actor updated for '+personJson['id'])
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
            print('actor updated for '+personJson['id'])
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    # remove avatar if it exists so that it will be refreshed later
 | 
			
		||||
    # when a timeline is constructed
 | 
			
		||||
| 
						 | 
				
			
			@ -1263,13 +1268,19 @@ def inboxAfterCapabilities(session,keyId: str,handle: str,messageJson: {}, \
 | 
			
		|||
    if messageJson.get('postNickname'):
 | 
			
		||||
        if validPostContent(messageJson['post'],maxMentions):
 | 
			
		||||
            obtainReplyToAvatar(baseDir,personCache,messageJson['post'])
 | 
			
		||||
            with open(destinationFilename, 'w+') as fp:
 | 
			
		||||
                commentjson.dump(messageJson['post'], fp, indent=4, sort_keys=False)
 | 
			
		||||
            try:
 | 
			
		||||
                with open(destinationFilename, 'w+') as fp:
 | 
			
		||||
                    commentjson.dump(messageJson['post'], fp, indent=4, sort_keys=False)
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print(e)
 | 
			
		||||
    else:
 | 
			
		||||
        if validPostContent(messageJson,maxMentions):
 | 
			
		||||
            obtainReplyToAvatar(baseDir,personCache,messageJson)
 | 
			
		||||
            with open(destinationFilename, 'w+') as fp:
 | 
			
		||||
                commentjson.dump(messageJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
            try:
 | 
			
		||||
                with open(destinationFilename, 'w+') as fp:
 | 
			
		||||
                    commentjson.dump(messageJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print(e)
 | 
			
		||||
 | 
			
		||||
    if not os.path.isfile(destinationFilename):
 | 
			
		||||
        return False
 | 
			
		||||
| 
						 | 
				
			
			@ -1613,9 +1624,12 @@ def runInboxQueue(projectVersion: str, \
 | 
			
		|||
            if len(recipientsDictFollowers)>0:
 | 
			
		||||
                sharedInboxPostFilename=queueJson['destination'].replace(inboxHandle,inboxHandle)
 | 
			
		||||
                if not os.path.isfile(sharedInboxPostFilename):
 | 
			
		||||
                    with open(sharedInboxPostFilename, 'w') as fp:
 | 
			
		||||
                        commentjson.dump(queueJson['post'],fp,indent=4, \
 | 
			
		||||
                                         sort_keys=False)
 | 
			
		||||
                    try:
 | 
			
		||||
                        with open(sharedInboxPostFilename, 'w') as fp:
 | 
			
		||||
                            commentjson.dump(queueJson['post'],fp,indent=4, \
 | 
			
		||||
                                             sort_keys=False)
 | 
			
		||||
                    except Exception as e:
 | 
			
		||||
                        print(e)
 | 
			
		||||
 | 
			
		||||
            # for posts addressed to specific accounts
 | 
			
		||||
            for handle,capsId in recipientsDict.items():              
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										36
									
								
								like.py
								
								
								
								
							
							
						
						
									
										36
									
								
								like.py
								
								
								
								
							| 
						 | 
				
			
			@ -21,9 +21,15 @@ from posts import getPersonBox
 | 
			
		|||
 | 
			
		||||
def undoLikesCollectionEntry(postFilename: str,objectUrl: str,actor: str,debug: bool) -> None:
 | 
			
		||||
    """Undoes a like for a particular actor
 | 
			
		||||
    """    
 | 
			
		||||
    with open(postFilename, 'r') as fp:
 | 
			
		||||
        postJsonObject=commentjson.load(fp)
 | 
			
		||||
    """
 | 
			
		||||
    postJsonObject=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(postFilename, 'r') as fp:
 | 
			
		||||
            postJsonObject=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if postJsonObject:
 | 
			
		||||
        if not postJsonObject.get('type'):
 | 
			
		||||
            return
 | 
			
		||||
        if postJsonObject['type']!='Create':
 | 
			
		||||
| 
						 | 
				
			
			@ -60,8 +66,11 @@ def undoLikesCollectionEntry(postFilename: str,objectUrl: str,actor: str,debug:
 | 
			
		|||
                del postJsonObject['object']['likes']
 | 
			
		||||
            else:
 | 
			
		||||
                postJsonObject['object']['likes']['totalItems']=len(postJsonObject['likes']['items'])
 | 
			
		||||
            with open(postFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)            
 | 
			
		||||
            try:
 | 
			
		||||
                with open(postFilename, 'w') as fp:
 | 
			
		||||
                    commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)            
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print(e)
 | 
			
		||||
 | 
			
		||||
def likedByPerson(postJsonObject: {}, nickname: str,domain: str) -> bool:
 | 
			
		||||
    """Returns True if the given post is liked by the given person
 | 
			
		||||
| 
						 | 
				
			
			@ -93,8 +102,14 @@ def noOfLikes(postJsonObject: {}) -> int:
 | 
			
		|||
def updateLikesCollection(postFilename: str,objectUrl: str, actor: str,debug: bool) -> None:
 | 
			
		||||
    """Updates the likes collection within a post
 | 
			
		||||
    """
 | 
			
		||||
    with open(postFilename, 'r') as fp:
 | 
			
		||||
        postJsonObject=commentjson.load(fp)
 | 
			
		||||
    postJsonObject=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(postFilename, 'r') as fp:
 | 
			
		||||
            postJsonObject=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if postJsonObject:
 | 
			
		||||
        if not postJsonObject.get('object'):
 | 
			
		||||
            if debug:
 | 
			
		||||
                pprint(postJsonObject)
 | 
			
		||||
| 
						 | 
				
			
			@ -133,8 +148,11 @@ def updateLikesCollection(postFilename: str,objectUrl: str, actor: str,debug: bo
 | 
			
		|||
        if debug:
 | 
			
		||||
            print('DEBUG: saving post with likes added')
 | 
			
		||||
            pprint(postJsonObject)
 | 
			
		||||
        with open(postFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(postFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
 | 
			
		||||
def like(session,baseDir: str,federationList: [],nickname: str,domain: str,port: int, \
 | 
			
		||||
         ccList: [],httpPrefix: str,objectUrl: str,clientToServer: bool, \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,8 +97,13 @@ def manualApproveFollowRequest(session,baseDir: str, \
 | 
			
		|||
                requestsDir=accountsDir+'/requests'
 | 
			
		||||
                followActivityfilename=requestsDir+'/'+handle+'.follow'
 | 
			
		||||
                if os.path.isfile(followActivityfilename):
 | 
			
		||||
                    with open(followActivityfilename, 'r') as fp:
 | 
			
		||||
                        followJson=commentjson.load(fp)
 | 
			
		||||
                    followJson=None
 | 
			
		||||
                    try:
 | 
			
		||||
                        with open(followActivityfilename, 'r') as fp:
 | 
			
		||||
                            followJson=commentjson.load(fp)
 | 
			
		||||
                    except Exception as e:
 | 
			
		||||
                        print(e)
 | 
			
		||||
                    if followJson:
 | 
			
		||||
                        approveNickname=approveHandle.split('@')[0]
 | 
			
		||||
                        approveDomain=approveHandle.split('@')[1].replace('\n','')
 | 
			
		||||
                        approvePort=port2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										83
									
								
								person.py
								
								
								
								
							
							
						
						
									
										83
									
								
								person.py
								
								
								
								
							| 
						 | 
				
			
			@ -90,12 +90,21 @@ def setProfileImage(baseDir: str,httpPrefix :str,nickname: str,domain: str, \
 | 
			
		|||
        iconFilename=iconFilenameBase+'.gif'
 | 
			
		||||
    profileFilename=baseDir+'/accounts/'+handle+'/'+iconFilename
 | 
			
		||||
 | 
			
		||||
    with open(personFilename, 'r') as fp:
 | 
			
		||||
        personJson=commentjson.load(fp)
 | 
			
		||||
    personJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(personFilename, 'r') as fp:
 | 
			
		||||
            personJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if personJson:
 | 
			
		||||
        personJson[iconFilenameBase]['mediaType']=mediaType
 | 
			
		||||
        personJson[iconFilenameBase]['url']=httpPrefix+'://'+fullDomain+'/users/'+nickname+'/'+iconFilename
 | 
			
		||||
        with open(personFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(personFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
            
 | 
			
		||||
        cmd = '/usr/bin/convert '+imageFilename+' -size '+resolution+' -quality 50 '+profileFilename
 | 
			
		||||
        subprocess.call(cmd, shell=True)
 | 
			
		||||
| 
						 | 
				
			
			@ -115,11 +124,21 @@ def setOrganizationScheme(baseDir: str,nickname: str,domain: str, \
 | 
			
		|||
    actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
        return False
 | 
			
		||||
    with open(actorFilename, 'r') as fp:
 | 
			
		||||
        actorJson=commentjson.load(fp)
 | 
			
		||||
 | 
			
		||||
    actorJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actorJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if actorJson:
 | 
			
		||||
        actorJson['orgSchema']=schema
 | 
			
		||||
        with open(actorFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(actorJson, fp, indent=4, sort_keys=False)    
 | 
			
		||||
        try:
 | 
			
		||||
            with open(actorFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def accountExists(baseDir: str,nickname: str,domain: str) -> bool:
 | 
			
		||||
| 
						 | 
				
			
			@ -239,8 +258,11 @@ def createPersonBase(baseDir: str,nickname: str,domain: str,port: int, \
 | 
			
		|||
        if not os.path.isdir(baseDir+peopleSubdir+'/'+handle+'/queue'):
 | 
			
		||||
            os.mkdir(baseDir+peopleSubdir+'/'+handle+'/queue')
 | 
			
		||||
        filename=baseDir+peopleSubdir+'/'+handle+'.json'
 | 
			
		||||
        with open(filename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(newPerson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(filename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(newPerson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
 | 
			
		||||
        # save to cache
 | 
			
		||||
        if not os.path.isdir(baseDir+'/cache'):
 | 
			
		||||
| 
						 | 
				
			
			@ -248,8 +270,11 @@ def createPersonBase(baseDir: str,nickname: str,domain: str,port: int, \
 | 
			
		|||
        if not os.path.isdir(baseDir+'/cache/actors'):
 | 
			
		||||
            os.mkdir(baseDir+'/cache/actors')
 | 
			
		||||
        cacheFilename=baseDir+'/cache/actors/'+newPerson['id'].replace('/','#')+'.json'
 | 
			
		||||
        with open(cacheFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(newPerson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(cacheFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(newPerson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
 | 
			
		||||
        # save the private key
 | 
			
		||||
        privateKeysSubdir='/keys/private'
 | 
			
		||||
| 
						 | 
				
			
			@ -504,14 +529,22 @@ def setDisplayNickname(baseDir: str,nickname: str, domain: str, \
 | 
			
		|||
    filename=baseDir+'/accounts/'+handle.lower()+'.json'
 | 
			
		||||
    if not os.path.isfile(filename):
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    personJson=None
 | 
			
		||||
    with open(filename, 'r') as fp:
 | 
			
		||||
        personJson=commentjson.load(fp)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(filename, 'r') as fp:
 | 
			
		||||
            personJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
            
 | 
			
		||||
    if not personJson:
 | 
			
		||||
        return False
 | 
			
		||||
    personJson['name']=displayName
 | 
			
		||||
    with open(filename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(filename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def setBio(baseDir: str,nickname: str, domain: str, bio: str) -> bool:
 | 
			
		||||
| 
						 | 
				
			
			@ -521,16 +554,26 @@ def setBio(baseDir: str,nickname: str, domain: str, bio: str) -> bool:
 | 
			
		|||
    filename=baseDir+'/accounts/'+handle.lower()+'.json'
 | 
			
		||||
    if not os.path.isfile(filename):
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    personJson=None
 | 
			
		||||
    with open(filename, 'r') as fp:
 | 
			
		||||
        personJson=commentjson.load(fp)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(filename, 'r') as fp:
 | 
			
		||||
            personJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if not personJson:
 | 
			
		||||
        return False
 | 
			
		||||
    if not personJson.get('summary'):
 | 
			
		||||
        return False
 | 
			
		||||
    personJson['summary']=bio
 | 
			
		||||
    with open(filename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        with open(filename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(personJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
        
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def isSuspended(baseDir: str,nickname: str) -> bool:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								posts.py
								
								
								
								
							
							
						
						
									
										16
									
								
								posts.py
								
								
								
								
							| 
						 | 
				
			
			@ -413,8 +413,11 @@ def savePostToBox(baseDir: str,httpPrefix: str,postId: str, \
 | 
			
		|||
         
 | 
			
		||||
    boxDir = createPersonDir(nickname,domain,baseDir,boxname)
 | 
			
		||||
    filename=boxDir+'/'+postId.replace('/','#')+'.json'
 | 
			
		||||
    with open(filename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(filename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    return filename
 | 
			
		||||
 | 
			
		||||
def updateHashtagsIndex(baseDir: str,tag: {},newPostId: str) -> None:
 | 
			
		||||
| 
						 | 
				
			
			@ -2282,7 +2285,10 @@ def downloadAnnounce(session,baseDir: str,httpPrefix: str,nickname: str,domain:
 | 
			
		|||
                rejectAnnounce(announceFilename)
 | 
			
		||||
                return None
 | 
			
		||||
        postJsonObject=announcedJson
 | 
			
		||||
        with open(announceFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)
 | 
			
		||||
            return postJsonObject
 | 
			
		||||
        try:
 | 
			
		||||
            with open(announceFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(postJsonObject, fp, indent=4, sort_keys=False)
 | 
			
		||||
                return postJsonObject
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    return None
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										46
									
								
								roles.py
								
								
								
								
							
							
						
						
									
										46
									
								
								roles.py
								
								
								
								
							| 
						 | 
				
			
			@ -28,13 +28,22 @@ def clearModeratorStatus(baseDir: str) -> None:
 | 
			
		|||
        if filename.endswith(".json") and '@' in filename: 
 | 
			
		||||
            filename=os.path.join(baseDir+'/accounts/', filename)
 | 
			
		||||
            if '"moderator"' in open(filename).read():
 | 
			
		||||
                with open(filename, 'r') as fp:
 | 
			
		||||
                    actorJson=commentjson.load(fp)
 | 
			
		||||
                actorJson=None
 | 
			
		||||
                try:
 | 
			
		||||
                    with open(filename, 'r') as fp:
 | 
			
		||||
                        actorJson=commentjson.load(fp)
 | 
			
		||||
                except Exception as e:
 | 
			
		||||
                    print(e)
 | 
			
		||||
 | 
			
		||||
                if actorJson:
 | 
			
		||||
                    if actorJson['roles'].get('instance'):
 | 
			
		||||
                        if 'moderator' in actorJson['roles']['instance']:
 | 
			
		||||
                            actorJson['roles']['instance'].remove('moderator')
 | 
			
		||||
                            with open(filename, 'w') as fp:
 | 
			
		||||
                                commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
                            try:
 | 
			
		||||
                                with open(filename, 'w') as fp:
 | 
			
		||||
                                    commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
                            except Exception as e:
 | 
			
		||||
                                print(e)
 | 
			
		||||
 | 
			
		||||
def addModerator(baseDir: str,nickname: str,domain: str) -> None:
 | 
			
		||||
    """Adds a moderator nickname to the file
 | 
			
		||||
| 
						 | 
				
			
			@ -87,8 +96,15 @@ def setRole(baseDir: str,nickname: str,domain: str, \
 | 
			
		|||
    actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
        return False
 | 
			
		||||
    with open(actorFilename, 'r') as fp:
 | 
			
		||||
        actorJson=commentjson.load(fp)
 | 
			
		||||
 | 
			
		||||
    actorJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actorJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if actorJson:        
 | 
			
		||||
        if role:
 | 
			
		||||
            # add the role
 | 
			
		||||
            if project=='instance' and 'role'=='moderator':
 | 
			
		||||
| 
						 | 
				
			
			@ -107,8 +123,11 @@ def setRole(baseDir: str,nickname: str,domain: str, \
 | 
			
		|||
                # if the project contains no roles then remove it
 | 
			
		||||
                if len(actorJson['roles'][project])==0:
 | 
			
		||||
                    del actorJson['roles'][project]
 | 
			
		||||
        with open(actorFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(actorJson, fp, indent=4, sort_keys=False)    
 | 
			
		||||
        try:
 | 
			
		||||
            with open(actorFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(actorJson, fp, indent=4, sort_keys=False)    
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def getRoles(baseDir: str,nickname: str,domain: str, \
 | 
			
		||||
| 
						 | 
				
			
			@ -118,8 +137,15 @@ def getRoles(baseDir: str,nickname: str,domain: str, \
 | 
			
		|||
    actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
        return False
 | 
			
		||||
    with open(actorFilename, 'r') as fp:
 | 
			
		||||
        actorJson=commentjson.load(fp)
 | 
			
		||||
 | 
			
		||||
    actorJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actorJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if actorJson:
 | 
			
		||||
        if not actorJson.get('roles'):
 | 
			
		||||
            return None
 | 
			
		||||
        if not actorJson['roles'].get(project):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										69
									
								
								shares.py
								
								
								
								
							
							
						
						
									
										69
									
								
								shares.py
								
								
								
								
							| 
						 | 
				
			
			@ -25,9 +25,12 @@ def removeShare(baseDir: str,nickname: str,domain: str, \
 | 
			
		|||
    """Removes a share for a person
 | 
			
		||||
    """
 | 
			
		||||
    sharesFilename=baseDir+'/accounts/'+nickname+'@'+domain+'/shares.json'
 | 
			
		||||
    if os.path.isfile(sharesFilename):    
 | 
			
		||||
        with open(sharesFilename, 'r') as fp:
 | 
			
		||||
            sharesJson=commentjson.load(fp)
 | 
			
		||||
    if os.path.isfile(sharesFilename):
 | 
			
		||||
        try:
 | 
			
		||||
            with open(sharesFilename, 'r') as fp:
 | 
			
		||||
                sharesJson=commentjson.load(fp)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
 | 
			
		||||
    itemID=displayName.replace(' ','')
 | 
			
		||||
    if sharesJson.get(itemID):
 | 
			
		||||
| 
						 | 
				
			
			@ -42,8 +45,11 @@ def removeShare(baseDir: str,nickname: str,domain: str, \
 | 
			
		|||
                os.remove(itemIDfile+'.gif')
 | 
			
		||||
        # remove the item itself
 | 
			
		||||
        del sharesJson[itemID]
 | 
			
		||||
        with open(sharesFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(sharesJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(sharesFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(sharesJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
 | 
			
		||||
def addShare(baseDir: str, \
 | 
			
		||||
             httpPrefix: str,nickname: str,domain: str,port: int, \
 | 
			
		||||
| 
						 | 
				
			
			@ -59,9 +65,12 @@ def addShare(baseDir: str, \
 | 
			
		|||
    """
 | 
			
		||||
    sharesFilename=baseDir+'/accounts/'+nickname+'@'+domain+'/shares.json'
 | 
			
		||||
    sharesJson={}
 | 
			
		||||
    if os.path.isfile(sharesFilename):    
 | 
			
		||||
        with open(sharesFilename, 'r') as fp:
 | 
			
		||||
            sharesJson=commentjson.load(fp)
 | 
			
		||||
    if os.path.isfile(sharesFilename):
 | 
			
		||||
        try:
 | 
			
		||||
            with open(sharesFilename, 'r') as fp:
 | 
			
		||||
                sharesJson=commentjson.load(fp)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
 | 
			
		||||
    duration=duration.lower()
 | 
			
		||||
    durationSec=0
 | 
			
		||||
| 
						 | 
				
			
			@ -137,8 +146,11 @@ def addShare(baseDir: str, \
 | 
			
		|||
        "expire": durationSec
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    with open(sharesFilename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(sharesJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(sharesFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(sharesJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
def expireShares(baseDir: str,nickname: str,domain: str) -> None:
 | 
			
		||||
    """Removes expired items from shares
 | 
			
		||||
| 
						 | 
				
			
			@ -149,8 +161,13 @@ def expireShares(baseDir: str,nickname: str,domain: str) -> None:
 | 
			
		|||
    handle=nickname+'@'+handleDomain
 | 
			
		||||
    sharesFilename=baseDir+'/accounts/'+handle+'/shares.json'    
 | 
			
		||||
    if os.path.isfile(sharesFilename):
 | 
			
		||||
        with open(sharesFilename, 'r') as fp:
 | 
			
		||||
            sharesJson=commentjson.load(fp)
 | 
			
		||||
        sharesJson=None
 | 
			
		||||
        try:
 | 
			
		||||
            with open(sharesFilename, 'r') as fp:
 | 
			
		||||
                sharesJson=commentjson.load(fp)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
        if sharesJson:
 | 
			
		||||
            currTime=int(time.time())
 | 
			
		||||
            deleteItemID=[]
 | 
			
		||||
            for itemID,item in sharesJson.items():
 | 
			
		||||
| 
						 | 
				
			
			@ -167,9 +184,12 @@ def expireShares(baseDir: str,nickname: str,domain: str) -> None:
 | 
			
		|||
                        os.remove(itemIDfile+'.jpg')
 | 
			
		||||
                    if os.path.isfile(itemIDfile+'.gif'):
 | 
			
		||||
                        os.remove(itemIDfile+'.gif')
 | 
			
		||||
                with open(sharesFilename, 'w') as fp:
 | 
			
		||||
                    commentjson.dump(sharesJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        
 | 
			
		||||
                try:
 | 
			
		||||
                    with open(sharesFilename, 'w') as fp:
 | 
			
		||||
                        commentjson.dump(sharesJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
                except Exception as e:
 | 
			
		||||
                    print(e)
 | 
			
		||||
 | 
			
		||||
def getSharesFeedForPerson(baseDir: str, \
 | 
			
		||||
                           domain: str,port: int, \
 | 
			
		||||
                           path: str,httpPrefix: str, \
 | 
			
		||||
| 
						 | 
				
			
			@ -219,9 +239,12 @@ def getSharesFeedForPerson(baseDir: str, \
 | 
			
		|||
    if headerOnly:
 | 
			
		||||
        noOfShares=0
 | 
			
		||||
        if os.path.isfile(sharesFilename):
 | 
			
		||||
            with open(sharesFilename, 'r') as fp:
 | 
			
		||||
                sharesJson=commentjson.load(fp)
 | 
			
		||||
                noOfShares=len(sharesJson.items())
 | 
			
		||||
            try:
 | 
			
		||||
                with open(sharesFilename, 'r') as fp:
 | 
			
		||||
                    sharesJson=commentjson.load(fp)
 | 
			
		||||
                    noOfShares=len(sharesJson.items())
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print(e)
 | 
			
		||||
        shares = {
 | 
			
		||||
            '@context': 'https://www.w3.org/ns/activitystreams',
 | 
			
		||||
            'first': httpPrefix+'://'+domain+'/users/'+nickname+'/shares?page=1',
 | 
			
		||||
| 
						 | 
				
			
			@ -249,8 +272,14 @@ def getSharesFeedForPerson(baseDir: str, \
 | 
			
		|||
    pageCtr=0
 | 
			
		||||
    totalCtr=0
 | 
			
		||||
 | 
			
		||||
    with open(sharesFilename, 'r') as fp:
 | 
			
		||||
        sharesJson=commentjson.load(fp)
 | 
			
		||||
    sharesJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(sharesFilename, 'r') as fp:
 | 
			
		||||
            sharesJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if sharesJson:
 | 
			
		||||
        for itemID,item in sharesJson.items():
 | 
			
		||||
            pageCtr += 1
 | 
			
		||||
            totalCtr += 1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										47
									
								
								skills.py
								
								
								
								
							
							
						
						
									
										47
									
								
								skills.py
								
								
								
								
							| 
						 | 
				
			
			@ -26,27 +26,47 @@ def setSkillLevel(baseDir: str,nickname: str,domain: str, \
 | 
			
		|||
    actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
        return False
 | 
			
		||||
    with open(actorFilename, 'r') as fp:
 | 
			
		||||
        actorJson=commentjson.load(fp)
 | 
			
		||||
 | 
			
		||||
    actorJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actorJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if actorJson:
 | 
			
		||||
        if not actorJson.get('skills'):
 | 
			
		||||
            actorJson['skills']={}
 | 
			
		||||
        if skillLevelPercent>0:
 | 
			
		||||
            actorJson['skills'][skill]=skillLevelPercent
 | 
			
		||||
        else:
 | 
			
		||||
            del actorJson['skills'][skill]
 | 
			
		||||
        with open(actorFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(actorJson, fp, indent=4, sort_keys=False)    
 | 
			
		||||
        try:
 | 
			
		||||
            with open(actorFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(actorJson, fp, indent=4, sort_keys=False)    
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def setSkills(baseDir: str,nickname: str,domain: str,skills: {}) -> None:
 | 
			
		||||
    actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
        return False
 | 
			
		||||
    with open(actorFilename, 'r') as fp:
 | 
			
		||||
        actorJson=commentjson.load(fp)
 | 
			
		||||
 | 
			
		||||
    actorJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actorJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if actorJson:
 | 
			
		||||
        actorJson['skills']=skills
 | 
			
		||||
        with open(actorFilename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        try:
 | 
			
		||||
            with open(actorFilename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)    
 | 
			
		||||
 | 
			
		||||
def getSkills(baseDir: str,nickname: str,domain: str) -> []:
 | 
			
		||||
    """Returns the skills for a given person
 | 
			
		||||
| 
						 | 
				
			
			@ -54,8 +74,15 @@ def getSkills(baseDir: str,nickname: str,domain: str) -> []:
 | 
			
		|||
    actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
 | 
			
		||||
    if not os.path.isfile(actorFilename):
 | 
			
		||||
        return False
 | 
			
		||||
    with open(actorFilename, 'r') as fp:
 | 
			
		||||
        actorJson=commentjson.load(fp)
 | 
			
		||||
 | 
			
		||||
    actorJson=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(actorFilename, 'r') as fp:
 | 
			
		||||
            actorJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if actorJson:
 | 
			
		||||
        if not actorJson.get('skills'):
 | 
			
		||||
            return None
 | 
			
		||||
        return actorJson['skills']
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								tests.py
								
								
								
								
							
							
						
						
									
										1
									
								
								tests.py
								
								
								
								
							| 
						 | 
				
			
			@ -452,6 +452,7 @@ def testPostMessageBetweenServers():
 | 
			
		|||
    with open(outboxPostFilename, 'r') as fp:
 | 
			
		||||
        alicePostJson=commentjson.load(fp)
 | 
			
		||||
        pprint(alicePostJson)
 | 
			
		||||
            
 | 
			
		||||
    assert 'likes' in open(outboxPostFilename).read()
 | 
			
		||||
 | 
			
		||||
    print('\n\n*******************************************************')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										9
									
								
								utils.py
								
								
								
								
							
							
						
						
									
										9
									
								
								utils.py
								
								
								
								
							| 
						 | 
				
			
			@ -229,9 +229,14 @@ def removeModerationPostFromIndex(baseDir: str,postUrl: str,debug: bool) -> None
 | 
			
		|||
def deletePost(baseDir: str,httpPrefix: str,nickname: str,domain: str,postFilename: str,debug: bool):
 | 
			
		||||
    """Recursively deletes a post and its replies and attachments
 | 
			
		||||
    """
 | 
			
		||||
    with open(postFilename, 'r') as fp:
 | 
			
		||||
        postJsonObject=commentjson.load(fp)
 | 
			
		||||
    postJsonObject=None
 | 
			
		||||
    try:
 | 
			
		||||
        with open(postFilename, 'r') as fp:
 | 
			
		||||
            postJsonObject=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
 | 
			
		||||
    if postJsonObject:
 | 
			
		||||
        # remove any attachment
 | 
			
		||||
        removeAttachment(baseDir,httpPrefix,domain,postJsonObject)
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								webfinger.py
								
								
								
								
							
							
						
						
									
										21
									
								
								webfinger.py
								
								
								
								
							| 
						 | 
				
			
			@ -91,13 +91,19 @@ def storeWebfingerEndpoint(nickname: str,domain: str,port: int,baseDir: str, \
 | 
			
		|||
    if not os.path.isdir(baseDir+wfSubdir):
 | 
			
		||||
        os.mkdir(baseDir+wfSubdir)
 | 
			
		||||
    filename=baseDir+wfSubdir+'/'+handle.lower()+'.json'
 | 
			
		||||
    with open(filename, 'w') as fp:
 | 
			
		||||
        commentjson.dump(wfJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(filename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(wfJson, fp, indent=4, sort_keys=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    if nickname=='inbox':
 | 
			
		||||
        handle=originalDomain+'@'+domain
 | 
			
		||||
        filename=baseDir+wfSubdir+'/'+handle.lower()+'.json'
 | 
			
		||||
        with open(filename, 'w') as fp:
 | 
			
		||||
            commentjson.dump(wfJson, fp, indent=4, sort_keys=False)        
 | 
			
		||||
        try:
 | 
			
		||||
            with open(filename, 'w') as fp:
 | 
			
		||||
                commentjson.dump(wfJson, fp, indent=4, sort_keys=False)        
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def createWebfingerEndpoint(nickname: str,domain: str,port: int, \
 | 
			
		||||
| 
						 | 
				
			
			@ -216,6 +222,9 @@ def webfingerLookup(path: str,baseDir: str,port: int,debug: bool) -> {}:
 | 
			
		|||
            print('DEBUG: WEBFINGER filename not found '+filename)
 | 
			
		||||
        return None
 | 
			
		||||
    wfJson={"nickname": "unknown"}
 | 
			
		||||
    with open(filename, 'r') as fp:
 | 
			
		||||
        wfJson=commentjson.load(fp)
 | 
			
		||||
    try:
 | 
			
		||||
        with open(filename, 'r') as fp:
 | 
			
		||||
            wfJson=commentjson.load(fp)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e)
 | 
			
		||||
    return wfJson
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue