diff --git a/receiver/main.py b/receiver/main.py index cf34af3..5c32295 100644 --- a/receiver/main.py +++ b/receiver/main.py @@ -11,6 +11,12 @@ from challenges.Sheesh import Sheesh from challenges.Warmup import Warmup import os +import asyncio +import logging + +# Setup logging +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) app = FastAPI() security = HTTPBasic() @@ -25,6 +31,50 @@ challenges = { "warmup": Warmup(15000), } +async def run_challenge_checks(): + """Run check function on all challenges at startup""" + logger.info("\n" + "="*60) + logger.info("Running challenge checks...") + logger.info("="*60 + "\n") + + results = {} + + for name, challenge in challenges.items(): + logger.info(f"\n[{name}] Starting check...") + try: + # Give service time between checks + await asyncio.sleep(2) + + result = challenge.check() + results[name] = result + + if result: + logger.info(f"[{name}] ✓ Check PASSED") + else: + logger.warning(f"[{name}] ✗ Check FAILED") + except Exception as e: + logger.error(f"[{name}] ✗ Check ERROR: {e}") + results[name] = False + + # Print summary + logger.info("\n" + "="*60) + logger.info("Challenge Check Summary:") + logger.info("="*60) + passed = sum(1 for r in results.values() if r) + total = len(results) + for name, result in results.items(): + status = "✓ PASS" if result else "✗ FAIL" + logger.info(f" {name:20} {status}") + logger.info(f"\nTotal: {passed}/{total} passed") + logger.info("="*60 + "\n") + + return results + +@app.on_event("startup") +async def startup_event(): + """Run challenge checks on application startup""" + asyncio.create_task(run_challenge_checks()) + class Flag(BaseModel): flag: str challenge: str @@ -32,7 +82,6 @@ class Flag(BaseModel): class History(BaseModel): log: str - @app.get("/") def read_root(): return {"service": "receiver-service"} diff --git a/starter.py b/starter.py index f10d743..f61500c 100644 --- a/starter.py +++ b/starter.py @@ -22,17 +22,25 @@ def main(): args = parser.parse_args() cwd = os.getcwd() - env = generate_env(args.username, args.password) receiver_env = os.path.join(cwd, 'receiver/.env') services_env = os.path.join(cwd, 'services/.env') - with open(receiver_env, 'w') as f: - f.write(env) - - with open(services_env, 'w') as f: - f.write(env) + # Only generate .env files if they don't already exist + if not os.path.exists(receiver_env) or not os.path.exists(services_env): + env = generate_env(args.username, args.password) + + with open(receiver_env, 'w') as f: + f.write(env) + + with open(services_env, 'w') as f: + f.write(env) + + print("Generated new .env files") + else: + print("Using existing .env files") os.chdir(os.path.join(cwd, 'services')) + # os.system(f'docker compose -f docker-compose.yml up -d {args.challenges}') os.system(f'docker compose -f docker-compose.yml up --build -d {args.challenges}') os.chdir(os.path.join(cwd, 'receiver'))