mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			Shared inbox actor on @domain@domain
							parent
							
								
									d9c8dc46c2
								
							
						
					
					
						commit
						377940a31f
					
				|  | @ -488,7 +488,9 @@ class PubServer(BaseHTTPRequestHandler): | |||
|                 createSession(self.server.domain,self.server.port,self.server.useTor) | ||||
| 
 | ||||
|         # treat shared inbox paths consistently | ||||
|         if self.path=='/sharedInbox' or self.path=='/users/inbox': | ||||
|         if self.path=='/sharedInbox' or \ | ||||
|            self.path=='/users/inbox' or \ | ||||
|            self.path=='/users/'+self.server.domain: | ||||
|             self.path='/inbox' | ||||
| 
 | ||||
|         # is this a html request? | ||||
|  |  | |||
							
								
								
									
										16
									
								
								epicyon.py
								
								
								
								
							
							
						
						
									
										16
									
								
								epicyon.py
								
								
								
								
							|  | @ -817,17 +817,9 @@ if args.actor: | |||
|         port=443 | ||||
|     session = createSession(domain,port,useTor) | ||||
|     if nickname!='inbox': | ||||
|         wfRequest = webfingerHandle(session,nickname+'@'+domain,httpPrefix,wfCache, \ | ||||
|                                     domain,__version__) | ||||
|     else: | ||||
|         wfRequest={ | ||||
|             'aliases': [httpPrefix+'://'+domain+'/@inbox', | ||||
|                         httpPrefix+'://'+domain+'/users/inbox'], | ||||
|             'links': [{'href': httpPrefix+'://'+domain+'/users/inbox', | ||||
|                        'rel': 'self', | ||||
|                        'type': 'application/activity+json'}], | ||||
|             'subject': 'acct:inbox@'+domain | ||||
|         } | ||||
|         nickname=domain | ||||
|     wfRequest = webfingerHandle(session,nickname+'@'+domain,httpPrefix,wfCache, \ | ||||
|                                 domain,__version__) | ||||
| 
 | ||||
