diff --git a/README.md b/README.md index daa61d83..a1530e80 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Crafty Controller](https://gitlab.com/crafty-controller/crafty-4) - Crafty 4 is the next iteration of our Minecraft Server Wrapper / Controller / Launcher. - [Conduit](https://gitlab.com/famedly/conduit) - Conduit is a simple, fast and reliable chat server written in Rust - [Cross-seed](https://github.com/cross-seed/cross-seed) - Fully-automatic, no false positives. +- [CTFd](https://github.com/CTFd/CTFd) - CTFd is a Capture The Flag framework focusing on ease of use and customizability. - [DailyTXT](https://github.com/PhiTux/DailyTxT) - Encrypted Diary Web-App - [Dash.](https://github.com/MauriceNino/dashdot) - A simple, modern server dashboard, primarily used by smaller private server - [Dashy](https://github.com/lissy93/dashy) - A self-hostable personal dashboard built for you. diff --git a/apps/ctfd/config.json b/apps/ctfd/config.json new file mode 100644 index 00000000..d59ca33e --- /dev/null +++ b/apps/ctfd/config.json @@ -0,0 +1,43 @@ +{ + "$schema": "../schema.json", + "name": "CTFd", + "port": 8546, + "available": true, + "exposable": true, + "id": "ctfd", + "tipi_version": 1, + "version": "3.6.1", + "categories": [ + "utilities" + ], + "description": "CTFd is a Capture The Flag framework focusing on ease of use and customizability.", + "short_desc": "Cyber Security Training made simple.", + "author": "CTFd", + "source": "https://github.com/CTFd/CTFd", + "website": "https://ctfd.io/", + "form_fields": [ + { + "type": "random", + "label": "CTFD_MYSQL_DB_PASSWORD", + "min": 32, + "env_variable": "CTFD_MYSQL_DB_PASSWORD" + }, + { + "type": "random", + "label": "CTFD_SECRET_KEY", + "min": 32, + "env_variable": "CTFD_SECRET_KEY" + }, + { + "type": "random", + "label": "CTFD_MYSQL_ROOT_PASSWORD", + "min": 32, + "env_variable": "CTFD_MYSQL_ROOT_PASSWORD" + } + ], + "supported_architectures": [ + "arm64", + "amd64" + ] + } + \ No newline at end of file diff --git a/apps/ctfd/docker-compose.yml b/apps/ctfd/docker-compose.yml new file mode 100644 index 00000000..a695dde3 --- /dev/null +++ b/apps/ctfd/docker-compose.yml @@ -0,0 +1,75 @@ +version: "3.7" +services: + ctfd: + image: ctfd/ctfd:3.6.1 + container_name: ctfd + restart: unless-stopped + ports: + - ${APP_PORT}:8000 + environment: + - UPLOAD_FOLDER=/var/uploads + - DATABASE_URL=mysql+pymysql://tipi:${CTFD_MYSQL_DB_PASSWORD}@ctfd-db/ctfd + - REDIS_URL=redis://ctfd-redis:6379 + - WORKERS=1 + - LOG_FOLDER=/var/log/CTFd + - ACCESS_LOG=- + - ERROR_LOG=- + - REVERSE_PROXY=true + - SECRET_KEY=${CTFD_SECRET_KEY} + volumes: + - ${APP_DATA_DIR}/data/uploads:/var/log/CTFd + - ${APP_DATA_DIR}/data/uploads:/var/uploads + depends_on: + - ctfd-db + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.ctfd-web-redirect.redirectscheme.scheme: https + traefik.http.services.ctfd.loadbalancer.server.port: 8000 + # Web + traefik.http.routers.ctfd-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ctfd-insecure.entrypoints: web + traefik.http.routers.ctfd-insecure.service: ctfd + traefik.http.routers.ctfd-insecure.middlewares: ctfd-web-redirect + # Websecure + traefik.http.routers.ctfd.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ctfd.entrypoints: websecure + traefik.http.routers.ctfd.service: ctfd + traefik.http.routers.ctfd.tls.certresolver: myresolver + # Local domain + traefik.http.routers.ctfd-local-insecure.rule: Host(`ctfd.${LOCAL_DOMAIN}`) + traefik.http.routers.ctfd-local-insecure.entrypoints: web + traefik.http.routers.ctfd-local-insecure.service: ctfd + traefik.http.routers.ctfd-local-insecure.middlewares: ctfd-web-redirect + # Local domain secure + traefik.http.routers.ctfd-local.rule: Host(`ctfd.${LOCAL_DOMAIN}`) + traefik.http.routers.ctfd-local.entrypoints: websecure + traefik.http.routers.ctfd-local.service: ctfd + traefik.http.routers.ctfd-local.tls: true + + ctfd-db: + image: mariadb:10.4.12 + restart: unless-stopped + container_name: ctfd-db + environment: + - MYSQL_ROOT_PASSWORD=${CTFD_MYSQL_ROOT_PASSWORD} + - MYSQL_USER=tipi + - MYSQL_PASSWORD=${CTFD_MYSQL_DB_PASSWORD} + - MYSQL_DATABASE=ctfd + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/mysql + networks: + - tipi_main_network + # This command is required to set important mariadb defaults + command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0] + + ctfd-redis: + image: redis:4 + container_name: ctfd-redis + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/redis:/data + networks: + - tipi_main_network \ No newline at end of file diff --git a/apps/ctfd/metadata/description.md b/apps/ctfd/metadata/description.md new file mode 100644 index 00000000..21f3df69 --- /dev/null +++ b/apps/ctfd/metadata/description.md @@ -0,0 +1,35 @@ +# ![](https://github.com/CTFd/CTFd/blob/master/CTFd/themes/core/static/img/logo.png?raw=true) + +## What is CTFd? + +CTFd is a Capture The Flag framework focusing on ease of use and customizability. It comes with everything you need to run a CTF and it's easy to customize with plugins and themes. + +![CTFd is a CTF in a can.](https://github.com/CTFd/CTFd/blob/master/CTFd/themes/core/static/img/scoreboard.png?raw=true) + +## Features + +- Create your own challenges, categories, hints, and flags from the Admin Interface + - Dynamic Scoring Challenges + - Unlockable challenge support + - Challenge plugin architecture to create your own custom challenges + - Static & Regex based flags + - Custom flag plugins + - Unlockable hints + - File uploads to the server or an Amazon S3-compatible backend + - Limit challenge attempts & hide challenges + - Automatic bruteforce protection +- Individual and Team based competitions + - Have users play on their own or form teams to play together +- Scoreboard with automatic tie resolution + - Hide Scores from the public + - Freeze Scores at a specific time +- Scoregraphs comparing the top 10 teams and team progress graphs +- Markdown content management system +- SMTP + Mailgun email support + - Email confirmation support + - Forgot password support +- Automatic competition starting and ending +- Team management, hiding, and banning +- Customize everything using the [plugin](https://docs.ctfd.io/docs/plugins/overview) and [theme](https://docs.ctfd.io/docs/themes/overview) interfaces +- Importing and Exporting of CTF data for archival +- And a lot more... \ No newline at end of file diff --git a/apps/ctfd/metadata/logo.jpg b/apps/ctfd/metadata/logo.jpg new file mode 100644 index 00000000..2637dbff Binary files /dev/null and b/apps/ctfd/metadata/logo.jpg differ