From 101df213dcadbd413dc34af19aaae24ae6bfb4e1 Mon Sep 17 00:00:00 2001 From: Duoduo Date: Fri, 19 Sep 2025 18:14:15 +0800 Subject: [PATCH] dev --- models.py | 26 ++++++++++++++++++++++++++ utils/control.py | 1 + utils/db.py | 8 +++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/models.py b/models.py index f9263be..482ae8e 100644 --- a/models.py +++ b/models.py @@ -103,3 +103,29 @@ class WhaleContainer(db.Model): def __repr__(self): return "".format(self.id, self.user_id, self.challenge_id, self.start_time, self.renew_count) + +class WhaleContainerLog(db.Model): + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + user_id = db.Column(None, db.ForeignKey("users.id")) + challenge_id = db.Column(None, db.ForeignKey("challenges.id")) + start_time = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + uuid = db.Column(db.String(256)) + flag = db.Column(db.String(128), nullable=False) + + # Relationships + user = db.relationship( + "Users", foreign_keys="WhaleContainerLog.user_id", lazy="select") + challenge = db.relationship( + "DynamicDockerChallenge", foreign_keys="WhaleContainerLog.challenge_id", lazy="select" + ) + + def __init__(self, container): + self.user_id = container.user_id + self.challenge_id = container.challenge_id + self.start_time = container.challenge_id + self.uuid = container.uuid + self.flag = container.flag + + def __repr__(self): + return "".format(self.id, self.user_id, self.challenge_id, + self.start_time, self.uuid, self.flag) diff --git a/utils/control.py b/utils/control.py index 09c2d6b..cdce785 100644 --- a/utils/control.py +++ b/utils/control.py @@ -22,6 +22,7 @@ class ControlUtil: DockerUtils.remove_container(container) DBContainer.remove_container_record(user_id) return False, msg + DBContainer.create_container_log(container) return True, 'Container created' @staticmethod diff --git a/utils/db.py b/utils/db.py index 81a13ea..fca294c 100644 --- a/utils/db.py +++ b/utils/db.py @@ -2,7 +2,7 @@ import datetime from CTFd.models import db from CTFd.utils import get_config -from ..models import WhaleContainer, WhaleRedirectTemplate +from ..models import WhaleContainer,WhaleContainerLog, WhaleRedirectTemplate class DBContainer: @@ -14,6 +14,12 @@ class DBContainer: return container + @staticmethod + def create_container_log(container): + log = WhaleContainerLog(container=container) + db.session.add(log) + db.session.commit() + @staticmethod def get_current_containers(user_id): q = db.session.query(WhaleContainer)