mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			Faster checking for blocked domains
							parent
							
								
									71b5e1e57a
								
							
						
					
					
						commit
						36267ac5f4
					
				
							
								
								
									
										18
									
								
								blocking.py
								
								
								
								
							
							
						
						
									
										18
									
								
								blocking.py
								
								
								
								
							|  | @ -8,6 +8,7 @@ __status__="Production" | ||||||
| 
 | 
 | ||||||
| import os | import os | ||||||
| from utils import isEvil | from utils import isEvil | ||||||
|  | from utils import evilIncarnate | ||||||
| 
 | 
 | ||||||
| def addGlobalBlock(baseDir: str, \ | def addGlobalBlock(baseDir: str, \ | ||||||
|                    blockNickname: str,blockDomain: str) -> bool: |                    blockNickname: str,blockDomain: str) -> bool: | ||||||
|  | @ -113,6 +114,23 @@ def isBlockedHashtag(baseDir: str,hashtag: str) -> bool: | ||||||
|             return True |             return True | ||||||
|     return False |     return False | ||||||
| 
 | 
 | ||||||
|  | def getDomainBlocklist(baseDir: str) -> str: | ||||||
|  |     """Returns all globally blocked domains as a string | ||||||
|  |     This can be used for fast matching to mitigate flooding | ||||||
|  |     """ | ||||||
|  |     blockedStr='' | ||||||
|  | 
 | ||||||
|  |     evilDomains=evilIncarnate() | ||||||
|  |     for evil in evilDomains: | ||||||
|  |         blockedStr+=evil+'\n' | ||||||
|  | 
 | ||||||
|  |     globalBlockingFilename=baseDir+'/accounts/blocking.txt' | ||||||
|  |     if not os.path.isfile(globalBlockingFilename): | ||||||
|  |         return blockedStr | ||||||
|  |     with open(globalBlockingFilename, 'r') as file: | ||||||
|  |         blockedStr += file.read() | ||||||
|  |     return blockedStr | ||||||
|  | 
 | ||||||
| def isBlockedDomain(baseDir: str,domain: str) -> bool: | def isBlockedDomain(baseDir: str,domain: str) -> bool: | ||||||
|     """Is the given domain blocked? |     """Is the given domain blocked? | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
							
								
								
									
										25
									
								
								daemon.py
								
								
								
								
							
							
						
						
									
										25
									
								
								daemon.py
								
								
								
								
							|  | @ -107,6 +107,7 @@ from blocking import addGlobalBlock | ||||||
| from blocking import removeGlobalBlock | from blocking import removeGlobalBlock | ||||||
| from blocking import isBlockedHashtag | from blocking import isBlockedHashtag | ||||||
| from blocking import isBlockedDomain | from blocking import isBlockedDomain | ||||||
|  | from blocking import getDomainBlocklist | ||||||
| from config import setConfigParam | from config import setConfigParam | ||||||
| from config import getConfigParam | from config import getConfigParam | ||||||
| from roles import outboxDelegate | from roles import outboxDelegate | ||||||
|  | @ -936,7 +937,14 @@ class PubServer(BaseHTTPRequestHandler): | ||||||
|         callingDomain=None |         callingDomain=None | ||||||
|         if self.headers.get('Host'): |         if self.headers.get('Host'): | ||||||
|             callingDomain=self.headers['Host'] |             callingDomain=self.headers['Host'] | ||||||
|             if isBlockedDomain(self.server.baseDir,callingDomain): | 
 | ||||||
|  |             if self.server.blocklistUpdateCtr<=0: | ||||||
|  |                 self.server.blocklistUpdateCtr=self.server.blocklistUpdateInterval | ||||||
|  |                 self.server.domainBlocklist=getDomainBlocklist(self.server.baseDir) | ||||||
|  | 
 | ||||||
|  |             self.server.blocklistUpdateCtr-=1 | ||||||
|  | 
 | ||||||
