mirror of
https://github.com/iio612/DEFENDER.git
synced 2026-02-13 11:14:23 +00:00
275 lines
7.1 KiB
Python
275 lines
7.1 KiB
Python
from dataclasses import dataclass, field
|
|
from datetime import datetime
|
|
from typing import Union
|
|
|
|
class User:
|
|
|
|
@dataclass
|
|
class UserDataClass:
|
|
uid: str
|
|
nickname: str
|
|
username: str
|
|
hostname: str
|
|
umodes: str
|
|
vhost: str
|
|
isWebirc: bool
|
|
connexion_datetime: datetime = field(default=datetime.now())
|
|
|
|
UID_DB:list[UserDataClass] = []
|
|
|
|
def __init__(self) -> None:
|
|
pass
|
|
|
|
def insert(self, user: UserDataClass) -> bool:
|
|
"""Insert new user
|
|
|
|
Args:
|
|
user (UserDataClass): The User dataclass
|
|
|
|
Returns:
|
|
bool: True if the record has been created
|
|
"""
|
|
exists = False
|
|
inserted = False
|
|
|
|
for record in self.UID_DB:
|
|
if record.uid == user.uid:
|
|
exists = True
|
|
print(f'{user.uid} already exist')
|
|
|
|
if not exists:
|
|
self.UID_DB.append(user)
|
|
print(f'New record with uid: {user.uid}')
|
|
inserted = True
|
|
|
|
return inserted
|
|
|
|
def update(self, uid: str, newnickname: str) -> bool:
|
|
"""Updating a single record with a new nickname
|
|
|
|
Args:
|
|
uid (str): the uid of the user
|
|
newnickname (str): the new nickname
|
|
|
|
Returns:
|
|
bool: True if the record has been updated
|
|
"""
|
|
status = False
|
|
for user in self.UID_DB:
|
|
if user.uid == uid:
|
|
user.nickname = newnickname
|
|
status = True
|
|
print(f'Updating record with uid: {uid}')
|
|
|
|
return status
|
|
|
|
def delete(self, uid: str) -> bool:
|
|
"""Delete a user based on his uid
|
|
|
|
Args:
|
|
uid (str): The UID of the user
|
|
|
|
Returns:
|
|
bool: True if the record has been deleted
|
|
"""
|
|
status = False
|
|
for user in self.UID_DB:
|
|
if user.uid == uid:
|
|
self.UID_DB.remove(user)
|
|
status = True
|
|
print(f'Removing record with uid: {uid}')
|
|
|
|
return status
|
|
|
|
def isexist(self, uidornickname:str) -> bool:
|
|
"""do the UID or Nickname exist ?
|
|
|
|
Args:
|
|
uidornickname (str): The UID or the Nickname
|
|
|
|
Returns:
|
|
bool: True if exist or False if don't exist
|
|
"""
|
|
result = False
|
|
for record in self.UID_DB:
|
|
if record.uid == uidornickname:
|
|
result = True
|
|
if record.nickname == uidornickname:
|
|
result = True
|
|
|
|
return result
|
|
|
|
def get_User(self, uidornickname) -> Union[UserDataClass, None]:
|
|
|
|
UserObject = None
|
|
for record in self.UID_DB:
|
|
if record.uid == uidornickname:
|
|
UserObject = record
|
|
elif record.nickname == uidornickname:
|
|
UserObject = record
|
|
|
|
return UserObject
|
|
|
|
def get_uid(self, uidornickname:str) -> Union[str, None]:
|
|
|
|
uid = None
|
|
for record in self.UID_DB:
|
|
if record.uid == uidornickname:
|
|
uid = record.uid
|
|
if record.nickname == uidornickname:
|
|
uid = record.uid
|
|
|
|
return uid
|
|
|
|
def get_nickname(self, uidornickname:str) -> Union[str, None]:
|
|
|
|
nickname = None
|
|
for record in self.UID_DB:
|
|
if record.nickname == uidornickname:
|
|
nickname = record.nickname
|
|
if record.uid == uidornickname:
|
|
nickname = record.nickname
|
|
|
|
return nickname
|
|
|
|
class Admin:
|
|
@dataclass
|
|
class AdminDataClass:
|
|
uid: str
|
|
nickname: str
|
|
username: str
|
|
hostname: str
|
|
umodes: str
|
|
vhost: str
|
|
level: int
|
|
connexion_datetime: datetime = field(default=datetime.now())
|
|
|
|
UID_ADMIN_DB:list[AdminDataClass] = []
|
|
|
|
def __init__(self) -> None:
|
|
pass
|
|
|
|
def insert(self, admin: AdminDataClass) -> bool:
|
|
"""Insert new user
|
|
|
|
Args:
|
|
user (UserDataClass): The User dataclass
|
|
|
|
Returns:
|
|
bool: True if the record has been created
|
|
"""
|
|
exists = False
|
|
inserted = False
|
|
|
|
for record in self.UID_ADMIN_DB:
|
|
if record.uid == admin.uid:
|
|
exists = True
|
|
print(f'{admin.uid} already exist')
|
|
|
|
if not exists:
|
|
self.UID_ADMIN_DB.append(admin)
|
|
print(f'New record with uid: {admin.uid}')
|
|
inserted = True
|
|
|
|
return inserted
|
|
|
|
def update(self, uid: str, newnickname: str) -> bool:
|
|
"""Updating a single record with a new nickname
|
|
|
|
Args:
|
|
uid (str): the uid of the user
|
|
newnickname (str): the new nickname
|
|
|
|
Returns:
|
|
bool: True if the record has been updated
|
|
"""
|
|
status = False
|
|
for admin in self.UID_ADMIN_DB:
|
|
if admin.uid == uid:
|
|
admin.nickname = newnickname
|
|
status = True
|
|
print(f'Updating record with uid: {uid}')
|
|
|
|
return status
|
|
|
|
def delete(self, uid: str) -> bool:
|
|
"""Delete a user based on his uid
|
|
|
|
Args:
|
|
uid (str): The UID of the user
|
|
|
|
Returns:
|
|
bool: True if the record has been deleted
|
|
"""
|
|
status = False
|
|
for admin in self.UID_ADMIN_DB:
|
|
if admin.uid == uid:
|
|
self.UID_ADMIN_DB.remove(admin)
|
|
status = True
|
|
print(f'Removing record with uid: {uid}')
|
|
|
|
return status
|
|
|
|
def isexist(self, uidornickname:str) -> bool:
|
|
"""do the UID or Nickname exist ?
|
|
|
|
Args:
|
|
uidornickname (str): The UID or the Nickname
|
|
|
|
Returns:
|
|
bool: True if exist or False if don't exist
|
|
"""
|
|
result = False
|
|
for record in self.UID_ADMIN_DB:
|
|
if record.uid == uidornickname:
|
|
result = True
|
|
if record.nickname == uidornickname:
|
|
result = True
|
|
|
|
return result
|
|
|
|
def get_Admin(self, uidornickname) -> Union[AdminDataClass, None]:
|
|
|
|
AdminObject = None
|
|
for record in self.UID_ADMIN_DB:
|
|
if record.uid == uidornickname:
|
|
AdminObject = record
|
|
elif record.nickname == uidornickname:
|
|
AdminObject = record
|
|
|
|
return AdminObject
|
|
|
|
def get_uid(self, uidornickname:str) -> Union[str, None]:
|
|
|
|
uid = None
|
|
for record in self.UID_ADMIN_DB:
|
|
if record.uid == uidornickname:
|
|
uid = record.uid
|
|
if record.nickname == uidornickname:
|
|
uid = record.uid
|
|
|
|
return uid
|
|
|
|
def get_nickname(self, uidornickname:str) -> Union[str, None]:
|
|
|
|
nickname = None
|
|
for record in self.UID_ADMIN_DB:
|
|
if record.nickname == uidornickname:
|
|
nickname = record.nickname
|
|
if record.uid == uidornickname:
|
|
nickname = record.nickname
|
|
|
|
return nickname
|
|
|
|
def get_level(self, uidornickname:str) -> int:
|
|
|
|
level = 0
|
|
for record in self.UID_ADMIN_DB:
|
|
if record.uid == uidornickname:
|
|
level = record.level
|
|
if record.nickname == uidornickname:
|
|
level = record.level
|
|
|
|
return level
|
|
|