diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..5a57697 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/ctfs/templates/challenges"] + path = src/ctfs/templates/challenges + url = https://gitea.42ctf.org/42CTF/challenges-descriptions.git diff --git a/README.md b/README.md index b528eeb..1b2c50e 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,34 @@ -# 42ctf -CTF by 42 students +# 42CTF + +[42CTF](https://www.42ctf.org) is a CTF platform created by School 42 students and open to anyone. + ### Todo -- [x] Password reset -- [x] Access solved challenges -- [x] "Intro" section -- [x] Profile edition -- [x] Resources page -- [x] Flags counter -- [x] Graphs on profile page -- [ ] Refacto the discord bot with OAuth -- [x] Platform translation - - [x] French - - [ ] Russian - - [x] Spanish - - [ ] Italian - - [x] German -- [ ] OAuth 42 - - [ ] 42 Network leaderboard -- [ ] Possibility for users to propose solution to challenges -- [ ] Badges/achievments on profile pages -- [x] Dynamic scoring +TODO has been migrated to [issues](https://gitea.42ctf.org/42CTF/website/issues) ! +And hopefully, it is not redirected anymore to `/dev/null`. -#### Event feature +### How to contribute ? -- [X] make scoreboard for events -- [X] make access mod for events : - - [X] Sub button for public events - - [X] Access by password - - [X] Begin date for display challenges - - [X] Ending date for stop flag submission - - [ ] Access by invite link -- [X] Admin rights - - [X] Admin can access to events pages without password - - [X] Admin can subscribe to event without password -- [X] process flag submission - - [X] increment user score in Scores model -- [X] add filters for admin dashboard -- [X] add search in fields in admin dashboard -- [X] Smooth display of events listing -- [X] Event info page with background and noice display -- [x] Create teams for events - - [x] Create/join team - - [x] Manage team: change password / leave team -- [ ] Dynamic scoring for events +First, you need to contact a 42CTF admin to get an account on the 42CTF gitea. +You can contact us on [discord](https://discord.gg/3KDvt6hbWW) or by [email](mailto:42ctf@protonmail.com). +You can also fill this [form](https://forms.42l.fr/apps/forms/bpmyGR37AR4yHGnC) and we'll contact you. +Then, once you have a gitea account, you can fork this repository, do some stuff, and open a pull request. + +If you want to translate the platform, then have a look at the [wiki](https://gitea.42ctf.org/42CTF/website/wiki). + +If you want to help with bot development, it has now its own [repository](https://gitea.42ctf.org/42CTF/bot) + +### How to set up my dev environment ? + +There is only one file missing on this repository for you to run the server: `local_settings.py`. +You should create one in the `src` directory, with the following content: +``` +DEBUG = True +SECRET_KEY = 'what you want' +``` + +When you'll run `python manage.py migrate` then `python manage.py runserver`, an empty database will be automatically created. +The `local_settings.py` is in the `.gitignore` and should stay that way, so we don't accidentally overwrite the production file when we deploy. + +To obtain administrator rights you can run `python manage.py createsuperuser`. \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 226a15c..8d537b7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Django -requests -authlib +Django==3.2.11 +requests==2.27.1 +authlib==0.15.5 diff --git a/src/ctfs/migrations/0008_auto_20220215_1713.py b/src/ctfs/migrations/0008_auto_20220215_1713.py new file mode 100644 index 0000000..59d007c --- /dev/null +++ b/src/ctfs/migrations/0008_auto_20220215_1713.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.11 on 2022-02-15 16:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ctfs', '0007_ctf_disabled'), + ] + + operations = [ + migrations.RemoveField( + model_name='ctf', + name='description_de', + ), + migrations.RemoveField( + model_name='ctf', + name='description_ru', + ), + migrations.AddField( + model_name='ctf', + name='port', + field=models.PositiveSmallIntegerField(blank=True, null=True), + ), + ] diff --git a/src/ctfs/models.py b/src/ctfs/models.py index afec01c..50a418b 100644 --- a/src/ctfs/models.py +++ b/src/ctfs/models.py @@ -15,10 +15,9 @@ class CTF(models.Model): disabled = models.BooleanField(default=False) description = models.TextField(blank=True) description_en = models.TextField(blank=True) - description_ru = models.TextField(blank=True) - description_de = models.TextField(blank=True) file = models.FileField(blank=True, upload_to='challenges') ctf_url = models.URLField(blank=True) + port = models.PositiveSmallIntegerField(null=True, blank=True) event = models.ForeignKey(Event, null=True, blank=True, on_delete=models.CASCADE) points = models.PositiveSmallIntegerField() slug = models.SlugField(max_length=55) diff --git a/src/ctfs/templates/challenges b/src/ctfs/templates/challenges new file mode 160000 index 0000000..18fac39 --- /dev/null +++ b/src/ctfs/templates/challenges @@ -0,0 +1 @@ +Subproject commit 18fac3978d21dc824bcffa2bc960aa2bf6b4abd9 diff --git a/src/ctfs/templates/ctfs/ctf_info.html b/src/ctfs/templates/ctfs/ctf_info.html index 3eab7f2..453697f 100644 --- a/src/ctfs/templates/ctfs/ctf_info.html +++ b/src/ctfs/templates/ctfs/ctf_info.html @@ -2,6 +2,8 @@ {% block content %} {% load i18n %} {% load is_member %} +{% load get_chall %} +{% get_current_language as lang %}
@@ -15,11 +17,11 @@
{% else %}
- {% if description %} - {{ description|safe }} - {% else %} - {% trans "No translation available. Please try another language (English or French)." %} - {% endif %} + {% get_chall_by_lang ctf lang as content %} + {{ content | safe }} +