Files
PlayReadyProxy-API/modules/config.py
Pari Malam 8997df208b released
2025-02-19 17:23:48 +08:00

68 lines
2.1 KiB
Python

import configparser, json, secrets, logging, coloredlogs
from functools import wraps
from modules.logging import setup_logging
from flask import request, jsonify
API_KEY_FILE = 'APIKEY.json'
logging = setup_logging()
def setup_config():
config = configparser.ConfigParser()
config.read('config.ini')
return config
def load_api_keys():
try:
with open(API_KEY_FILE, 'r') as file:
return json.load(file)
except FileNotFoundError:
logging.error("APIKEY.json file not found.")
return []
except json.JSONDecodeError:
logging.error("Error decoding APIKEY.json.")
return []
def save_api_keys(api_keys):
with open(API_KEY_FILE, 'w') as file:
json.dump(api_keys, file, indent=4)
def is_valid_api_key(provided_key):
api_keys = load_api_keys()
for entry in api_keys:
if entry.get("apikey") == provided_key:
return True
return False
def generate_api_key(username):
random_key = secrets.token_hex(16)
new_api_key = f"{username}_{random_key}"
api_keys = load_api_keys()
user_found = False
for entry in api_keys:
if entry.get("username") == username:
entry["apikey"] = new_api_key
user_found = True
break
if not user_found:
api_keys.append({
"username": username,
"apikey": new_api_key
})
save_api_keys(api_keys)
return new_api_key
def apikey_required(func):
@wraps(func)
def decorated_function(*args, **kwargs):
provided_key = request.headers.get('X-API-KEY')
if not provided_key:
logging.error("X-API-KEY header is missing.")
response_data = {"message": "Opss! X-API-KEY is missing."}
return jsonify({"responseData": response_data}), 403
if not is_valid_api_key(provided_key):
logging.error("Invalid X-API-KEY.")
response_data = {"message": "Opss! Invalid APIKEY :P"}
return jsonify({"responseData": response_data}), 403
return func(*args, **kwargs)
return decorated_function