import mysql.connector from flask import jsonify, request, current_app from ktvmanager.lib.checker import single_account_check from ktvmanager.lib.encryption import encrypt_password, decrypt_password def _create_connection(): return mysql.connector.connect( host=current_app.config["DBHOST"], user=current_app.config["DBUSER"], password=current_app.config["DBPASS"], database=current_app.config["DATABASE"], port=current_app.config["DBPORT"] ) def _execute_query(query, params=None): conn = _create_connection() cursor = conn.cursor(dictionary=True) try: cursor.execute(query, params) if query.strip().upper().startswith("SELECT"): result = cursor.fetchall() else: conn.commit() result = {"affected_rows": cursor.rowcount} return result finally: cursor.close() conn.close() def get_user_id_from_username(username): query = "SELECT id FROM users WHERE username = %s" result = _execute_query(query, (username,)) if result: return result[0]['id'] return None def get_user_accounts(user_id): query = "SELECT * FROM userAccounts WHERE userID = %s" accounts = _execute_query(query, (user_id,)) for account in accounts: try: account['password'] = decrypt_password(account['password']) except Exception as e: # Log the error to the console for debugging print(f"Password decryption failed for account ID {account.get('id', 'N/A')}: {e}") account['password'] = "DECRYPTION_FAILED" return jsonify(accounts) def get_stream_names(): query = "SELECT streamName FROM streams" results = _execute_query(query) stream_names = [row['streamName'] for row in results] return jsonify(stream_names) def single_check(): data = request.get_json() stream_urls = current_app.config["STREAM_URLS"] result = single_account_check(data, stream_urls) if result: # Here you would typically update the database with the new information return jsonify(result) return jsonify({"message": "All checks failed"}), 400 def add_account(): data = request.get_json() encrypted_password = encrypt_password(data['password']) query = "INSERT INTO userAccounts (username, stream, streamURL, expiaryDate, password, userID) VALUES (%s, %s, %s, %s, %s, %s)" params = (data['username'], data['stream'], data['streamURL'], data['expiaryDate'], encrypted_password, data['userID']) result = _execute_query(query, params) return jsonify(result) def delete_account(): data = request.get_json() query = "DELETE FROM userAccounts WHERE id = %s" params = (data['id'],) result = _execute_query(query, params) return jsonify(result)