|     if not wfRequest: | ||||
|         print('Unable to webfinger '+nickname+'@'+domain) | ||||
|  | @ -858,7 +850,7 @@ if args.addaccount: | |||
|         if not args.domain or not getConfigParam(baseDir,'domain'): | ||||
|             print('Use the --domain option to set the domain name') | ||||
|             sys.exit() | ||||
|     if not validNickname(nickname): | ||||
|     if not validNickname(domain,nickname): | ||||
|         print(nickname+' is a reserved name. Use something different.') | ||||
|         sys.exit()         | ||||
|     if not args.password: | ||||
|  |  | |||
|  | @ -207,7 +207,7 @@ def getFollowingFeed(baseDir: str,domain: str,port: int,path: str, \ | |||
|         nickname=path.replace('/@','',1).replace('/'+followFile,'') | ||||
|     if not nickname: | ||||
|         return None | ||||
|     if not validNickname(nickname): | ||||
|     if not validNickname(domain,nickname): | ||||
|         return None | ||||
| 
 | ||||
|     if port: | ||||
|  |  | |||
							
								
								
									
										13
									
								
								person.py
								
								
								
								
							
							
						
						
									
										13
									
								
								person.py
								
								
								
								
							|  | @ -248,7 +248,7 @@ def registerAccount(baseDir: str,httpPrefix: str,domain: str,port: int, \ | |||
|     """ | ||||
|     if accountExists(baseDir,nickname,domain): | ||||
|         return False | ||||
|     if not validNickname(nickname): | ||||
|     if not validNickname(domain,nickname): | ||||
|         print('REGISTER: Nickname '+nickname+' is invalid') | ||||
|         return False | ||||
|     if len(password)<8: | ||||
|  | @ -265,7 +265,7 @@ def createPerson(baseDir: str,nickname: str,domain: str,port: int, \ | |||
|                  httpPrefix: str, saveToFile: bool,password=None) -> (str,str,{},{}): | ||||
|     """Returns the private key, public key, actor and webfinger endpoint | ||||
|     """ | ||||
|     if not validNickname(nickname): | ||||
|     if not validNickname(domain,nickname): | ||||
|        return None,None,None,None | ||||
| 
 | ||||
|     # If a config.json file doesn't exist then don't decrement | ||||
|  | @ -321,7 +321,8 @@ def personLookup(domain: str,path: str,baseDir: str) -> {}: | |||
|     # is this a shared inbox lookup? | ||||
|     isSharedInbox=False | ||||
|     if path=='/inbox' or path=='/users/inbox' or path=='/sharedInbox': | ||||
|         path='/users/inbox' | ||||
|         # shared inbox actor on @domain@domain | ||||
|         path='/users/'+domain | ||||
|         isSharedInbox=True | ||||
|     else: | ||||
|         notPersonLookup=['/inbox','/outbox','/outboxarchive', \ | ||||
|  | @ -337,7 +338,7 @@ def personLookup(domain: str,path: str,baseDir: str) -> {}: | |||
|         nickname=path.replace('/@','',1) | ||||
|     if not nickname: | ||||
|         return None | ||||
|     if not isSharedInbox and not validNickname(nickname): | ||||
|     if not isSharedInbox and not validNickname(domain,nickname): | ||||
|         return None | ||||
|     if ':' in domain: | ||||
|         domain=domain.split(':')[0] | ||||
|  | @ -391,7 +392,7 @@ def personBoxJson(baseDir: str,domain: str,port: int,path: str, \ | |||
|         nickname=path.replace('/@','',1).replace('/'+boxname,'') | ||||
|     if not nickname: | ||||
|         return None | ||||
|     if not validNickname(nickname): | ||||
|     if not validNickname(domain,nickname): | ||||
|         return None | ||||
|     if boxname=='inbox': | ||||
|         return createInbox(baseDir,nickname,domain,port,httpPrefix, \ | ||||
|  | @ -438,7 +439,7 @@ def personInboxJson(baseDir: str,domain: str,port: int,path: str, \ | |||
|         nickname=path.replace('/@','',1).replace('/inbox','') | ||||
|     if not nickname: | ||||
|         return None | ||||
|     if not validNickname(nickname): | ||||
|     if not validNickname(domain,nickname): | ||||
|         return None | ||||
|     return createInbox(baseDir,nickname,domain,port,httpPrefix, \ | ||||
|                        noOfItems,headerOnly,ocapAlways,pageNumber) | ||||
|  |  | |||
							
								
								
									
										42
									
								
								posts.py
								
								
								
								
							
							
						
						
									
										42
									
								
								posts.py
								
								
								
								
							|  | @ -792,7 +792,10 @@ def getMentionedPeople(baseDir: str,httpPrefix: str, \ | |||
|                 if not ('.' in externalDomain or externalDomain=='localhost'): | ||||
|                     continue | ||||
|             mentionedNickname=handle.split('@')[0] | ||||
|             if not validNickname(mentionedNickname): | ||||
|             mentionedDomain=handle.split('@')[1].strip('\n') | ||||
|             if ':' in mentionedDomain: | ||||
|                 mentionedDomain=mentionedDomain.split(':')[0] | ||||
|             if not validNickname(mentionedDomain,mentionedNickname): | ||||
|                 continue | ||||
|             actor=httpPrefix+'://'+handle.split('@')[1]+'/users/'+mentionedNickname | ||||
|             mentions.append(actor) | ||||
|  | @ -1167,6 +1170,8 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str, \ | |||
| 
 | ||||
|     sharedInbox=False | ||||
|     if toNickname=='inbox': | ||||
|         # shared inbox actor on @domain@domain | ||||
|         toNickname=toDomain | ||||
|         sharedInbox=True | ||||
| 
 | ||||
|     if toPort: | ||||
|  | @ -1174,37 +1179,18 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str, \ | |||
|             if ':' not in toDomain: | ||||
|                 toDomain=toDomain+':'+str(toPort)         | ||||
| 
 | ||||
|     if not sharedInbox: | ||||
|         handle=httpPrefix+'://'+toDomain+'/@'+toNickname | ||||
|     else: | ||||
|         handle=httpPrefix+'://'+toDomain+'/'+toNickname | ||||
|         sharedInboxUrl=handle | ||||
|     handle=httpPrefix+'://'+toDomain+'/@'+toNickname | ||||
|          | ||||
|     if debug: | ||||
|         print('DEBUG: handle - '+handle+' toPort '+str(toPort)) | ||||
| 
 | ||||
|     if not sharedInbox:         | ||||
|         # lookup the inbox for the To handle | ||||
|         wfRequest=webfingerHandle(session,handle,httpPrefix,cachedWebfingers, \ | ||||
|                                   domain,projectVersion) | ||||
|         if not wfRequest: | ||||
|             if debug: | ||||
|                 print('DEBUG: webfinger for '+handle+' failed') | ||||
|             return 1 | ||||
|     else: | ||||
|         wfRequest={ | ||||
|             "aliases": [ | ||||
|                 httpPrefix+'://'+toDomain+'/users/inbox' | ||||
|             ], | ||||
|             "links": [ | ||||
|                 { | ||||
|                     "href": httpPrefix+'://'+toDomain+'/users/inbox', | ||||
|                     "rel": "self", | ||||
|                     "type": "application/activity+json" | ||||
|                 } | ||||
|             ], | ||||
|             "subject": 'acct:inbox@'+toDomain | ||||
|         }         | ||||
|     # lookup the inbox for the To handle | ||||
|     wfRequest=webfingerHandle(session,handle,httpPrefix,cachedWebfingers, \ | ||||
|                               domain,projectVersion) | ||||
|     if not wfRequest: | ||||
|         if debug: | ||||
|             print('DEBUG: webfinger for '+handle+' failed') | ||||
|         return 1 | ||||
| 
 | ||||
|     if not clientToServer: | ||||
|         postToBox='inbox' | ||||
|  |  | |||
|  | @ -202,7 +202,7 @@ def getSharesFeedForPerson(baseDir: str, \ | |||
|         nickname=path.replace('/@','',1).replace('/shares','') | ||||
|     if not nickname: | ||||
|         return None | ||||
|     if not validNickname(nickname): | ||||
|     if not validNickname(domain,nickname): | ||||
|         return None | ||||
| 
 | ||||
|     if port: | ||||
|  |  | |||
							
								
								
									
										4
									
								
								utils.py
								
								
								
								
							
							
						
						
									
										4
									
								
								utils.py
								
								
								
								
							|  | @ -265,11 +265,13 @@ def deletePost(baseDir: str,httpPrefix: str,nickname: str,domain: str,postFilena | |||
|     # finally, remove the post itself | ||||
|     os.remove(postFilename)     | ||||
| 
 | ||||
| def validNickname(nickname: str) -> bool: | ||||
| def validNickname(domain: str,nickname: str) -> bool: | ||||
|     forbiddenChars=['.',' ','/','?',':',';','@'] | ||||
|     for c in forbiddenChars: | ||||
|         if c in nickname: | ||||
|             return False | ||||
|     if nickname==domain: | ||||
|         return False | ||||
|     reservedNames=['inbox','outbox','following','followers','capabilities'] | ||||
|     if nickname in reservedNames: | ||||
|         return False | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue