├── CTFd-Theme-StormCTF.png ├── README.md ├── plugins ├── challenges │ └── assets │ │ ├── view.html │ │ └── view.js └── dynamic_challenges │ └── assets │ ├── view.html │ └── view.js ├── screenshots ├── challenge_modal.png ├── challenge_modal_solves.png ├── challenges.png ├── login.png ├── profile.png ├── register.png ├── scoreboard.png ├── team.png └── teams.png └── stormctf ├── README.md ├── static ├── css │ ├── base.css │ ├── challenge-board.css │ ├── jumbotron.css │ ├── sticky-footer.css │ ├── style.css │ └── vendor │ │ ├── font-awesome │ │ ├── fontawesome-all.css │ │ ├── fontawesome-all.min.css │ │ ├── fontawesome-fonts.css │ │ └── webfonts │ │ │ ├── fa-brands-400.eot │ │ │ ├── fa-brands-400.svg │ │ │ ├── fa-brands-400.ttf │ │ │ ├── fa-brands-400.woff │ │ │ ├── fa-brands-400.woff2 │ │ │ ├── fa-regular-400.eot │ │ │ ├── fa-regular-400.svg │ │ │ ├── fa-regular-400.ttf │ │ │ ├── fa-regular-400.woff │ │ │ ├── fa-regular-400.woff2 │ │ │ ├── fa-solid-900.eot │ │ │ ├── fa-solid-900.svg │ │ │ ├── fa-solid-900.ttf │ │ │ ├── fa-solid-900.woff │ │ │ └── fa-solid-900.woff2 │ │ ├── font.css │ │ ├── lato │ │ ├── Lato_400.eot │ │ ├── Lato_400.svg │ │ ├── Lato_400.ttf │ │ ├── Lato_400.woff │ │ ├── Lato_400.woff2 │ │ ├── Lato_400i.eot │ │ ├── Lato_400i.svg │ │ ├── Lato_400i.ttf │ │ ├── Lato_400i.woff │ │ ├── Lato_400i.woff2 │ │ ├── Lato_700.eot │ │ ├── Lato_700.svg │ │ ├── Lato_700.ttf │ │ ├── Lato_700.woff │ │ ├── Lato_700.woff2 │ │ ├── Lato_700i.eot │ │ ├── Lato_700i.svg │ │ ├── Lato_700i.ttf │ │ ├── Lato_700i.woff │ │ └── Lato_700i.woff2 │ │ ├── raleway │ │ ├── Raleway_400.eot │ │ ├── Raleway_400.svg │ │ ├── Raleway_400.ttf │ │ ├── Raleway_400.woff │ │ ├── Raleway_400.woff2 │ │ ├── Raleway_400i.eot │ │ ├── Raleway_400i.svg │ │ ├── Raleway_400i.ttf │ │ ├── Raleway_400i.woff │ │ ├── Raleway_400i.woff2 │ │ ├── Raleway_700.eot │ │ ├── Raleway_700.svg │ │ ├── Raleway_700.ttf │ │ ├── Raleway_700.woff │ │ ├── Raleway_700.woff2 │ │ ├── Raleway_700i.eot │ │ ├── Raleway_700i.svg │ │ ├── Raleway_700i.ttf │ │ ├── Raleway_700i.woff │ │ └── Raleway_700i.woff2 │ │ ├── uikit.css │ │ └── uikit.min.css ├── fonts │ ├── IcoMoon.eot │ ├── font-08a5b663.woff │ ├── font-360dafd3.woff │ ├── font-38d64ba3.woff │ ├── font-3d31737a.woff2 │ ├── font-6482a3ff.woff2 │ ├── font-6c7b3554.woff │ ├── font-a3913573.woff2 │ ├── font-a4a03eac.woff │ ├── font-a6c1c4ca.woff2 │ ├── font-b7eb26b8.woff │ ├── font-c2ad8b3d.woff2 │ ├── font-e0d6f976.woff2 │ ├── font-ec67e4a8.woff │ ├── font-ec84201c.woff2 │ ├── font-f2de05d4.woff │ ├── font-fd3a65d0.woff2 │ └── section-background-image-noise.png ├── img │ ├── challenges.jpg │ ├── confirmation.png │ ├── ctfd.ai │ ├── ctfd.svg │ ├── ctfd_transfer.svg │ ├── favicon.ico │ ├── login.jpg │ ├── logo.png │ ├── logo_old.png │ ├── notifications.png │ ├── scoreboard.png │ └── team.png └── js │ ├── CTFd.js │ ├── chalboard.js │ ├── challenges.js │ ├── events.js │ ├── ezq.js │ ├── hints.js │ ├── multi-modal.js │ ├── scoreboard.js │ ├── settings.js │ ├── style.js │ ├── team.js │ ├── user.js │ ├── utils.js │ └── vendor │ ├── bootstrap.bundle.min.js │ ├── codemirror.min.js │ ├── eventsource.min.js │ ├── fetch.min.js │ ├── fontawesome-all.min.js │ ├── howler.min.js │ ├── jquery.min.js │ ├── markdown-it.min.js │ ├── marked.min.js │ ├── moment-timezone-with-data.min.js │ ├── moment.min.js │ ├── nunjucks.min.js │ ├── plotly.min.js │ ├── promise-polyfill.min.js │ ├── uikit-icons.min.js │ ├── uikit.min.js │ └── window-controller.js └── templates ├── base.html ├── challenges.html ├── confirm.html ├── errors ├── 403.html ├── 404.html ├── 429.html ├── 500.html └── 502.html ├── login.html ├── notifications.html ├── page.html ├── register.html ├── reset_password.html ├── scoreboard.html ├── settings.html ├── setup.html ├── teams ├── join_team.html ├── new_team.html ├── private.html ├── public.html ├── team_enrollment.html └── teams.html └── users ├── private.html ├── public.html └── users.html /CTFd-Theme-StormCTF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sctf2020/CTFd-Theme-StormCTF/10a9f0bae810aaaca98e746b2c015638ff623742/CTFd-Theme-StormCTF.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CTFd-Theme-StormCTF 2 | CTFd Theme for StormCTF (Updated a little bit for the newest version of CTFd) 3 | 4 | ### For Version 2.1.1 5 | 6 | ## Info 7 | Redesigned CTFd template for [UIKit](https://getuikit.com). Colors are based off of StormCTF's Website. Mobile ready. Written by [Alex](https://twitter.com/offsec_ginger) for StormCTF 2019 at InfoSeCon 2019. 8 | 9 | ## Installation 10 | * Copy `stormctf/` into your `CTFd/CTFd/themes` folder. 11 | * Copy `plugins/challenges/assets/view.html` to `CTFd/CTFd/plugins/challenges/assets/view.html` 12 | * Copy `plugins/challenges/assets/view.js` to `CTFd/CTFd/plugins/challenges/assets/view.js` 13 | * **THIS WILL OVERWRITE THE ORIGINAL. MAKE A BACKUP.** 14 | 15 | ### TO DO: 16 | - [ ] Maybe redo the Graphs? 17 | - [x] Wait for @ColdHeat to update to 3.0 so I can fix this all over again :stuck_out_tongue: 18 | 19 |  20 | -------------------------------------------------------------------------------- /plugins/challenges/assets/view.html: -------------------------------------------------------------------------------- 1 |
{{ description | safe }}
23 |Name | 72 |Date | 73 |
---|
{{ description | safe }}
23 |Name | 72 |Date | 73 |
---|
\{1\}
' + 9 | '18 |23 |{{ notification.content | safe }}
19 | 22 |
This CTF is not configured to send email.
52 |Please contact an organizer to have your password reset
53 |Place | 47 |Team | 48 |Score | 49 |
{{ loop.index }} | 55 |56 | 57 | {{ standing.name | truncate(50) }} 58 | {% if standing.oauth_id %} 59 | {% if get_config('user_mode') == 'teams' %} 60 | 61 | Official 62 | 63 | {% elif get_config('user_mode') == 'users' %} 64 | 65 | Official 66 | 67 | {% endif %} 68 | {% endif %} 69 | 70 | | 71 |{{ standing.score }} | 72 |
---|
After creating your team, share the team name and password with your teammates so they can join your team!
29 |User Name | 70 |Score | 71 |
77 | 78 | {{ member.name }} 79 | 80 | | 81 |{{ member.score }} | 82 |
Challenge | 149 |Category | 150 |Value | 151 |Time | 152 |
{{ solve.challenge.name }} | 158 |{{ solve.challenge.category }} | 159 |{{ solve.challenge.value }} | 160 |161 | 164 | | 165 |
In order to participate you must either join or create a team. Check with your teammates before you continue!
17 |Team | 16 |Affiliation | 17 |Website | 18 |Country | 19 |
25 | {% if scores_visible() %} 26 | 27 | {{ team.name | truncate(50) }} 28 | 29 | {% else %} 30 | {{ team.name | truncate(50) }} 31 | {% endif %} 32 | {% if team.oauth_id %} 33 | 34 | Official 35 | 36 | {% endif %} 37 | | 38 |39 | {% if team.affiliation %} 40 | {% if team.affiliation | length > 50 %} 41 | 42 | {% if team.affiliation %}{{ team.affiliation | truncate(50) }}{% endif %} 43 | 44 | {% else %} 45 | 46 | {% if team.affiliation %}{{ team.affiliation | truncate(50) }}{% endif %} 47 | 48 | {% endif %} 49 | {% endif %} 50 | | 51 |52 | {% if team.website and (team.website.startswith('http://') or team.website.startswith('https://')) %} 53 | 54 | {{ team.website | truncate(20) }} 55 | 56 | {% endif %} 57 | | 58 |59 | {% if team.country %}{{ lookup_country_code(team.country) }}{% endif %} 60 | | 61 |
Page
69 |Challenge | 129 |Category | 130 |Value | 131 |Time | 132 |
{{ solve.challenge.name }} | 138 |{{ solve.challenge.category }} | 139 |{{ solve.challenge.value }} | 140 |141 | 144 | | 145 |
Challenge | 129 |Category | 130 |Value | 131 |Time | 132 |
{{ solve.challenge.name }} | 138 |{{ solve.challenge.category }} | 139 |{{ solve.challenge.value }} | 140 |141 | 144 | | 145 |
User | 16 |Affiliation | 17 |Website | 18 |Country | 19 |
25 | {% if scores_visible() %} 26 | 27 | {{ user.name | truncate(50) }} 28 | 29 | {% else %} 30 | {{ user.name | truncate(50) }} 31 | {% endif %} 32 | {% if user.oauth_id %} 33 | 34 | Official 35 | 36 | {% endif %} 37 | | 38 |39 | {% if user.affiliation %} 40 | {% if user.affiliation | length > 50 %} 41 | 42 | {% if user.affiliation %}{{ user.affiliation | truncate(50) }}{% endif %} 43 | 44 | {% else %} 45 | 46 | {% if user.affiliation %}{{ user.affiliation | truncate(50) }}{% endif %} 47 | 48 | {% endif %} 49 | {% endif %} 50 | | 51 |52 | {% if user.website and (user.website.startswith('http://') or user.website.startswith('https://')) %} 53 | 54 | {{ user.website | truncate(20) }} 55 | 56 | {% endif %} 57 | | 58 |59 | {% if user.country %}{{ lookup_country_code(user.country) }}{% endif %} 60 | | 61 |
Page
69 |