IRCat/modules/sqlite_local.py

29 lines
1.5 KiB
Python
Raw Permalink Normal View History

2025-01-08 21:28:58 -08:00
# IRCat module for local SQLite database (default)
2025-01-21 18:38:37 -08:00
import sqlite3, os, traceback
from cryptography import Fernet
2025-01-08 21:32:41 -08:00
__ircat_type__ = "sql.provider" # The type of module
2025-01-21 18:38:37 -08:00
__ircat_requires__ = ["data-path", "fernet-key"] # The required config.yml entries.
2025-01-08 22:13:43 -08:00
class broker:
2025-01-21 18:38:37 -08:00
def __init__(self, data_path, fernet_key):
2025-01-08 21:28:58 -08:00
if not os.path.isfile(data_path):
print("Creating database file...")
open(data_path, "w").write("")
self.conn = sqlite3.connect(data_path)
2025-01-21 18:38:37 -08:00
self.fnet = Fernet(fernet_key)
2025-01-08 21:28:58 -08:00
db = self.conn.cursor()
2025-01-21 18:03:45 -08:00
db.execute("""CREATE table IF NOT EXISTS bans (ip varchar(255), reason varchar(255)""")
2025-01-08 21:28:58 -08:00
db.execute("""CREATE table IF NOT EXISTS nickserv (user varchar(255), modes varchar(255), hash varchar(255), cloak varchar(255))""")
db.execute("""CREATE table IF NOT EXISTS groups (name varchar(255), owner varchar(255))""")
db.execute("""CREATE table IF NOT EXISTS chanserv (name varchar(255), modes varchar(255), params varchar(255), owner varchar(255), usermodes varchar(255), optimodes varchar(255))""")
2025-01-21 18:38:37 -08:00
def nickserv_identify(self, nick, password:str):
2025-01-08 21:28:58 -08:00
db = self.conn.cursor()
db.execute("SELECT * FROM nickserv WHERE user=?;", [nick])
e = db.fetchall()
if e == []:
2025-01-21 18:38:37 -08:00
return False
2025-01-08 21:28:58 -08:00
else:
2025-01-21 18:38:37 -08:00
try:
return e[0] if self.fnet.decrypt(e[0][2]) == password else False
except:
print(traceback.format_exc())
return False