|  |             if callingDomain in self.server.domainBlocklist: | ||||||
|                 print('GET domain blocked: '+callingDomain) |                 print('GET domain blocked: '+callingDomain) | ||||||
|                 self._400() |                 self._400() | ||||||
|                 return |                 return | ||||||
|  | @ -4381,7 +4389,14 @@ class PubServer(BaseHTTPRequestHandler): | ||||||
|         callingDomain=None |         callingDomain=None | ||||||
|         if self.headers.get('Host'): |         if self.headers.get('Host'): | ||||||
|             callingDomain=self.headers['Host'] |             callingDomain=self.headers['Host'] | ||||||
|             if isBlockedDomain(self.server.baseDir,callingDomain): | 
 | ||||||
|  |             if self.server.blocklistUpdateCtr<=0: | ||||||
|  |                 self.server.blocklistUpdateCtr=self.server.blocklistUpdateInterval | ||||||
|  |                 self.server.domainBlocklist=getDomainBlocklist(self.server.baseDir) | ||||||
|  | 
 | ||||||
|  |             self.server.blocklistUpdateCtr-=1 | ||||||
|  | 
 | ||||||
|  |             if callingDomain in self.server.domainBlocklist: | ||||||
|                 print('POST domain blocked: '+callingDomain) |                 print('POST domain blocked: '+callingDomain) | ||||||
|                 self._400() |                 self._400() | ||||||
|                 return |                 return | ||||||
|  | @ -6194,6 +6209,12 @@ def runDaemon(blogsInstance: bool,mediaInstance: bool, \ | ||||||
|         print('ERROR: HTTP server failed to start. '+str(e)) |         print('ERROR: HTTP server failed to start. '+str(e)) | ||||||
|         return False |         return False | ||||||
| 
 | 
 | ||||||
|  |     # This counter is used to update the list of blocked domains in memory. | ||||||
|  |     # It helps to avoid touching the disk and so improves flooding resistance | ||||||
|  |     httpd.blocklistUpdateCtr=0 | ||||||
|  |     httpd.blocklistUpdateInterval=100 | ||||||
|  |     httpd.domainBlocklist=getDomainBlocklist(baseDir) | ||||||
|  | 
 | ||||||
|     httpd.onionDomain=onionDomain |     httpd.onionDomain=onionDomain | ||||||
|     httpd.useBlurHash=useBlurHash |     httpd.useBlurHash=useBlurHash | ||||||
|     httpd.mediaInstance=mediaInstance |     httpd.mediaInstance=mediaInstance | ||||||
|  |  | ||||||
							
								
								
									
										5
									
								
								utils.py
								
								
								
								
							
							
						
						
									
										5
									
								
								utils.py
								
								
								
								
							|  | @ -93,12 +93,15 @@ def getStatusNumber() -> (str,str): | ||||||
|     published=currTime.strftime("%Y-%m-%dT%H:%M:%SZ") |     published=currTime.strftime("%Y-%m-%dT%H:%M:%SZ") | ||||||
|     return statusNumber,published |     return statusNumber,published | ||||||
| 
 | 
 | ||||||
|  | def evilIncarnate() -> []: | ||||||
|  |     return ('gab.com','gabfed.com','spinster.xyz','kiwifarms.cc','djitter.com') | ||||||
|  | 
 | ||||||
| def isEvil(domain: str) -> bool: | def isEvil(domain: str) -> bool: | ||||||
|     if not isinstance(domain, str): |     if not isinstance(domain, str): | ||||||
|         print('WARN: Malformed domain '+str(domain)) |         print('WARN: Malformed domain '+str(domain)) | ||||||
|         return True |         return True | ||||||
|     # https://www.youtube.com/watch?v=5qw1hcevmdU |     # https://www.youtube.com/watch?v=5qw1hcevmdU | ||||||
|     evilDomains=('gab.com','gabfed.com','spinster.xyz','kiwifarms.cc','djitter.com') |     evilDomains=evilIncarnate() | ||||||
|     for concentratedEvil in evilDomains: |     for concentratedEvil in evilDomains: | ||||||
|         if domain.endswith(concentratedEvil): |         if domain.endswith(concentratedEvil): | ||||||
|             return True |             return True | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue