Compare commits

..

2 Commits

Author SHA1 Message Date
26e26951da allow user to validate an account using checker 2025-07-15 15:12:44 +01:00
4267dfcb33 account checker 2025-07-15 14:40:43 +01:00
4 changed files with 90 additions and 1 deletions

7
.vscode/launch.json vendored
View File

@ -1,6 +1,13 @@
{ {
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{ {
"name": "Python: Flask", "name": "Python: Flask",
"type": "python", "type": "python",

View File

@ -0,0 +1,57 @@
import os
import sys
from dotenv import load_dotenv
import mysql.connector
# Add the project root to the Python path
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(project_root)
from ktvmanager.lib.encryption import decrypt_password
from ktvmanager.lib.checker import single_account_check
from ktvmanager.lib.get_urls import get_latest_urls_from_dns
def get_all_accounts(db_connection):
cursor = db_connection.cursor(dictionary=True)
query = "SELECT * FROM userAccounts where userId = 1"
cursor.execute(query)
accounts = cursor.fetchall()
cursor.close()
return accounts
def main():
load_dotenv()
db_connection = mysql.connector.connect(
host=os.getenv("DBHOST"),
user=os.getenv("DBUSER"),
password=os.getenv("DBPASS"),
database=os.getenv("DATABASE"),
port=os.getenv("DBPORT")
)
accounts = get_all_accounts(db_connection)
stream_urls = get_latest_urls_from_dns()
for account in accounts:
try:
decrypted_password = decrypt_password(account['password'])
except Exception as e:
print(f"Could not decrypt password for {account['username']}: {e}")
continue
account_data = {
"username": account['username'],
"password": decrypted_password
}
result = single_account_check(account_data, stream_urls)
if result:
print(f"Account {account['username']} on stream {account['stream']} is VALID.")
else:
print(f"Account {account['username']} on stream {account['stream']} is INVALID.")
db_connection.close()
if __name__ == "__main__":
main()

View File

@ -1,4 +1,6 @@
import requests import requests
from flask import request, jsonify
from ktvmanager.lib.get_urls import get_latest_urls_from_dns
def build_url(stream_url, username, password): def build_url(stream_url, username, password):
return f"{stream_url}/player_api.php?username={username}&password={password}" return f"{stream_url}/player_api.php?username={username}&password={password}"
@ -28,3 +30,20 @@ def single_account_check(account_data, stream_urls):
if result: if result:
return {"url": stream_url, "data": result} return {"url": stream_url, "data": result}
return None return None
def validate_account():
data = request.get_json()
username = data.get("username")
password = data.get("password")
if not all([username, password]):
return jsonify({"message": "Missing required fields"}), 400
stream_urls = get_latest_urls_from_dns()
account_data = {"username": username, "password": password}
result = single_account_check(account_data, stream_urls)
if result:
return jsonify({"message": "Account is valid"})
else:
return jsonify({"message": "Account is invalid"}), 401

View File

@ -40,6 +40,12 @@ def delete_account_route(username, password):
user_id = get_user_id_from_username(username) user_id = get_user_id_from_username(username)
return delete_account(user_id) return delete_account(user_id)
@api_blueprint.route("/validateAccount", methods=["POST"])
@requires_basic_auth
def validate_account_route(username, password):
from ktvmanager.lib.checker import validate_account
return validate_account()
@api_blueprint.route("/Login") @api_blueprint.route("/Login")
@requires_basic_auth @requires_basic_auth
def login_route(username, password): def login_route(username, password):