74 lines
1.7 KiB
Python
74 lines
1.7 KiB
Python
import os
|
|
|
|
import docker
|
|
from flask import Flask, render_template, redirect, url_for, Blueprint
|
|
from flask_basicauth import BasicAuth
|
|
|
|
app_base = Flask(__name__)
|
|
|
|
CONTAINER_NAME = os.environ["CONTAINER_NAME"]
|
|
|
|
app_base.config["BASIC_AUTH_USERNAME"] = os.environ["USERNAME"]
|
|
app_base.config["BASIC_AUTH_PASSWORD"] = os.environ["PASSWORD"]
|
|
app_base.config["BASIC_AUTH_FORCE"] = True
|
|
|
|
basic_auth = BasicAuth(app_base)
|
|
|
|
client = docker.from_env()
|
|
|
|
palworld_bp = Blueprint('palworld', __name__, template_folder="templates", url_prefix="/palworld")
|
|
|
|
|
|
|
|
def get_container():
|
|
try:
|
|
return client.containers.get(CONTAINER_NAME)
|
|
except docker.errors.NotFound:
|
|
return None
|
|
|
|
|
|
@palworld_bp.route("/")
|
|
def index():
|
|
container = get_container()
|
|
|
|
if container is None:
|
|
return f"Container '{CONTAINER_NAME}' not found.", 404
|
|
|
|
try:
|
|
container.reload()
|
|
running = container.status == "running"
|
|
except:
|
|
return "There was an issue reading container state", 500
|
|
|
|
return render_template(
|
|
"index.html",
|
|
running=running,
|
|
container_name=CONTAINER_NAME,
|
|
)
|
|
|
|
|
|
@palworld_bp.route("/toggle", methods=["POST"])
|
|
def toggle():
|
|
try:
|
|
container = get_container()
|
|
|
|
if container is None:
|
|
return f"Container '{CONTAINER_NAME}' not found.", 404
|
|
|
|
container.reload()
|
|
|
|
if container.status == "running":
|
|
container.stop()
|
|
else:
|
|
container.start()
|
|
except docker.errors.APIError as err:
|
|
return f"There was an issue managing containers\n {err}", 500
|
|
|
|
|
|
return redirect(url_for("palworld.index"))
|
|
|
|
app_base.register_blueprint(palworld_bp)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app_base.run(host="0.0.0.0", port=5000) |