import os, traceback from cryptography.fernet import Fernet from cloudflare import Cloudflare # Please make sure you install this module from pip, not package manager. __ircat_type__ = "sql.provider" # The type of module __ircat_requires__ = ["cf_accountid", "cf_apitoken", "cf_d1database", "fernet-key"] # The required config.yml entries. class broker: def __init__(self, cf_accountid:str, cf_apitoken:str, cf_d1database:str, fernet_key:str): self.account_id = cf_accountid self.api_token = cf_apitoken self.database = cf_d1database self.client = Cloudflare(api_token=cf_apitoken) self.fnet = Fernet(fernet_key) self.client.d1.database.query( database_id=self.database, account_id=self.account_id, sql="CREATE table IF NOT EXISTS bans (ip varchar(255), reason varchar(255)); CREATE table IF NOT EXISTS nickserv (user varchar(255), modes varchar(255), hash varchar(255), email varchar(255)); CREATE table IF NOT EXISTS groups (name varchar(255), owner varchar(255)); CREATE table IF NOT EXISTS chanserv (name varchar(255), modes varchar(255), params varchar(255), owner varchar(255), usermodes varchar(255), optimodes varchar(255))", ) def cfexec(self, command:str, params:list): query = self.client.d1.database.query( database_id=self.database, account_id=self.account_id, sql=command, params=params ) return query[0].results def parse2sqlite(self, results): temp = [] for k, v in results.items(): temp.append(v) return temp def nickserv_identify(self, nick, password:str): e = self.cfexec("SELECT * FROM nickserv WHERE user=?;", [nick]) if len(e) == 0: return False else: try: return self.parse2sqlite(e[0]) if self.fnet.decrypt(bytes(e[0]["hash"], "UTF-8")).decode() == password else False except: print(traceback.format_exc()) return False def nickserv_register(self, nick, password, email): hashed = self.fnet.encrypt(bytes(password, "UTF-8")).decode() e = self.cfexec("INSERT INTO nickserv values(?, 'iw', ?, ?);", [nick, hashed, email]) def nickserv_isexist(self, nick): e = self.cfexec("SELECT * FROM nickserv WHERE user=?;", [nick]) return len(e) != 0