import os import yaml import mysql.connector from mysql.connector import Error def get_db_config(): # Configure your MariaDB connection with open(f"{os.getcwd()}/configs/config.yaml", "r") as file: config = yaml.safe_load(file) db_config = { "host": f'{config["mariadb"]["host"]}', "user": f'{config["mariadb"]["user"]}', "password": f'{config["mariadb"]["password"]}', "database": f'{config["mariadb"]["database"]}', } return db_config def create_database(): try: with mysql.connector.connect(**get_db_config()) as conn: cursor = conn.cursor() cursor.execute( """ CREATE TABLE IF NOT EXISTS licenses ( SERVICE VARCHAR(255), PSSH TEXT, KID VARCHAR(255) PRIMARY KEY, `Key` TEXT, License_URL TEXT, Headers TEXT, Cookies TEXT, Data BLOB ) """ ) conn.commit() except Error as e: print(f"Error: {e}") def cache_to_db( service=None, pssh=None, kid=None, key=None, license_url=None, headers=None, cookies=None, data=None, ): try: with mysql.connector.connect(**get_db_config()) as conn: cursor = conn.cursor() cursor.execute("SELECT 1 FROM licenses WHERE KID = %s", (kid,)) existing_record = cursor.fetchone() cursor.execute( """ INSERT INTO licenses (SERVICE, PSSH, KID, `Key`, License_URL, Headers, Cookies, Data) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE SERVICE = VALUES(SERVICE), PSSH = VALUES(PSSH), `Key` = VALUES(`Key`), License_URL = VALUES(License_URL), Headers = VALUES(Headers), Cookies = VALUES(Cookies), Data = VALUES(Data) """, (service, pssh, kid, key, license_url, headers, cookies, data), ) conn.commit() return True if existing_record else False except Error as e: print(f"Error: {e}") return False def search_by_pssh_or_kid(search_filter): results = set() try: with mysql.connector.connect(**get_db_config()) as conn: cursor = conn.cursor() like_filter = f"%{search_filter}%" cursor.execute( "SELECT PSSH, KID, `Key` FROM licenses WHERE PSSH LIKE %s", (like_filter,), ) results.update(cursor.fetchall()) cursor.execute( "SELECT PSSH, KID, `Key` FROM licenses WHERE KID LIKE %s", (like_filter,), ) results.update(cursor.fetchall()) final_results = [ {"PSSH": row[0], "KID": row[1], "Key": row[2]} for row in results ] return final_results[:20] except Error as e: print(f"Error: {e}") return [] def get_key_by_kid_and_service(kid, service): try: with mysql.connector.connect(**get_db_config()) as conn: cursor = conn.cursor() cursor.execute( "SELECT `Key` FROM licenses WHERE KID = %s AND SERVICE = %s", (kid, service), ) result = cursor.fetchone() return result[0] if result else None except Error as e: print(f"Error: {e}") return None def get_kid_key_dict(service_name): try: with mysql.connector.connect(**get_db_config()) as conn: cursor = conn.cursor() cursor.execute( "SELECT KID, `Key` FROM licenses WHERE SERVICE = %s", (service_name,) ) return {row[0]: row[1] for row in cursor.fetchall()} except Error as e: print(f"Error: {e}") return {} def get_unique_services(): try: with mysql.connector.connect(**get_db_config()) as conn: cursor = conn.cursor() cursor.execute("SELECT DISTINCT SERVICE FROM licenses") return [row[0] for row in cursor.fetchall()] except Error as e: print(f"Error: {e}") return [] def key_count(): try: with mysql.connector.connect(**get_db_config()) as conn: cursor = conn.cursor() cursor.execute("SELECT COUNT(KID) FROM licenses") return cursor.fetchone()[0] except Error as e: print(f"Error: {e}") return 0