I lost track of what I was doing. But we dont need the license.json anymore.

This commit is contained in:
iamBadgers
2026-04-12 21:34:15 -07:00
parent ea9c457dbe
commit 2194d78ba7
4 changed files with 98 additions and 38 deletions

View File

@@ -1,8 +1,8 @@
import docker import docker
from game_tables import GameTable from game_tables import GameTable
from key_tables import KeyTable from key_tables import KeyTable
import shutil
import os import os
from flask import current_app
def build_container_routing_labels(prefix: str, strip_prefix=True): def build_container_routing_labels(prefix: str, strip_prefix=True):
@@ -37,7 +37,7 @@ def stop_container(docker_id):
return False return False
def start_foundry_container(table: GameTable, key: KeyTable, version=12): def start_foundry_container(table: GameTable, key: KeyTable):
client = docker.from_env() client = docker.from_env()
container = None container = None
@@ -51,23 +51,21 @@ def start_foundry_container(table: GameTable, key: KeyTable, version=12):
container.start() container.start()
else: else:
image = "felddy/foundryvtt:{version}".format(version=version) image = "felddy/foundryvtt:{version}".format(version=table.version)
labels = build_container_routing_labels(table.game_table_link, False) 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 = { volumes = {
"/home/cow/Projects/dockertesting/data/{prefix}".format( "{data_bind}/{prefix}".format(
prefix=table.game_table_link data_bind=os.environ.get("FOUNDRY_DATA_BIND"),
prefix=table.game_table_link,
): {"bind": "/data", "mode": "rw"}, ): {"bind": "/data", "mode": "rw"},
"/home/cow/Projects/dockertesting/data/container_cache": { "{data_bind}/container_cache".format(
"bind": "/data/container_cache" data_bind=os.environ.get("FOUNDRY_DATA_BIND")
}, ): {"bind": "/data/container_cache"},
} }
environment = [ environment = [
"FOUNDRY_ROUTE_PREFIX={prefix}".format(prefix=table.game_table_link) "FOUNDRY_ROUTE_PREFIX={prefix}".format(prefix=table.game_table_link),
"FOUNDRY_TELEMETRY=FALSE",
"FOUNDRY_LICENSE_KEY={key_value}".format(key_value=key.key),
] ]
ports = {"30000": str(30000 + table.game_table_id)} ports = {"30000": str(30000 + table.game_table_id)}

View File

