MCPanel/app/routes.py
2025-05-09 10:28:18 +02:00

89 lines
2.2 KiB
Python

import os
import random
from flask import Blueprint, render_template, jsonify
from .auth import oidc
from .port_utils import get_user_ports
from .docker_utils import client
from docker.errors import NotFound
from dotenv import load_dotenv
main = Blueprint('main', __name__, static_folder='static')
load_dotenv()
@main.route("/")
def home():
username = oidc.user_getfield("preferred_username")
server_path = f"./servers/mc-{username}"
has_server = os.path.exists(server_path)
return render_template("home.html", has_server=has_server)
@main.route('/setup')
@oidc.require_login
def setup():
return render_template('setup.html')
@main.route('/dashboard')
@oidc.require_login
def dashboard():
username = oidc.user_getfield('preferred_username')
server_path = f"./servers/mc-{username}"
has_server = os.path.exists(server_path)
ip = os.getenv("SERVER_IP")
ports = get_user_ports(username)
if has_server:
return render_template('dashboard.html', username=username, ip=ip, ports=ports)
else:
return render_template('setup.html', username=username, ip=ip, ports=ports)
@main.route('/donate')
def donate():
return render_template('donate.html')
@main.route("/ads/list")
def list_ads():
ads_dir = os.path.join(main.static_folder, "ads")
files = [
f"/static/ads/{f}"
for f in os.listdir(ads_dir)
if f.lower().endswith(".png")
]
return jsonify(files)
@main.route("/servers")
def server_list():
servers_dir = "./servers"
server_dirs = [
d for d in os.listdir(servers_dir)
if os.path.isdir(os.path.join(servers_dir, d)) and d.startswith('mc-')
]
server_data = []
for server_dir in server_dirs:
server_name = server_dir
server_status = "stopped"
try:
container = client.containers.get(server_name)
if container.status == "running":
server_status = "running"
except NotFound:
pass
server_data.append({"name": server_name, "status": server_status})
return render_template('server_list.html', servers=server_data)
@main.app_errorhandler(404)
def page_not_found(e):
return render_template("404.html"), 404