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