@@ -15,6 +15,7 @@ CREATE TABLE IF NOT EXISTS "game_tables" (
"game_table_id" INTEGER NOT NULL UNIQUE, "game_table_id" INTEGER NOT NULL UNIQUE,
"game_table_name" TEXT UNIQUE, "game_table_name" TEXT UNIQUE,
"game_table_link" TEXT UNIQUE, "game_table_link" TEXT UNIQUE,
"version" INTEGER
"active" INTEGER DEFAULT 0, "active" INTEGER DEFAULT 0,
"game_key" TEXT, "game_key" TEXT,
"docker_id" TEXT, "docker_id" TEXT,

View File

@@ -2,15 +2,18 @@ from sqlite3 import Connection, Cursor
from database import SmartCursor from database import SmartCursor
import random import random
class GameTableException(Exception): class GameTableException(Exception):
def __init__(self, message): def __init__(self, message):
super().__init__(self, message) super().__init__(self, message)
class GameTable: class GameTable:
_game_table_id: int _game_table_id: int
_game_table_name: str _game_table_name: str
_game_table_link: str _game_table_link: str
_active: bool _active: bool
_version: int
_docker_id: str _docker_id: str
_created: bool _created: bool
_updated: bool _updated: bool
@@ -22,15 +25,17 @@ class GameTable:
game_table_name: str, game_table_name: str,
game_table_link: str, game_table_link: str,
active: bool, active: bool,
version: int,
docker_id: int, docker_id: int,
created: bool = False, created: bool = False,
updated: bool = False, updated: bool = False,
delete: bool = False delete: bool = False,
): ):
self._game_table_id = game_table_id self._game_table_id = game_table_id
self._game_table_name = game_table_name self._game_table_name = game_table_name
self._game_table_link = game_table_link self._game_table_link = game_table_link
self._active = active self._active = active
self._version = version
self._docker_id = docker_id self._docker_id = docker_id
self._created = created self._created = created
self._updated = updated self._updated = updated
@@ -41,6 +46,7 @@ class GameTable:
"id": self._game_table_id, "id": self._game_table_id,
"table_name": self._game_table_name, "table_name": self._game_table_name,
"table_link": self._game_table_link, "table_link": self._game_table_link,
"version": self._version,
"active": self._active, "active": self._active,
} }
@@ -50,12 +56,13 @@ class GameTable:
self._game_table_id = random.randint(1, 999999999) self._game_table_id = random.randint(1, 999999999)
cursor.execute( cursor.execute(
"""INSERT INTO game_tables """INSERT INTO game_tables
(game_table_id, game_table_name, game_table_link, active, docker_id) (game_table_id, game_table_name, game_table_link, version, active, docker_id)
VALUES (?, ?, ?, ?, ?)""", VALUES (?, ?, ?, ?, ?, ?)""",
( (
self._game_table_id, self._game_table_id,
self._game_table_name, self._game_table_name,
self._game_table_link, self._game_table_link,
self._version,
self._active, self._active,
self._docker_id, self._docker_id,
), ),
@@ -66,11 +73,12 @@ class GameTable:
if not self._updated: if not self._updated:
cursor.execute( cursor.execute(
"""UPDATE game_tables """UPDATE game_tables
SET game_table_name = ?, game_table_link = ?, active = ?, docker_id = ? SET game_table_name = ?, game_table_link = ?, version = ?, active = ?, docker_id = ?
WHERE game_table_id = ?""", WHERE game_table_id = ?""",
( (
self._game_table_name, self._game_table_name,
self._game_table_link, self._game_table_link,
self._version,
self._active, self._active,
self._docker_id, self._docker_id,
self._game_table_id, self._game_table_id,
@@ -79,7 +87,10 @@ class GameTable:
self._updated = True self._updated = True
return return
if self._delete: if self._delete:
cursor.execute("DELETE FROM game_tables WHERE game_table_id = ?", (self._game_table_id,)) cursor.execute(
"DELETE FROM game_tables WHERE game_table_id = ?",
(self._game_table_id,),
)
self._created = False self._created = False
self._updated = True self._updated = True
self._delete = False self._delete = False
@@ -118,6 +129,15 @@ class GameTable:
self._updated = False self._updated = False
self._game_table_link = game_table_link self._game_table_link = game_table_link
@property
def version(self):
return self._version
@version.setter
def version(self, version: int):
self._updated = False
self._version = version
@property @property
def active(self): def active(self):
return self._active return self._active
@@ -146,7 +166,7 @@ class GameService:
def read_by_id(self, game_table_id, cursor=None): def read_by_id(self, game_table_id, cursor=None):
with SmartCursor(cursor, self.connection) as smartCursor: with SmartCursor(cursor, self.connection) as smartCursor:
rows = smartCursor.execute( rows = smartCursor.execute(
"""SELECT game_table_id, game_table_name, game_table_link, active, docker_id """SELECT game_table_id, game_table_name, game_table_link, active, version, docker_id
FROM game_tables FROM game_tables
WHERE game_table_id = ?""", WHERE game_table_id = ?""",
(game_table_id,), (game_table_id,),
@@ -155,24 +175,54 @@ class GameService:
if len(rows) == 0: if len(rows) == 0:
return None return None
return GameTable(rows[0], rows[1], rows[2], rows[3], rows[4], True, True, False) return GameTable(
game_table_id=rows[0],
game_table_name=rows[1],
game_table_link=rows[2],
active=rows[3],
version=rows[4],
docker_id=rows[5],
created=True,
updated=True,
delete=False,
)
def read_all(self, cursor=None): def read_all(self, cursor=None):
with SmartCursor(cursor, self.connection) as smartCursor: with SmartCursor(cursor, self.connection) as smartCursor:
rows = smartCursor.execute( rows = smartCursor.execute(
"SELECT game_table_id, game_table_name, game_table_link, active, docker_id FROM game_tables" "SELECT game_table_id, game_table_name, game_table_link, active, version, docker_id FROM game_tables"
).fetchall() ).fetchall()
return [ return [
GameTable(row[0], row[1], row[2], row[3], row[4], True, True, False) GameTable(
game_table_id=row[0],
game_table_name=row[1],
game_table_link=row[2],
active=row[3],
version=row[4],
docker_id=row[5],
created=True,
updated=True,
delete=False,
)
for row in rows for row in rows
] ]
def read_active(self, cursor=None): def read_active(self, cursor=None):
with SmartCursor(cursor, self.connection) as smartCursor: with SmartCursor(cursor, self.connection) as smartCursor:
rows = smartCursor.execute( rows = smartCursor.execute(
"SELECT game_table_id, game_table_name, game_table_link, active, docker_id FROM game_tables WHERE active != 0" "SELECT game_table_id, game_table_name, game_table_link, active, version, docker_id FROM game_tables WHERE active != 0"
).fetchall() ).fetchall()
return [ return [
GameTable(row[0], row[1], row[2], row[3], row[4], True, True, False) GameTable(
game_table_id=row[0],
game_table_name=row[1],
game_table_link=row[2],
active=row[3],
version=row[4],
docker_id=row[5],
created=True,
updated=True,
delete=False,
)
for row in rows for row in rows
] ]

View File

@@ -10,13 +10,12 @@ tables = Blueprint("tables_api", __name__)
@tables.route("/tables", methods=["POST"]) @tables.route("/tables", methods=["POST"])
def create_table(): def create_table():
current_app.logger.info(request.get_json())
db = get_db() db = get_db()
with SmartCursor(connection=db) as smartCursor: with SmartCursor(connection=db) as smartCursor:
table = GameTable( table = GameTable(
game_table_id=random.randrange(1, 100000),
game_table_name=request.get_json()["table_name"], game_table_name=request.get_json()["table_name"],
game_table_link=request.get_json()["table_link"], game_table_link=request.get_json()["table_link"],
version=request.get_json()["version"],
active=False, active=False,
docker_id=None, docker_id=None,
) )
@@ -34,7 +33,16 @@ def get_table(table_id):
@tables.route("/tables/<int:table_id>", methods=["POST"]) @tables.route("/tables/<int:table_id>", methods=["POST"])
def update_table(table_id): def update_table(table_id):
return db = get_db()
gameService = GameService(db)
table = gameService.read_by_id(table_id)
table.game_table_name = request.get_json()["table_name"]
table.game_table_link = request.get_json()["table_link"]
table.version = request.get_json()["version"]
with SmartCursor(connection=db) as smartCursor:
table.commit(smartCursor)
db.commit()
return table.toJson(), 200
@tables.route("tables/<table_id>", methods=["DELETE"]) @tables.route("tables/<table_id>", methods=["DELETE"])
@@ -90,10 +98,13 @@ def activate_table(table_id):
if len(keys) == 0: if len(keys) == 0:
return "No more keys", 400 return "No more keys", 400
keys[0].reserve(table.game_table_id) key = keys[0]
current_app.logger.info(table.game_table_id)
current_app.logger.info(table.docker_id)
key.reserve(table.game_table_id)
table.active = True table.active = True
table.docker_id = container_managment.start_foundry_container(table, keys[0]) table.docker_id = container_managment.start_foundry_container(table, key)
keys[0].commit(cursor) key.commit(cursor)
table.commit(cursor) table.commit(cursor)
cursor.close() cursor.close()
db.commit() db.commit()