diff --git a/container_manager.py b/container_manager.py index abd8a9f..3f7e686 100644 --- a/container_manager.py +++ b/container_manager.py @@ -143,6 +143,11 @@ def wrapper_run_command(self, *args, **kwargs): @run_command def kill_expired_containers(self, app: Flask): + # Handle both scheduled and manual calls + if not isinstance(app, Flask): + from CTFd import create_app + app = create_app() + with app.app_context(): containers: "list[ContainerInfoModel]" = ContainerInfoModel.query.all() diff --git a/models.py b/models.py index 4ea536c..0571ada 100644 --- a/models.py +++ b/models.py @@ -64,7 +64,7 @@ class ContainerFlagModel(db.Model): ) container_id = db.Column( db.String(512), - db.ForeignKey("container_info_model.container_id"), + db.ForeignKey("container_info_model.container_id", ondelete="CASCADE"), nullable=True, ) flag = db.Column(db.Text) diff --git a/user_routes.py b/user_routes.py index 3ee8ade..c7497a9 100644 --- a/user_routes.py +++ b/user_routes.py @@ -88,7 +88,7 @@ def route_stop_container(): user_id=None if is_team_mode() else xid ).first() - if running_container: + if running_container and running_container.container_id: return kill_container(container_manager, running_container.container_id) return {"error": "No container found"}, 400 except ValueError as err: