mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			Add some capabilities
							parent
							
								
									50e3a4c0d9
								
							
						
					
					
						commit
						3f97137e3f
					
				| 
						 | 
				
			
			@ -34,6 +34,50 @@ def getOcapFilename(baseDir :str,nickname: str,domain: str,actor :str,subdir: st
 | 
			
		|||
        
 | 
			
		||||
    return baseDir+'/accounts/'+nickname+'@'+domain+'/ocap/'+subdir+'/'+actor.replace('/','#')+'.json'
 | 
			
		||||
 | 
			
		||||
def CapablePost(postJson: {}, capabilityList: [], debug :bool) -> bool:
 | 
			
		||||
    """Determines whether a post arriving in the inbox
 | 
			
		||||
    should be accepted accoring to the list of capabilities
 | 
			
		||||
    """
 | 
			
		||||
    if postJson.get('type'):
 | 
			
		||||
        # No announces/repeats
 | 
			
		||||
        if postJson['type']=='Announce':
 | 
			
		||||
            if 'inbox:noannounce' in capabilityList:
 | 
			
		||||
                if debug:
 | 
			
		||||
                    print('DEBUG: inbox post rejected because inbox:noannounce')
 | 
			
		||||
                return False
 | 
			
		||||
        # No likes
 | 
			
		||||
        if postJson['type']=='Like':
 | 
			
		||||
            if 'inbox:nolike' in capabilityList:
 | 
			
		||||
                if debug:
 | 
			
		||||
                    print('DEBUG: inbox post rejected because inbox:nolike')
 | 
			
		||||
                return False
 | 
			
		||||
        if postJson['type']=='Create':
 | 
			
		||||
            if postJson.get('object'):
 | 
			
		||||
                # Does this have a reply?
 | 
			
		||||
                if postJson['object'].get('inReplyTo'):
 | 
			
		||||
                    if postJson['object']['inReplyTo']:
 | 
			
		||||
                        if 'inbox:noreply' in capabilityList:
 | 
			
		||||
                            if debug:
 | 
			
		||||
                                print('DEBUG: inbox post rejected because inbox:noreply')
 | 
			
		||||
                            return False
 | 
			
		||||
                # are content warnings enforced?
 | 
			
		||||
                if postJson['object'].get('sensitive'):
 | 
			
		||||
                    if not postJson['object']['sensitive']:
 | 
			
		||||
                        if 'inbox:cw' in capabilityList:
 | 
			
		||||
                            if debug:
 | 
			
		||||
                                print('DEBUG: inbox post rejected because inbox:cw')
 | 
			
		||||
                            return False
 | 
			
		||||
                # content warning must have non-zero summary
 | 
			
		||||
                if postJson['object'].get('summary'):
 | 
			
		||||
                    if len(postJson['object']['summary'])<2:
 | 
			
		||||
                        if 'inbox:cw' in capabilityList:
 | 
			
		||||
                            if debug:
 | 
			
		||||
                                print('DEBUG: inbox post rejected because inbox:cw, summary missing')
 | 
			
		||||
                            return False                        
 | 
			
		||||
    if 'inbox:write' in capabilityList:
 | 
			
		||||
        return True
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def capabilitiesRequest(baseDir: str,httpPrefix: str,domain: str, \
 | 
			
		||||
                        requestedActor: str, \
 | 
			
		||||
                        requestedCaps=["inbox:write","objects:read"]) -> {}:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								inbox.py
								
								
								
								
							
							
						
						
									
										3
									
								
								inbox.py
								
								
								
								
							| 
						 | 
				
			
			@ -25,6 +25,7 @@ from cache import getPersonFromCache
 | 
			
		|||
from cache import storePersonInCache
 | 
			
		||||
from acceptreject import receiveAcceptReject
 | 
			
		||||
from capabilities import getOcapFilename
 | 
			
		||||
from capabilities import CapablePost
 | 
			
		||||
 | 
			
		||||
def getPersonPubKey(session,personUrl: str,personCache: {},debug: bool) -> str:
 | 
			
		||||
    if not personUrl:
 | 
			
		||||
| 
						 | 
				
			
			@ -217,7 +218,7 @@ def runInboxQueue(baseDir: str,httpPrefix: str,sendThreads: [],postLog: [],cache
 | 
			
		|||
                        os.remove(queueFilename)
 | 
			
		||||
                        queue.pop(0)
 | 
			
		||||
                        continue
 | 
			
		||||
                    if 'inbox:write' not in oc['capability']:
 | 
			
		||||
                    if not CapablePost(queueJson['post'],oc['capability'],debug):
 | 
			
		||||
                        if debug:
 | 
			
		||||
                            print('DEBUG: insufficient capabilities to write to inbox from '+ \
 | 
			
		||||
                                  queueJson['post']['actor'])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue