Compare commits

...

2 Commits

Author SHA1 Message Date
1c3918354c adding and deleting account is working
All checks were successful
Build and Publish Docker Image / build-and-push (push) Successful in 1m13s
2025-07-14 19:18:47 +01:00
b3054b3dda database connection pooling 2025-07-14 18:32:48 +01:00
4 changed files with 28 additions and 15 deletions

View File

@ -6,7 +6,8 @@ def build_url(stream_url, username, password):
def check_url(url): def check_url(url):
try: try:
tr = RequestsTor() # tr = RequestsTor()
tr = requests
response = tr.get(url, timeout=5) response = tr.get(url, timeout=5)
response.raise_for_status() response.raise_for_status()
if response.json().get("user_info", {}).get("auth"): if response.json().get("user_info", {}).get("auth"):

View File

@ -1,10 +1,16 @@
import mysql.connector import mysql.connector.pooling
from flask import jsonify, request, current_app from flask import jsonify, request, current_app
from ktvmanager.lib.checker import single_account_check from ktvmanager.lib.checker import single_account_check
from ktvmanager.lib.encryption import encrypt_password, decrypt_password from ktvmanager.lib.encryption import encrypt_password, decrypt_password
from ktvmanager.lib.get_urls import get_latest_urls_from_dns
def _create_connection(): db_pool = None
return mysql.connector.connect(
def initialize_db_pool():
global db_pool
db_pool = mysql.connector.pooling.MySQLConnectionPool(
pool_name="ktv_pool",
pool_size=5,
host=current_app.config["DBHOST"], host=current_app.config["DBHOST"],
user=current_app.config["DBUSER"], user=current_app.config["DBUSER"],
password=current_app.config["DBPASS"], password=current_app.config["DBPASS"],
@ -13,7 +19,7 @@ def _create_connection():
) )
def _execute_query(query, params=None): def _execute_query(query, params=None):
conn = _create_connection() conn = db_pool.get_connection()
cursor = conn.cursor(dictionary=True) cursor = conn.cursor(dictionary=True)
try: try:
cursor.execute(query, params) cursor.execute(query, params)
@ -33,7 +39,6 @@ def get_user_id_from_username(username):
if result: if result:
return result[0]['id'] return result[0]['id']
return None return None
def get_user_accounts(user_id): def get_user_accounts(user_id):
query = "SELECT * FROM userAccounts WHERE userID = %s" query = "SELECT * FROM userAccounts WHERE userID = %s"
accounts = _execute_query(query, (user_id,)) accounts = _execute_query(query, (user_id,))
@ -61,17 +66,18 @@ def single_check():
return jsonify(result) return jsonify(result)
return jsonify({"message": "All checks failed"}), 400 return jsonify({"message": "All checks failed"}), 400
def add_account(): def add_account(user_id):
data = request.get_json() data = request.form
res = single_account_check(data, get_latest_urls_from_dns())
encrypted_password = encrypt_password(data['password']) encrypted_password = encrypt_password(data['password'])
query = "INSERT INTO userAccounts (username, stream, streamURL, expiaryDate, password, userID) VALUES (%s, %s, %s, %s, %s, %s)" 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']) params = (data['username'], data['stream'], res['url'], res['data']['user_info']['exp_date'], encrypted_password, user_id)
result = _execute_query(query, params) result = _execute_query(query, params)
return jsonify(result) return jsonify(result)
def delete_account(): def delete_account(user_id):
data = request.get_json() data = request.form
query = "DELETE FROM userAccounts WHERE id = %s" query = "DELETE FROM userAccounts WHERE username = %s AND stream = %s AND userId = %s"
params = (data['id'],) params = (data['user'],data['stream'],user_id)
result = _execute_query(query, params) result = _execute_query(query, params)
return jsonify(result) return jsonify(result)

View File

@ -3,6 +3,7 @@ from flask import Flask, jsonify
from dotenv import load_dotenv from dotenv import load_dotenv
from ktvmanager.config import DevelopmentConfig, ProductionConfig from ktvmanager.config import DevelopmentConfig, ProductionConfig
from routes.api import api_blueprint from routes.api import api_blueprint
from ktvmanager.lib.database import initialize_db_pool
def create_app(): def create_app():
app = Flask(__name__) app = Flask(__name__)
@ -13,6 +14,9 @@ def create_app():
else: else:
app.config.from_object(DevelopmentConfig) app.config.from_object(DevelopmentConfig)
with app.app_context():
initialize_db_pool()
# Register blueprints # Register blueprints
app.register_blueprint(api_blueprint) app.register_blueprint(api_blueprint)

View File

@ -31,9 +31,11 @@ def single_check_route(username):
@api_blueprint.route("/addAccount", methods=["POST"]) @api_blueprint.route("/addAccount", methods=["POST"])
@requires_basic_auth @requires_basic_auth
def add_account_route(username): def add_account_route(username):
return add_account() user_id = get_user_id_from_username(username)
return add_account(user_id)
@api_blueprint.route("/deleteAccount", methods=["POST"]) @api_blueprint.route("/deleteAccount", methods=["POST"])
@requires_basic_auth @requires_basic_auth
def delete_account_route(username): def delete_account_route(username):
return delete_account() user_id = get_user_id_from_username(username)
return delete_account(user_id)