From c89a17c71f17f398d6604f5c144cc7f3576ff3df Mon Sep 17 00:00:00 2001 From: iamBadgers Date: Sat, 11 Apr 2026 13:45:06 -0700 Subject: [PATCH] Key setup fucking works --- src/container_managment.py | 12 ++++++++---- src/database.py | 6 ++++-- src/key_tables.py | 18 ++++++++++-------- src/tables.py | 2 +- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/container_managment.py b/src/container_managment.py index 289ef82..de60000 100644 --- a/src/container_managment.py +++ b/src/container_managment.py @@ -1,5 +1,8 @@ import docker from game_tables import GameTable +from key_tables import KeyTable +import shutil +import os def build_container_routing_labels(prefix: str, strip_prefix=True): @@ -23,7 +26,6 @@ def build_container_routing_labels(prefix: str, strip_prefix=True): return labels - def stop_container(docker_id): try: client = docker.from_env() @@ -34,7 +36,7 @@ def stop_container(docker_id): return False -def start_foundry_container(table: GameTable, version=12): +def start_foundry_container(table: GameTable, key: KeyTable, version=12): client = docker.from_env() container = None @@ -50,11 +52,13 @@ def start_foundry_container(table: GameTable, version=12): else: image = "felddy/foundryvtt:{version}".format(version=version) labels = build_container_routing_labels(table.game_table_link, False) + os.makedirs("/data/" + table.game_table_link + "/Config", exist_ok=True) + shutil.copyfile(src="/data/keys/" + key.key_file, dst="/data/"+table.game_table_link+"/Config/license.json") volumes = { - "/home/cow/Projects/dockertesting/server_data_mount/{prefix}".format( + "/home/cow/Projects/dockertesting/data/{prefix}".format( prefix=table.game_table_link ): {"bind": "/data", "mode": "rw"}, - "/home/cow/Projects/dockertesting/server_data_mount/foundry_cache": { + "/home/cow/Projects/dockertesting/data/container_cache": { "bind": "/data/container_cache" }, } diff --git a/src/database.py b/src/database.py index 9dcabbf..82e13e1 100644 --- a/src/database.py +++ b/src/database.py @@ -1,5 +1,6 @@ from flask import g from sqlite3 import connect, Connection, Cursor +import shutil def get_db(): @@ -23,8 +24,9 @@ CREATE TABLE IF NOT EXISTS "game_tables" ( _key_table_create = """ CREATE TABLE IF NOT EXISTS "game_keys" ( - "key" TEXT NOT NULL, - "game_table_id" INTEGER, + "key" TEXT NOT NULL, + "game_table_id" INTEGER, + "key_file" TEXT NOT NULL, PRIMARY KEY("key") ); """ diff --git a/src/key_tables.py b/src/key_tables.py index b7aea63..df4c2c9 100644 --- a/src/key_tables.py +++ b/src/key_tables.py @@ -5,19 +5,21 @@ from database import SmartCursor class KeyTable: key: str game_table_id: number + key_file: str created: bool updated: bool def __init__( - self, key: str, game_table_id: int, created: bool = True, updated: bool = True + self, key: str, game_table_id: int, key_file: str, created: bool = True, updated: bool = True ): self.key = key self.game_table_id = game_table_id + self.key_file = key_file self.created = created self.updated = updated def toJson(self): - return {"key": self.key, "table_id": self.game_table_id} + return {"key": self.key, "table_id": self.game_table_id, "key_file": self.key_file} def reserve(self, game_table_id): self.game_table_id = game_table_id @@ -64,7 +66,7 @@ class KeyService: def get_key_for_table(self, game_table_id, cursor=None) -> KeyTable: with SmartCursor(cursor, self.connection) as smartCursor: smartCursor.execute( - """SELECT key, game_table_id + """SELECT key, game_table_id, key_file FROM game_keys WHERE game_table_id = ?""", (game_table_id,), @@ -74,21 +76,21 @@ class KeyService: if row == None: return None - return KeyTable(row[0], row[1]) + return KeyTable(row[0], row[1], row[2]) def get_reserved_keys(self, cursor=None) -> KeyTable: with SmartCursor(cursor, self.connection) as smartCursor: - smartCurosr.execute("""SELECT key, game_table_id + smartCurosr.execute("""SELECT key, game_table_id, key_file FROM game_keys WHERE game_table_id IS NOT NULL""") rows = smartCursor.fetchall() - return [KeyTable(row[0], row[1]) for row in rows] + return [KeyTable(row[0], row[1, row[2]]) for row in rows] def get_free_keys(self, cursor=None) -> KeyTable: with SmartCursor(cursor, self.connection) as smartCursor: - smartCursor.execute("""SELECT key, game_table_id + smartCursor.execute("""SELECT key, game_table_id, key_file FROM game_keys WHERE game_table_id IS NULL""") rows = smartCursor.fetchall() - return [KeyTable(row[0], row[1]) for row in rows] + return [KeyTable(row[0], row[1], row[2]) for row in rows] diff --git a/src/tables.py b/src/tables.py index 4c9db78..d6fbf49 100644 --- a/src/tables.py +++ b/src/tables.py @@ -81,7 +81,7 @@ def activate_table(table_id): keys[0].reserve(table.game_table_id) table.active = True - table.docker_id = container_managment.start_foundry_container(table) + table.docker_id = container_managment.start_foundry_container(table, keys[0]) keys[0].commit(cursor) table.commit(cursor) cursor.close()