Atlas is an open-source platform for hosting Capture The Flag (CTF) competitions, utilizing dynamic Docker orchestration to manage challenge environments. It offers an intuitive frontend, customizable admin panel, and a robust backend for seamless deployment and container management, ensuring a scalable and flexible CTF event experience.
- Dynamic Docker orchestration for challenge environments
- Intuitive and user-friendly frontend
- Customizable admin panel
- Scalable and flexible deployment
- Docker
- Docker Compose
- Node.js (for frontend)
- Python (for backend)
-
Clone the repository:
git clone https://github.com/WebClub-NITK/atlas.git cd atlas
-
Configure environment variables: Create a
.env
file in bothbackend
andfrontend
directories and set the necessary environment variables as described in the.env.example
files. -
Run the services:
docker-compose up --build
We welcome contributions from the community! To get started, please read our CONTRIBUTING.md file for detailed guidelines on how to contribute to the project.
- Ensure your code follows the existing code style.
- Write tests for new features or bug fixes.
- Update documentation as needed.
- Be respectful in your communications.
The architecture of Atlas is designed to be modular and scalable, consisting of the following main components:
- Frontend: A JavaScript-based web application built with React.js, providing an intuitive interface for participants and administrators.
- Backend: A Python-based application using Flask, responsible for handling API requests, managing challenge states, and orchestrating Docker containers.
- Database: PostgreSQL is used for persistent storage of user data, scores, and challenge states.
- Docker Orchestration: Docker and Docker Compose are used to manage challenge environments, ensuring isolation and scalability.
The frontend is built using React.js and communicates with the backend via REST APIs. It includes:
- Participant Dashboard: Allows participants to view and solve challenges, track their progress, and view the leaderboard.
- Admin Panel: Provides administrators with tools to create and manage challenges, view participant activity, and monitor system health.
The backend is a Flask application that handles:
- User Authentication: Manages user registration, login, and session management.
- Challenge Management: Handles the creation, updating, and deletion of challenges.
- Scoring System: Computes and updates participant scores based on challenge completions.
- Docker Management: Orchestrates Docker containers to provide isolated challenge environments.
PostgreSQL is used as the primary database. It stores:
- User Data: Information about participants and administrators.
- Challenge Data: Details of each challenge, including metadata and solution hints.
- Scores: Participant scores and progress data.
- EDR for reference: here
Docker and Docker Compose are used to manage the lifecycle of challenge environments. Each challenge is run in its own Docker container, ensuring isolation and reproducibility. Docker Compose is used to define and run multi-container Docker applications.
See the LICENSE file for details.