126 lines
3.6 KiB
Python
126 lines
3.6 KiB
Python
from flask import Flask, jsonify, request
|
|
import mysql.connector
|
|
import uuid
|
|
import base64
|
|
import json
|
|
import keyfile
|
|
|
|
|
|
API_KEY_NS = keyfile.API_KEY
|
|
|
|
app = Flask(__name__)
|
|
# Database connection
|
|
|
|
db_config = keyfile.requestDBCreds
|
|
|
|
def get_db_connection():
|
|
try:
|
|
connection = mysql.connector.connect(**db_config)
|
|
return connection
|
|
except mysql.connector.Error as err:
|
|
print(f"Error: {err}")
|
|
return None
|
|
|
|
|
|
|
|
|
|
# NEEDS FIXING
|
|
@app.route('/api/tiropitAddUser', methods=['POST'])
|
|
def tiropit_add_user():
|
|
data = request.json
|
|
|
|
if not data or "UserName" not in data or "UserPIN" not in data:
|
|
return jsonify({"error": "Account MUST include at least UserName & UserPIN"}), 400
|
|
|
|
user_pin = data.get("UserPIN")
|
|
friend_code = data.get("FriendCode")
|
|
|
|
if not friend_code or len(friend_code) != 5:
|
|
return jsonify({"error": "FirendCode must be 5 characters long"}), 400
|
|
if not user_pin or len(user_pin) != 4:
|
|
return jsonify({"error": "UserPIN must be 4 characters long"}), 400
|
|
|
|
|
|
if isinstance(awards_data, str):
|
|
awards_data = json.loads(awards_data)
|
|
if isinstance(user_games_data, str):
|
|
user_games_data = json.loads(user_games_data)
|
|
|
|
|
|
connection = get_db_connection()
|
|
if connection is None:
|
|
return jsonify({"error": "Failed to contact db"}), 500
|
|
|
|
try:
|
|
cursor = connection.cursor(dictionary=True)
|
|
user_data = {
|
|
|
|
"UserID" : str(uuid.uuid4()),
|
|
"UserName" : data['UserName'],
|
|
"UserPIN" : user_pin,
|
|
"SteamName" : data.get('SteamName', ''),
|
|
"Level" : data.get('Level', 0),
|
|
"Awards" : json.dumps(data.get('Awards', '[]')),
|
|
"ProfilePicture" : data.get('ProfilePicture', ''),
|
|
"UserGames" : json.dumps(data.get('UserGames', '[]')),
|
|
"WarnLevel" : data.get('WarnLevel', 0),
|
|
"Banned" : data.get('Banned', False),
|
|
"AdminLevel" : 0,
|
|
"UserDiscord" : data.get('UserDiscord', ""),
|
|
"SteamID" : data.get('SteamID', '') ,
|
|
"FriendCode" : friend_code,
|
|
}
|
|
|
|
print(user_data)
|
|
|
|
|
|
|
|
|
|
query = """
|
|
INSERT INTO users (UserID, UserName, SteamName, Level, Awards, UserGames, WarnLevel, Banned, AdminLevel, SteamID, UserDiscord, UserPIN, FriendCode)
|
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
|
"""
|
|
|
|
cursor.execute(query, tuple(user_data.values()))
|
|
connection.commit()
|
|
|
|
return jsonify(
|
|
{"message":"User Created",
|
|
"UserID": user_data['UserID']}, 201
|
|
)
|
|
except mysql.connector.Error as err:
|
|
connection.rollback()
|
|
if err.errno == 1062:
|
|
return jsonify({"error": "User already exists"}), 409
|
|
finally:
|
|
if connection.is_connected():
|
|
cursor.close()
|
|
connection.close()
|
|
return jsonify({"error": "An unexpected server error occurred."}), 500
|
|
|
|
|
|
|
|
# App version endpoints
|
|
|
|
@app.route("/api/getTiropitVersion", methods=["GET"])
|
|
def getTiropitVersion():
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor(dictionary=True)
|
|
|
|
try:
|
|
cursor.execute("SELECT Version FROM AppData ORDER BY ID DESC LIMIT 1")
|
|
result = cursor.fetchone()
|
|
|
|
if result:
|
|
return jsonify({"Version":result["Version"]}), 200
|
|
else:
|
|
return jsonify({"error":"No version found"}), 404
|
|
except mysql.connector.Error as e:
|
|
return jsonify({"error":str(e)}), 500
|
|
finally:
|
|
cursor.close()
|
|
conn.close()
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host="0.0.0.0", port=5000, debug=True)
|