Adding Geoip to the UserModel

This commit is contained in:
adator
2024-09-15 23:29:32 +02:00
parent 7585db4f62
commit 2f681db2d7
4 changed files with 57 additions and 41 deletions

View File

@@ -18,6 +18,7 @@ class User:
isWebsocket: bool isWebsocket: bool
remote_ip: str remote_ip: str
score_connexion: int score_connexion: int
geoip: str = None
connexion_datetime: datetime = field(default=datetime.now()) connexion_datetime: datetime = field(default=datetime.now())
UID_DB: list[UserModel] = [] UID_DB: list[UserModel] = []

View File

@@ -591,7 +591,7 @@ class Irc:
self.send2socket(f':{dnickname} NOTICE {fromuser} : Please run (git pull origin main) in the current folder') self.send2socket(f':{dnickname} NOTICE {fromuser} : Please run (git pull origin main) in the current folder')
else: else:
self.send2socket(f':{dnickname} NOTICE {fromuser} : You have the latest version of defender') self.send2socket(f':{dnickname} NOTICE {fromuser} : You have the latest version of defender')
return None return None
def cmd(self, data: list[str]) -> None: def cmd(self, data: list[str]) -> None:
@@ -813,52 +813,67 @@ class Irc:
self.Base.logs.error(f'Index Error: {ie}') self.Base.logs.error(f'Index Error: {ie}')
case 'UID': case 'UID':
# ['@s2s-md/geoip=cc=GB|cd=United\\sKingdom|asn=16276|asname=OVH\\sSAS;s2s-md/tls_cipher=TLSv1.3-TLS_CHACHA20_POLY1305_SHA256;s2s-md/creationtime=1721564601', try:
# ':001', 'UID', 'albatros', '0', '1721564597', 'albatros', 'vps-91b2f28b.vps.ovh.net', # ['@s2s-md/geoip=cc=GB|cd=United\\sKingdom|asn=16276|asname=OVH\\sSAS;s2s-md/tls_cipher=TLSv1.3-TLS_CHACHA20_POLY1305_SHA256;s2s-md/creationtime=1721564601',
# '001HB8G04', '0', '+iwxz', 'Clk-A62F1D18.vps.ovh.net', 'Clk-A62F1D18.vps.ovh.net', 'MyZBwg==', ':...'] # ':001', 'UID', 'albatros', '0', '1721564597', 'albatros', 'vps-91b2f28b.vps.ovh.net',
# '001HB8G04', '0', '+iwxz', 'Clk-A62F1D18.vps.ovh.net', 'Clk-A62F1D18.vps.ovh.net', 'MyZBwg==', ':...']
isWebirc = True if 'webirc' in original_response[0] else False isWebirc = True if 'webirc' in original_response[0] else False
isWebsocket = True if 'websocket' in original_response[0] else False isWebsocket = True if 'websocket' in original_response[0] else False
uid = str(original_response[8]) uid = str(original_response[8])
nickname = str(original_response[3]) nickname = str(original_response[3])
username = str(original_response[6]) username = str(original_response[6])
hostname = str(original_response[7]) hostname = str(original_response[7])
umodes = str(original_response[10]) umodes = str(original_response[10])
vhost = str(original_response[11]) vhost = str(original_response[11])
if not 'S' in umodes:
remote_ip = self.Base.decode_ip(str(original_response[13]))
else:
remote_ip = '127.0.0.1'
# extract realname if not 'S' in umodes:
realname_list = [] remote_ip = self.Base.decode_ip(str(original_response[13]))
for i in range(14, len(original_response)): else:
realname_list.append(original_response[i]) remote_ip = '127.0.0.1'
realname = ' '.join(realname_list)[1:] # extract realname
realname_list = []
for i in range(14, len(original_response)):
realname_list.append(original_response[i])
score_connexion = self.first_score realname = ' '.join(realname_list)[1:]
self.User.insert( # Extract Geoip information
self.User.UserModel( pattern = r'^.*geoip=cc=(\S{2}).*$'
uid=uid, geoip_match = re.match(pattern, original_response[0])
nickname=nickname,
username=username, if geoip_match:
realname=realname, geoip = geoip_match.group(1)
hostname=hostname, else:
umodes=umodes, geoip = None
vhost=vhost,
isWebirc=isWebirc, score_connexion = self.first_score
isWebsocket=isWebsocket,
remote_ip=remote_ip, self.User.insert(
score_connexion=score_connexion, self.User.UserModel(
connexion_datetime=datetime.now() uid=uid,
nickname=nickname,
username=username,
realname=realname,
hostname=hostname,
umodes=umodes,
vhost=vhost,
isWebirc=isWebirc,
isWebsocket=isWebsocket,
remote_ip=remote_ip,
geoip=geoip,
score_connexion=score_connexion,
connexion_datetime=datetime.now()
)
) )
)
for classe_name, classe_object in self.loaded_classes.items(): for classe_name, classe_object in self.loaded_classes.items():
classe_object.cmd(original_response) classe_object.cmd(original_response)
except Exception as err:
self.Base.logs.error(f'General Error: {err}')
case 'PRIVMSG': case 'PRIVMSG':
try: try:

View File

@@ -298,8 +298,7 @@ class Clone():
case 'list': case 'list':
try: try:
for clone_name in self.Clone.UID_CLONE_DB: for clone_name in self.Clone.UID_CLONE_DB:
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :>> {clone_name.nickname} | {clone_name.username}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :>> Nickname: {clone_name.nickname} | Username: {clone_name.username}')
pass
except Exception as err: except Exception as err:
self.Logs.error(f'{err}') self.Logs.error(f'{err}')

View File

@@ -1633,6 +1633,7 @@ class Defender():
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : HOSTNAME : {UserObject.hostname}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : HOSTNAME : {UserObject.hostname}')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : VHOST : {UserObject.vhost}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : VHOST : {UserObject.vhost}')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : IP : {UserObject.remote_ip}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : IP : {UserObject.remote_ip}')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : Country : {UserObject.geoip}')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : WebIrc : {UserObject.isWebirc}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : WebIrc : {UserObject.isWebirc}')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : WebWebsocket : {UserObject.isWebsocket}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : WebWebsocket : {UserObject.isWebsocket}')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : REPUTATION : {UserObject.score_connexion}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : REPUTATION : {UserObject.score_connexion}')