forked from 42CTF/website
Compare commits
48 Commits
280ba0d1fc
...
87efa03ed0
Author | SHA1 | Date |
---|---|---|
Starthur | 87efa03ed0 | |
Starthur | 5435ea3316 | |
Starthur | 4245cfd19f | |
Starthur | f391a5a5cb | |
Starthur | ebdc3b9c9e | |
Starthur | 9d3b9ebf5f | |
Starthur | 04318e3b0a | |
Starthur | eeb752d605 | |
Starthur | 2d466454f5 | |
Starthur | 7ff972e623 | |
Starthur | d8791353fb | |
Starthur | dc3e7f4b27 | |
Starthur | 763853b3c6 | |
Starthur | c1c82ff9e0 | |
Starthur | fdc3796667 | |
Starthur | b25bf03485 | |
Starthur | 5a08764df7 | |
UncleReaton | 084fb1a62d | |
Starthur | d8c35db454 | |
UncleReaton | 6e860b2997 | |
Starthur | 4ee613d9af | |
Starthur | 9c75b317eb | |
Starthur | 2d2e97e794 | |
Arthur-TRT | 66ab43bf2b | |
Starthur | 4213883774 | |
Arthur-TRT | 9cb4b2b3a8 | |
Starthur | b90cc55b8d | |
UncleReaton | d19514f629 | |
Aslan | 6b2b0cef7d | |
Aslan | d7bf9ae74e | |
Danhia | dfa36b58a6 | |
Starthur | bf5678d371 | |
Danhia | 3c013794d7 | |
Danhia | 6110408cd0 | |
Starthur | bb2617a3e4 | |
Starthur | e23d6d7f49 | |
Starthur | 978dd24a00 | |
Danhia | 15f3a21c60 | |
Starthur | e480aec493 | |
Starthur | 3991dda7d3 | |
Starthur | e8575d559e | |
Starthur | ea691204c4 | |
Arthur TROUILLET | 21f38906df | |
Arthur TROUILLET | 39e3859836 | |
Arthur-TRT | a26784cd98 | |
Yir | ba7992e7be | |
Danhia | 7dad96d79f | |
Danhia | d554961dd1 |
|
@ -1,5 +1,6 @@
|
||||||
from .models import UserProfileInfo
|
from .models import UserProfileInfo
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from .models import Campus
|
||||||
|
|
||||||
#admin.site.register(UserProfileInfo)
|
#admin.site.register(UserProfileInfo)
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
|
@ -7,6 +8,10 @@ from django.contrib import admin
|
||||||
@admin.register(UserProfileInfo)
|
@admin.register(UserProfileInfo)
|
||||||
class userprofile(admin.ModelAdmin):
|
class userprofile(admin.ModelAdmin):
|
||||||
#list display
|
#list display
|
||||||
list_display = ['user', 'score', 'last_submission_date']
|
list_display = ['user', 'score', 'last_submission_date', 'intra42_campus']
|
||||||
# search list
|
# search list
|
||||||
search_fields = ['score', 'user__username']
|
search_fields = ['score', 'user__username', 'intra42_campus']
|
||||||
|
|
||||||
|
@admin.register(Campus)
|
||||||
|
class campus(admin.ModelAdmin):
|
||||||
|
list_display = ['name']
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.11 on 2022-03-29 08:34
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('accounts', '0007_auto_20220123_1704'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userprofileinfo',
|
||||||
|
name='intra42_campus',
|
||||||
|
field=models.CharField(blank=True, max_length=50, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userprofileinfo',
|
||||||
|
name='intra42_id',
|
||||||
|
field=models.CharField(blank=True, max_length=20, null=True, unique=True),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Generated by Django 3.2.11 on 2022-03-29 11:39
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('accounts', '0008_auto_20220329_1034'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='userprofileinfo',
|
||||||
|
options={'ordering': ['-score', 'last_submission_date', 'user__username', 'intra42_campus'], 'permissions': (('view_info', 'View user info'),), 'verbose_name': 'profile', 'verbose_name_plural': 'profiles'},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userprofileinfo',
|
||||||
|
name='intra42_campus_id',
|
||||||
|
field=models.CharField(blank=True, max_length=10, null=True),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Generated by Django 3.2.11 on 2022-05-17 12:52
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('accounts', '0009_auto_20220329_1339'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Campus',
|
||||||
|
fields=[
|
||||||
|
('id', models.IntegerField(primary_key=True, serialize=False, unique=True)),
|
||||||
|
('name', models.CharField(max_length=50)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'campus',
|
||||||
|
'verbose_name_plural': 'campuses',
|
||||||
|
'permissions': (('view_info', 'View user info'),),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userprofileinfo',
|
||||||
|
name='campus',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='accounts.campus'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.11 on 2022-05-17 12:54
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
from accounts.models import UserProfileInfo
|
||||||
|
from accounts.models import Campus
|
||||||
|
|
||||||
|
def migrate_campus(apps, schema_editor):
|
||||||
|
UserProfileInfo = apps.get_model('accounts', 'UserProfileInfo')
|
||||||
|
Campus = apps.get_model('accounts', 'Campus')
|
||||||
|
for user in UserProfileInfo.objects.all():
|
||||||
|
if user.intra42_campus_id:
|
||||||
|
user.campus, created = Campus.objects.get_or_create(id=user.intra42_campus_id, name=user.intra42_campus)
|
||||||
|
user.save()
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('accounts', '0010_auto_20220517_1452'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RunPython(migrate_campus),
|
||||||
|
]
|
|
@ -12,15 +12,29 @@ class UserProfileInfo(models.Model):
|
||||||
last_submission_date = models.DateTimeField('Last Submission Date', default=timezone.now)
|
last_submission_date = models.DateTimeField('Last Submission Date', default=timezone.now)
|
||||||
token = models.CharField(max_length=200, blank=True)
|
token = models.CharField(max_length=200, blank=True)
|
||||||
discord_id = models.CharField(max_length=20, null=True, blank=True, unique=True)
|
discord_id = models.CharField(max_length=20, null=True, blank=True, unique=True)
|
||||||
|
intra42_id = models.CharField(max_length=20, null=True, blank=True, unique=True)
|
||||||
|
campus = models.ForeignKey('Campus', on_delete=models.DO_NOTHING, null=True, blank=True)
|
||||||
|
intra42_campus = models.CharField(max_length=50, null=True, blank=True)
|
||||||
|
intra42_campus_id = models.CharField(max_length=10, null=True, blank=True)
|
||||||
member = models.BooleanField(default=False)
|
member = models.BooleanField(default=False)
|
||||||
member_since = models.DateTimeField('Member since', default=timezone.now)
|
member_since = models.DateTimeField('Member since', default=timezone.now)
|
||||||
member_until = models.DateTimeField('Member until', default=timezone.now)
|
member_until = models.DateTimeField('Member until', default=timezone.now)
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.user.username
|
return self.user.username
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['-score', 'last_submission_date', 'user__username']
|
ordering = ['-score', 'last_submission_date', 'user__username', 'intra42_campus']
|
||||||
verbose_name = 'profile'
|
verbose_name = 'profile'
|
||||||
verbose_name_plural = 'profiles'
|
verbose_name_plural = 'profiles'
|
||||||
permissions = (("view_info", "View user info"),)
|
permissions = (("view_info", "View user info"),)
|
||||||
|
|
||||||
|
class Campus(models.Model):
|
||||||
|
id = models.IntegerField(primary_key=True, unique=True)
|
||||||
|
name = models.CharField(max_length=50)
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
class Meta:
|
||||||
|
verbose_name = 'campus'
|
||||||
|
verbose_name_plural = 'campuses'
|
||||||
|
permissions = (("view_info", "View user info"),)
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
|
|
|
@ -60,6 +60,21 @@
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="d-flex">
|
||||||
|
{% if user.userprofileinfo.intra42_id|length > 0 %}
|
||||||
|
<form action="{% url 'accounts:connections-disconnect-intra42' %}" method='POST'
|
||||||
|
class="form-inline p-2">
|
||||||
|
{%csrf_token%}
|
||||||
|
<button class="btn btn-dark" type="submit">{% trans "Disconnect 42" %}</button>
|
||||||
|
</form>
|
||||||
|
{% else %}
|
||||||
|
<form action="{% url 'accounts:connections-connect-intra42' %}" method='POST'
|
||||||
|
class="form-inline p-2">
|
||||||
|
{%csrf_token%}
|
||||||
|
<button class="btn btn-dark" type="submit">{% trans "Connect 42" %}</button>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -87,4 +102,4 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -75,13 +75,26 @@
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<ul class="list-group">
|
||||||
|
<ul class="list-group">
|
||||||
|
<li class="list-group-item">{% trans "Challenges created" %}</li>
|
||||||
|
{% if created %}
|
||||||
|
{% for creat in created %}
|
||||||
|
<li class="list-group-item"><a href="{% url 'ctf' cat_slug=creat.category.slug ctf_slug=creat.slug %}">{{ creat.name }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<li class="list-group-item">{% trans "It seems that this user has not created any challenge yet..." %}</li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="https://code.highcharts.com/highcharts.src.js"></script>
|
<script src="https://code.highcharts.com/highcharts.src.js"></script>
|
||||||
<script>
|
<script>
|
||||||
Highcharts.theme={colors:["#2b908f","#90ee7e","#f45b5b","#7798BF","#aaeeee","#ff0066","#eeaaee","#55BF3B","#DF5353","#7798BF","#aaeeee"],chart:{backgroundColor:{linearGradient:{x1:0,y1:0,x2:1,y2:1},stops:[[0,"#1D1D1D"],[1,"#1D1D1D"]]},style:{fontFamily:"'Unica One', sans-serif"},plotBorderColor:"#606063"},title:{style:{color:"#E0E0E3",textTransform:"uppercase",fontSize:"20px"}},subtitle:{style:{color:"#E0E0E3",textTransform:"uppercase"}},xAxis:{gridLineColor:"#707073",labels:{style:{color:"#E0E0E3"}},lineColor:"#707073",minorGridLineColor:"#505053",tickColor:"#707073",title:{style:{color:"#A0A0A3"}}},yAxis:{gridLineColor:"#707073",labels:{style:{color:"#E0E0E3"}},lineColor:"#707073",minorGridLineColor:"#505053",tickColor:"#707073",tickWidth:1,title:{style:{color:"#A0A0A3"}}},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.85)",style:{color:"#F0F0F0"}},plotOptions:{series:{dataLabels:{color:"#F0F0F3",style:{fontSize:"13px"}},marker:{lineColor:"#333"}},boxplot:{fillColor:"#505053"},candlestick:{lineColor:"white"},errorbar:{color:"white"}},legend:{backgroundColor:"#1D1D1D",itemStyle:{color:"#E0E0E3"},itemHoverStyle:{color:"#FFF"},itemHiddenStyle:{color:"#606063"},title:{style:{color:"#C0C0C0"}}},credits:{style:{color:"#666"}},labels:{style:{color:"#707073"}},drilldown:{activeAxisLabelStyle:{color:"#F0F0F3"},activeDataLabelStyle:{color:"#F0F0F3"}},navigation:{buttonOptions:{symbolStroke:"#DDDDDD",theme:{fill:"#505053"}}},rangeSelector:{buttonTheme:{fill:"#505053",stroke:"#000000",style:{color:"#CCC"},states:{hover:{fill:"#707073",stroke:"#000000",style:{color:"white"}},select:{fill:"#000003",stroke:"#000000",style:{color:"white"}}}},inputBoxBorderColor:"#505053",inputStyle:{backgroundColor:"#333",color:"silver"},labelStyle:{color:"silver"}},navigator:{handles:{backgroundColor:"#666",borderColor:"#AAA"},outlineColor:"#CCC",maskFill:"rgba(255,255,255,0.1)",series:{color:"#7798BF",lineColor:"#A6C7ED"},xAxis:{gridLineColor:"#505053"}},scrollbar:{barBackgroundColor:"#808083",barBorderColor:"#808083",buttonArrowColor:"#CCC",buttonBackgroundColor:"#606063",buttonBorderColor:"#606063",rifleColor:"#FFF",trackBackgroundColor:"#404043",trackBorderColor:"#404043"}};
|
Highcharts.theme={colors:["#2b908f","#90ee7e","#f45b5b","#7798BF","#aaeeee","#ff0066","#eeaaee","#55BF3B","#DF5353","#7798BF","#aaeeee"],chart:{backgroundColor:{linearGradient:{x1:0,y1:0,x2:1,y2:1},stops:[[0,"#1D1D1D"],[1,"#1D1D1D"]]},style:{fontFamily:"'Unica One', sans-serif"},plotBorderColor:"#606063"},title:{style:{color:"#E0E0E3",textTransform:"uppercase",fontSize:"20px"}},subtitle:{style:{color:"#E0E0E3",textTransform:"uppercase"}},xAxis:{gridLineColor:"#707073",labels:{style:{color:"#E0E0E3"}},lineColor:"#707073",minorGridLineColor:"#505053",tickColor:"#707073",title:{style:{color:"#A0A0A3"}}},yAxis:{gridLineColor:"#707073",labels:{style:{color:"#E0E0E3"}},lineColor:"#707073",minorGridLineColor:"#505053",tickColor:"#707073",tickWidth:1,title:{style:{color:"#A0A0A3"}}},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.85)",style:{color:"#F0F0F0"}},plotOptions:{series:{dataLabels:{color:"#F0F0F3",style:{fontSize:"13px"}},marker:{lineColor:"#333"}},boxplot:{fillColor:"#505053"},candlestick:{lineColor:"white"},errorbar:{color:"white"}},legend:{backgroundColor:"#1D1D1D",itemStyle:{color:"#E0E0E3"},itemHoverStyle:{color:"#FFF"},itemHiddenStyle:{color:"#606063"},title:{style:{color:"#C0C0C0"}}},credits:{style:{color:"#666"}},labels:{style:{color:"#707073"}},drilldown:{activeAxisLabelStyle:{color:"#F0F0F3"},activeDataLabelStyle:{color:"#F0F0F3"}},navigation:{buttonOptions:{symbolStroke:"#DDDDDD",theme:{fill:"#505053"}}},rangeSelector:{buttonTheme:{fill:"#505053",stroke:"#000000",style:{color:"#CCC"},states:{hover:{fill:"#707073",stroke:"#000000",style:{color:"white"}},select:{fill:"#000003",stroke:"#000000",style:{color:"white"}}}},inputBoxBorderColor:"#505053",inputStyle:{backgroundColor:"#333",color:"silver"},labelStyle:{color:"silver"}},navigator:{handles:{backgroundColor:"#666",borderColor:"#AAA"},outlineColor:"#CCC",maskFill:"rgba(255,255,255,0.1)",series:{color:"#7798BF",lineColor:"#A6C7ED"},xAxis:{gridLineColor:"#505053"}},scrollbar:{barBackgroundColor:"#808083",barBorderColor:"#808083",buttonArrowColor:"#CCC",buttonBackgroundColor:"#606063",buttonBorderColor:"#606063",rifleColor:"#FFF",trackBackgroundColor:"#404043",trackBorderColor:"#404043"}};
|
||||||
|
|
||||||
Highcharts.setOptions(Highcharts.theme);
|
Highcharts.setOptions(Highcharts.theme);
|
||||||
|
|
||||||
Highcharts.chart('time-chart', {
|
Highcharts.chart('time-chart', {
|
||||||
|
@ -122,7 +135,7 @@
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: 'Total',
|
name: 'Total',
|
||||||
data: {{ solved|safe }}
|
data: {{ solved|safe }}
|
||||||
},
|
},
|
||||||
{% for cat in cats %}
|
{% for cat in cats %}
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,42 +2,42 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-9">
|
<div class="col-sm-12 col-md-9">
|
||||||
<div class="ctf-block">
|
<div class="ctf-block">
|
||||||
<div class="ctf-head">
|
<div class="ctf-head">
|
||||||
<h3>Register</h3>
|
<h3>Register</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="ctf-body sign-body">
|
|
||||||
<div class="col-sm-8 col-md-6 mx-auto">
|
|
||||||
{% if registered %}
|
|
||||||
<h1>{% trans "Welcome !" %}</h1>
|
|
||||||
<span class="message success-msg">{% trans "Your account has been created." %}</span>
|
|
||||||
{% else %}
|
|
||||||
{% if registered_failed %}
|
|
||||||
<span class="message error-msg">{{ registered_failed }}</span>
|
|
||||||
{% endif %}
|
|
||||||
<form enctype="multipart/form-data" method="POST">
|
|
||||||
{% csrf_token %}
|
|
||||||
<div class="form-group">
|
|
||||||
<input class="form-control" type="text" name="username" placeholder="{% trans "Username" %} *" maxlength="150" required="" id="id_username"></br>
|
|
||||||
<input class="form-control" type="password" name="password" placeholder="{% trans "Password" %} *" required="" id="id_password"></br>
|
|
||||||
<input class="form-control" type="email" name="email" placeholder="pleasedontgivemy@private.infos*" required="" maxlength="254" id="id_email"></br>
|
|
||||||
<input class="form-control" type="url" name="portfolio_site" placeholder="{% trans "Personal website" %}"maxlength="200" id="id_portfolio_site"></br>
|
|
||||||
<input type="submit" name="" class="form-control" value="{% trans "Register" %}">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<div class="ctf-body sign-body">
|
||||||
|
<div class="col-sm-8 col-md-6 mx-auto">
|
||||||
|
{% if registered %}
|
||||||
|
<h1>{% trans "Welcome !" %}</h1>
|
||||||
|
<span class="message success-msg">{% trans "Your account has been created." %}</span>
|
||||||
|
{% else %}
|
||||||
|
{% if registered_failed %}
|
||||||
|
<span class="message error-msg">{{ registered_failed }}</span>
|
||||||
|
{% endif %}
|
||||||
|
<form enctype="multipart/form-data" method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="form-group">
|
||||||
|
<input class="form-control" type="text" name="username" placeholder="{% trans "Username" %} *" maxlength="150" required="" id="id_username" value="{{ old_username }}"></br>
|
||||||
|
<input class="form-control" type="password" name="password" placeholder="{% trans "Password" %} *" required="" id="id_password"></br>
|
||||||
|
<input class="form-control" type="email" name="email" placeholder="pleasedontgivemy@private.infos*" required="" maxlength="254" id="id_email" value="{{ old_email }}"></br>
|
||||||
|
<input class="form-control" type="url" name="portfolio_site" placeholder="{% trans "Personal website" %}"maxlength="200" id="id_portfolio_site" value="{{ old_website }}"></br>
|
||||||
|
<input type="submit" name="" class="form-control" value="{% trans "Register" %}">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 col-md-3 right-sidebar">
|
</div>
|
||||||
<ul class="list-group">
|
|
||||||
<a href="/accounts/signup" class="list-group-item">{% trans "Sign up" %}</a>
|
<div class="col-sm-12 col-md-3 right-sidebar">
|
||||||
<a href="/accounts/signin" class="list-group-item">{% trans "Login" %}</a>
|
<ul class="list-group">
|
||||||
</ul>
|
<a href="/accounts/signup" class="list-group-item">{% trans "Sign up" %}</a>
|
||||||
</div>
|
<a href="/accounts/signin" class="list-group-item">{% trans "Login" %}</a>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,11 @@ urlpatterns = [
|
||||||
path('edit/', views.edit, name='edit'),
|
path('edit/', views.edit, name='edit'),
|
||||||
path('logout/', views.out, name='out'),
|
path('logout/', views.out, name='out'),
|
||||||
path('rank/<str:token>', views.rank, name='rank'),
|
path('rank/<str:token>', views.rank, name='rank'),
|
||||||
path('connections/connect/discord', views.connection.connect, name='connections-connect-discord'),
|
path('connections/connect/discord', views.connection.connect_discord, name='connections-connect-discord'),
|
||||||
path('connections/connect/discord/authorize', views.connection.authorize, name='connections-connect-discord-authorize'),
|
path('connections/connect/discord/authorize', views.connection.authorize_discord, name='connections-connect-discord-authorize'),
|
||||||
path('connections/disconnect/discord', views.connection.disconnect, name='connections-disconnect-discord'),
|
path('connections/disconnect/discord', views.connection.disconnect_discord, name='connections-disconnect-discord'),
|
||||||
|
path('connections/connect/intra42', views.connection.connect_intra42, name='connections-connect-intra42'),
|
||||||
|
path('connections/connect/intra42/authorize', views.connection.authorize_intra42, name='connections-connect-intra42-authorize'),
|
||||||
|
path('connections/disconnect/intra42', views.connection.disconnect_intra42, name='connections-disconnect-intra42'),
|
||||||
path('delete_account/', views.delete_account, name='delete_account'),
|
path('delete_account/', views.delete_account, name='delete_account'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,6 +5,8 @@ from django.views.defaults import bad_request
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
|
from accounts.models import Campus
|
||||||
|
from django.db import IntegrityError
|
||||||
import os
|
import os
|
||||||
|
|
||||||
oauth = OAuth()
|
oauth = OAuth()
|
||||||
|
@ -19,20 +21,73 @@ oauth.register(
|
||||||
api_base_url='https://discord.com/api/'
|
api_base_url='https://discord.com/api/'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
oauth.register(
|
||||||
|
name='intra42',
|
||||||
|
client_id=os.getenv('OAUTH2_INTRA42_CLIENT_ID'),
|
||||||
|
client_secret=os.getenv('OAUTH2_INTRA42_CLIENT_SECRET'),
|
||||||
|
access_token_url='https://api.intra.42.fr/oauth/token',
|
||||||
|
authorize_url='https://api.intra.42.fr/oauth/authorize',
|
||||||
|
api_base_url='https://api.intra.42.fr/'
|
||||||
|
)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@require_POST
|
@require_POST
|
||||||
def connect(request):
|
def connect_intra42(request):
|
||||||
|
if request.user.userprofileinfo.intra42_id:
|
||||||
|
return bad_request(request, "Already connected")
|
||||||
|
site = Site.objects.get_current()
|
||||||
|
redirect_uri = reverse('accounts:connections-connect-intra42-authorize')
|
||||||
|
redirect_uri = "https://" + site.domain + redirect_uri[3:] # remove language code
|
||||||
|
return oauth.intra42.authorize_redirect(request, redirect_uri)
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def authorize_intra42(request):
|
||||||
|
if request.user.userprofileinfo.intra42_id:
|
||||||
|
return bad_request(request, "Already connected")
|
||||||
|
try:
|
||||||
|
token = oauth.intra42.authorize_access_token(request)
|
||||||
|
except:
|
||||||
|
return redirect('accounts:edit')
|
||||||
|
response = oauth.intra42.get('v2/me', token=token)
|
||||||
|
response = response.json()
|
||||||
|
intra42_id = response['id']
|
||||||
|
intra42_campus = response['campus'][0]['name']
|
||||||
|
intra42_campus_id = response['campus'][0]['id']
|
||||||
|
request.user.userprofileinfo.intra42_id = intra42_id
|
||||||
|
request.user.userprofileinfo.campus, created = Campus.objects.get_or_create(id=intra42_campus_id, name=intra42_campus)
|
||||||
|
try:
|
||||||
|
request.user.userprofileinfo.save()
|
||||||
|
return redirect('accounts:edit')
|
||||||
|
except IntegrityError:
|
||||||
|
return redirect('accounts:edit')
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@require_POST
|
||||||
|
def disconnect_intra42(request):
|
||||||
|
if not request.user.userprofileinfo.intra42_id:
|
||||||
|
return bad_request(request, "Already disconnected")
|
||||||
|
request.user.userprofileinfo.intra42_id = None
|
||||||
|
request.user.userprofileinfo.intra42_campus = None
|
||||||
|
request.user.userprofileinfo.intra42_campus_id = None
|
||||||
|
request.user.userprofileinfo.campus = None
|
||||||
|
request.user.userprofileinfo.save()
|
||||||
|
return redirect('accounts:edit')
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@require_POST
|
||||||
|
def connect_discord(request):
|
||||||
if request.user.userprofileinfo.discord_id:
|
if request.user.userprofileinfo.discord_id:
|
||||||
return bad_request(request, "Already connected")
|
return bad_request(request, "Already connected")
|
||||||
site = Site.objects.get_current()
|
site = Site.objects.get_current()
|
||||||
redirect_uri = reverse('accounts:connections-connect-discord-authorize')
|
redirect_uri = reverse('accounts:connections-connect-discord-authorize')
|
||||||
redirect_uri = "https://" + site.domain + redirect_uri[3:] # remove language code
|
redirect_uri = "https://" + site.domain + redirect_uri[3:] # remove language code
|
||||||
print(redirect_uri)
|
|
||||||
return oauth.discord.authorize_redirect(request, redirect_uri)
|
return oauth.discord.authorize_redirect(request, redirect_uri)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def authorize(request):
|
def authorize_discord(request):
|
||||||
if request.user.userprofileinfo.discord_id:
|
if request.user.userprofileinfo.discord_id:
|
||||||
|
print("Already")
|
||||||
return bad_request(request, "Already connected")
|
return bad_request(request, "Already connected")
|
||||||
try:
|
try:
|
||||||
token = oauth.discord.authorize_access_token(request)
|
token = oauth.discord.authorize_access_token(request)
|
||||||
|
@ -47,7 +102,7 @@ def authorize(request):
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@require_POST
|
@require_POST
|
||||||
def disconnect(request):
|
def disconnect_discord(request):
|
||||||
if not request.user.userprofileinfo.discord_id:
|
if not request.user.userprofileinfo.discord_id:
|
||||||
return bad_request(request, "Already disconnected")
|
return bad_request(request, "Already disconnected")
|
||||||
request.user.userprofileinfo.discord_id = None
|
request.user.userprofileinfo.discord_id = None
|
||||||
|
|
|
@ -43,32 +43,69 @@ def signup(request):
|
||||||
user_form = UserForm()
|
user_form = UserForm()
|
||||||
profile_form = UserProfileInfoForm()
|
profile_form = UserProfileInfoForm()
|
||||||
registered = False
|
registered = False
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
pass1 = request.POST.get('password')
|
username = request.POST.get('username')
|
||||||
if len(pass1) < 8:
|
passwd = request.POST.get('password')
|
||||||
return render(request,'accounts/register.html', {'user_form':user_form, 'profile_form':profile_form, 'registered_failed':"The new password must be at least %d characters long." % 8})
|
email = request.POST.get('email')
|
||||||
first_isalpha = pass1[0].isalpha()
|
website = request.POST.get('portfolio_site')
|
||||||
if not any(c.isdigit() for c in pass1) or not any(c.isalpha() for c in pass1):
|
|
||||||
return render(request,'accounts/register.html', {'user_form':user_form, 'profile_form':profile_form, 'registered_failed':_("The password must contain at least one letter and at least one digit or punctuation character.")})
|
if len(passwd) < 8:
|
||||||
|
return render(request, 'accounts/register.html', {
|
||||||
|
'user_form': user_form,
|
||||||
|
'profile_form': profile_form,
|
||||||
|
'registered_failed': _("The password must be at least 8 characters long."),
|
||||||
|
'old_username': username,
|
||||||
|
'old_email': email,
|
||||||
|
'old_website': website
|
||||||
|
})
|
||||||
|
|
||||||
|
if not any(c.isdigit() for c in passwd) or not any(c.isalpha() for c in passwd):
|
||||||
|
return render(request, 'accounts/register.html', {
|
||||||
|
'user_form': user_form,
|
||||||
|
'profile_form': profile_form,
|
||||||
|
'registered_failed': _("The password must contain at least one letter and at least one digit or punctuation character."),
|
||||||
|
'old_username': username,
|
||||||
|
'old_email': email,
|
||||||
|
'old_website': website
|
||||||
|
})
|
||||||
|
|
||||||
if User.objects.filter(email=request.POST.get('email')).exists():
|
if User.objects.filter(email=request.POST.get('email')).exists():
|
||||||
return render(request,'accounts/register.html', {'user_form':user_form, 'profile_form':profile_form, 'registered_failed':_("A user with that email already exists.")})
|
return render(request, 'accounts/register.html', {
|
||||||
|
'user_form': user_form,
|
||||||
|
'profile_form': profile_form,
|
||||||
|
'registered_failed': _("A user with that email already exists."),
|
||||||
|
'old_username': username,
|
||||||
|
'old_website': website
|
||||||
|
})
|
||||||
|
|
||||||
user_form = UserForm(data=request.POST)
|
user_form = UserForm(data=request.POST)
|
||||||
profile_form = UserProfileInfoForm(data=request.POST)
|
profile_form = UserProfileInfoForm(data=request.POST)
|
||||||
if user_form.is_valid() and profile_form.is_valid():
|
if user_form.is_valid() and profile_form.is_valid():
|
||||||
user = user_form.save()
|
user = user_form.save()
|
||||||
user.set_password(user.password)
|
user.set_password(user.password)
|
||||||
user.save()
|
user.save()
|
||||||
|
|
||||||
profile = profile_form.save(commit=False)
|
profile = profile_form.save(commit=False)
|
||||||
profile.user = user
|
profile.user = user
|
||||||
profile.token = token_hex(16)
|
profile.token = token_hex(16)
|
||||||
profile.save()
|
profile.save()
|
||||||
|
|
||||||
registered = True
|
registered = True
|
||||||
else:
|
else:
|
||||||
return render(request,'accounts/register.html', {'user_form':user_form, 'profile_form':profile_form, 'registered_failed':_("A user with that username already exists.")})
|
return render(request, 'accounts/register.html', {
|
||||||
return render(request,'accounts/register.html',
|
'user_form': user_form,
|
||||||
{'user_form':user_form,
|
'profile_form': profile_form,
|
||||||
'profile_form':profile_form,
|
'registered_failed': _("A user with that username already exists."),
|
||||||
'registered':registered})
|
'old_email': email,
|
||||||
|
'old_website': website
|
||||||
|
})
|
||||||
|
|
||||||
|
return render(request, 'accounts/register.html', {
|
||||||
|
'user_form': user_form,
|
||||||
|
'profile_form': profile_form,
|
||||||
|
'registered': registered
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
return HttpResponseRedirect(reverse('home'))
|
return HttpResponseRedirect(reverse('home'))
|
||||||
|
|
||||||
|
@ -135,7 +172,7 @@ def profile(request, user_name):
|
||||||
# get datas
|
# get datas
|
||||||
somme = 0
|
somme = 0
|
||||||
solved_count = len(solved)
|
solved_count = len(solved)
|
||||||
|
|
||||||
pointDatas[cat.name] = []
|
pointDatas[cat.name] = []
|
||||||
pointDatas[cat.name].append([user_obj.date_joined.timestamp() * 1000, 0])
|
pointDatas[cat.name].append([user_obj.date_joined.timestamp() * 1000, 0])
|
||||||
percent = (solved_count / max_count) * 100
|
percent = (solved_count / max_count) * 100
|
||||||
|
@ -151,9 +188,9 @@ def profile(request, user_name):
|
||||||
for s in solves.reverse():
|
for s in solves.reverse():
|
||||||
somme += s.ctf.points
|
somme += s.ctf.points
|
||||||
solved.append([s.flag_date.timestamp() * 1000,somme])
|
solved.append([s.flag_date.timestamp() * 1000,somme])
|
||||||
|
created = CTF.objects.filter(author=user_obj)
|
||||||
return render(request,'accounts/profile.html', {'user':user_obj, 'solves':solves,'solved':solved,'catsDatas': catsDatas, 'pointDatas': pointDatas,
|
return render(request,'accounts/profile.html', {'user':user_obj, 'solves':solves,'solved':solved,'catsDatas': catsDatas, 'pointDatas': pointDatas,
|
||||||
'rank': rank, 'score' : somme, 'member' : member, 'cats':cats})
|
'rank': rank, 'score' : somme, 'member' : member, 'cats':cats, 'created':created})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def delete_account(request):
|
def delete_account(request):
|
||||||
|
|
|
@ -3,4 +3,5 @@ from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('bot/discord', views.discord_bot, name='discord_bot'),
|
path('bot/discord', views.discord_bot, name='discord_bot'),
|
||||||
|
path('events/<str:event_slug>', views.events_data, name='events_data'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,6 +2,8 @@ from django.shortcuts import render
|
||||||
from accounts.models import UserProfileInfo
|
from accounts.models import UserProfileInfo
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
import os
|
import os
|
||||||
|
from events.models import Event, Team, EventPlayer
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
|
@ -24,4 +26,31 @@ def discord_bot(request):
|
||||||
data[user.discord_id] = rank
|
data[user.discord_id] = rank
|
||||||
rank += 1
|
rank += 1
|
||||||
|
|
||||||
return JsonResponse(data)
|
return JsonResponse(data)
|
||||||
|
|
||||||
|
def events_data(request, event_slug):
|
||||||
|
if request.method != 'GET':
|
||||||
|
return JsonResponse({'error':'bad request'})
|
||||||
|
|
||||||
|
event_info = get_object_or_404(Event, slug=event_slug)
|
||||||
|
|
||||||
|
if event_info.password and request.GET.get('password') != event_info.password:
|
||||||
|
return JsonResponse({'error':'not authorized'})
|
||||||
|
|
||||||
|
players = EventPlayer.objects.filter(event=event_info)
|
||||||
|
|
||||||
|
data = {}
|
||||||
|
if event_info.team_size > 1:
|
||||||
|
for player in players:
|
||||||
|
if not player.team:
|
||||||
|
continue
|
||||||
|
if not player.team.name in data:
|
||||||
|
data[player.team.name] = []
|
||||||
|
data[player.team.name].append({"name": player.user.username, "score": player.score})
|
||||||
|
else:
|
||||||
|
for player in players:
|
||||||
|
data[player.user.username] = player.score
|
||||||
|
|
||||||
|
return JsonResponse(data)
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 18fac3978d21dc824bcffa2bc960aa2bf6b4abd9
|
Subproject commit 5c7b5995fe12c0ed1bb10f97e56ec89377c98b54
|
|
@ -1,3 +1,3 @@
|
||||||
We're pleased to announce that 42CTF source code is now available on a self-hosted gitea <a class="footer_imgs" href="https://gitea.42ctf.org" target="_blank"><img src="/static/img/gitea_logo.png" width="30"></a><br><br>
|
We're pleased to announce that 42CTF source code is now available on a self-hosted gitea <a class="footer_imgs" href="https://gitea.42ctf.org" target="_blank"><img src="/static/img/gitea_logo.png" width="30" alt="Gitea logo"></a><br><br>
|
||||||
|
|
||||||
If you want to contribute to the platform (development or translation), you can send us a message on <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30"></a> or simply fill this <a href="https://forms.42l.fr/apps/forms/bpmyGR37AR4yHGnC">form</a> and we'll contact you !
|
If you want to contribute to the platform (development or translation), you can send us a message on <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30" alt="Discord logo"></a> or simply fill this <a href="https://forms.42l.fr/apps/forms/bpmyGR37AR4yHGnC">form</a> and we'll contact you !
|
||||||
|
|
|
@ -5,4 +5,4 @@ We offer you three brand new challenges created by <b><a class=profile_link href
|
||||||
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_2'>Simple Question of Logic 2</a></b> (30 points)<br>
|
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_2'>Simple Question of Logic 2</a></b> (30 points)<br>
|
||||||
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_3'>Simple Question of Logic 3</a></b> (40 points)<br>
|
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_3'>Simple Question of Logic 3</a></b> (40 points)<br>
|
||||||
<br>
|
<br>
|
||||||
Don't forget that you can always reach out on <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30"></a> to propose new challenges !
|
Don't forget that you can always reach out on <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30" alt="Discord logo"></a> to propose new challenges !
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
Nous sommes heureux de vous annoncer que le code source de 42CTF est désormais disponible sur un <a class="footer_imgs" href="https://gitea.42ctf.org" target="_blank"><img src="/static/img/gitea_logo.png" width="30"></a> auto-hébergé.<br><br>
|
Nous sommes heureux de vous annoncer que le code source de 42CTF est désormais disponible sur un <a class="footer_imgs" href="https://gitea.42ctf.org" target="_blank"><img src="/static/img/gitea_logo.png" width="30" alt="Logo Gitea"></a> auto-hébergé.<br><br>
|
||||||
|
|
||||||
Si vous voulez contribuer a la plateforme (développement ou traduction), vous pouvez nous envoyer un message sur <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30"></a> ou simplement remplir ce <a href="https://forms.42l.fr/apps/forms/bpmyGR37AR4yHGnC">formulaire</a> et nous vous contacterons !
|
Si vous voulez contribuer a la plateforme (développement ou traduction), vous pouvez nous envoyer un message sur <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30" alt="Logo Discord"></a> ou simplement remplir ce <a href="https://forms.42l.fr/apps/forms/bpmyGR37AR4yHGnC">formulaire</a> et nous vous contacterons !
|
||||||
|
|
|
@ -5,4 +5,4 @@ On vous propose trois nouveaux challenges créés par <b><a class=profile_link
|
||||||
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_2'>Simple Question of Logic 2</a></b> (30 points)<br>
|
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_2'>Simple Question of Logic 2</a></b> (30 points)<br>
|
||||||
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_3'>Simple Question of Logic 3</a></b> (40 points)<br>
|
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_3'>Simple Question of Logic 3</a></b> (40 points)<br>
|
||||||
<br>
|
<br>
|
||||||
N'oubliez pas que vous pouvez toujours nous contacter sur <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30"></a> pour proposer des nouveaux challenges !
|
N'oubliez pas que vous pouvez toujours nous contacter sur <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30" alt="Logo Discord"></a> pour proposer des nouveaux challenges !
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: 2022-02-10 19:50+0100\n"
|
"PO-Revision-Date: 2022-02-10 19:50+0100\n"
|
||||||
"Last-Translator: Clément Hamada <clementhamada@pm.me>\n"
|
"Last-Translator: Clément Hamada <clementhamada@pm.me>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
|
@ -87,7 +87,15 @@ msgstr ""
|
||||||
msgid "Connect Discord"
|
msgid "Connect Discord"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:70
|
#: accounts/templates/accounts/edit.html:68
|
||||||
|
msgid "Disconnect 42"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:74
|
||||||
|
msgid "Connect 42"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:85
|
||||||
#: accounts/templates/accounts/profile.html:46
|
#: accounts/templates/accounts/profile.html:46
|
||||||
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
||||||
#: events/templates/events/event_info.html:66
|
#: events/templates/events/event_info.html:66
|
||||||
|
@ -98,12 +106,12 @@ msgstr ""
|
||||||
msgid "Score"
|
msgid "Score"
|
||||||
msgstr "Punktzahl"
|
msgstr "Punktzahl"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:78
|
#: accounts/templates/accounts/edit.html:93
|
||||||
#: accounts/templates/accounts/profile.html:60
|
#: accounts/templates/accounts/profile.html:60
|
||||||
msgid "Registered since"
|
msgid "Registered since"
|
||||||
msgstr "Registriert seit"
|
msgstr "Registriert seit"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:84
|
#: accounts/templates/accounts/edit.html:99
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Delete my account"
|
#| msgid "Delete my account"
|
||||||
msgid " Delete my account"
|
msgid " Delete my account"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -84,7 +84,15 @@ msgstr ""
|
||||||
msgid "Connect Discord"
|
msgid "Connect Discord"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:70
|
#: accounts/templates/accounts/edit.html:68
|
||||||
|
msgid "Disconnect 42"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:74
|
||||||
|
msgid "Connect 42"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:85
|
||||||
#: accounts/templates/accounts/profile.html:46
|
#: accounts/templates/accounts/profile.html:46
|
||||||
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
||||||
#: events/templates/events/event_info.html:66
|
#: events/templates/events/event_info.html:66
|
||||||
|
@ -95,12 +103,12 @@ msgstr ""
|
||||||
msgid "Score"
|
msgid "Score"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:78
|
#: accounts/templates/accounts/edit.html:93
|
||||||
#: accounts/templates/accounts/profile.html:60
|
#: accounts/templates/accounts/profile.html:60
|
||||||
msgid "Registered since"
|
msgid "Registered since"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:84
|
#: accounts/templates/accounts/edit.html:99
|
||||||
msgid " Delete my account"
|
msgid " Delete my account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: 2022-02-09 10:55+0100\n"
|
"PO-Revision-Date: 2022-02-09 10:55+0100\n"
|
||||||
"Last-Translator: Javier Uhagón (uhagontorralvojavier@gmail.com)\n"
|
"Last-Translator: Javier Uhagón (uhagontorralvojavier@gmail.com)\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
|
@ -88,7 +88,15 @@ msgstr ""
|
||||||
msgid "Connect Discord"
|
msgid "Connect Discord"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:70
|
#: accounts/templates/accounts/edit.html:68
|
||||||
|
msgid "Disconnect 42"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:74
|
||||||
|
msgid "Connect 42"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:85
|
||||||
#: accounts/templates/accounts/profile.html:46
|
#: accounts/templates/accounts/profile.html:46
|
||||||
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
||||||
#: events/templates/events/event_info.html:66
|
#: events/templates/events/event_info.html:66
|
||||||
|
@ -99,12 +107,12 @@ msgstr ""
|
||||||
msgid "Score"
|
msgid "Score"
|
||||||
msgstr "Puntuación"
|
msgstr "Puntuación"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:78
|
#: accounts/templates/accounts/edit.html:93
|
||||||
#: accounts/templates/accounts/profile.html:60
|
#: accounts/templates/accounts/profile.html:60
|
||||||
msgid "Registered since"
|
msgid "Registered since"
|
||||||
msgstr "Registrado desde"
|
msgstr "Registrado desde"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:84
|
#: accounts/templates/accounts/edit.html:99
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Delete my account"
|
#| msgid "Delete my account"
|
||||||
msgid " Delete my account"
|
msgid " Delete my account"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -92,7 +92,19 @@ msgstr "Déconnecter Discord"
|
||||||
msgid "Connect Discord"
|
msgid "Connect Discord"
|
||||||
msgstr "Connecter Discord"
|
msgstr "Connecter Discord"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:70
|
#: accounts/templates/accounts/edit.html:68
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Disconnect Discord"
|
||||||
|
msgid "Disconnect 42"
|
||||||
|
msgstr "Déconnecter Discord"
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:74
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Connect Discord"
|
||||||
|
msgid "Connect 42"
|
||||||
|
msgstr "Connecter Discord"
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:85
|
||||||
#: accounts/templates/accounts/profile.html:46
|
#: accounts/templates/accounts/profile.html:46
|
||||||
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
||||||
#: events/templates/events/event_info.html:66
|
#: events/templates/events/event_info.html:66
|
||||||
|
@ -103,12 +115,12 @@ msgstr "Connecter Discord"
|
||||||
msgid "Score"
|
msgid "Score"
|
||||||
msgstr "Score"
|
msgstr "Score"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:78
|
#: accounts/templates/accounts/edit.html:93
|
||||||
#: accounts/templates/accounts/profile.html:60
|
#: accounts/templates/accounts/profile.html:60
|
||||||
msgid "Registered since"
|
msgid "Registered since"
|
||||||
msgstr "Inscrit depuis"
|
msgstr "Inscrit depuis"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:84
|
#: accounts/templates/accounts/edit.html:99
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Connected accounts"
|
#| msgid "Connected accounts"
|
||||||
msgid " Delete my account"
|
msgid " Delete my account"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -88,7 +88,15 @@ msgstr ""
|
||||||
msgid "Connect Discord"
|
msgid "Connect Discord"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:70
|
#: accounts/templates/accounts/edit.html:68
|
||||||
|
msgid "Disconnect 42"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:74
|
||||||
|
msgid "Connect 42"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:85
|
||||||
#: accounts/templates/accounts/profile.html:46
|
#: accounts/templates/accounts/profile.html:46
|
||||||
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
||||||
#: events/templates/events/event_info.html:66
|
#: events/templates/events/event_info.html:66
|
||||||
|
@ -99,12 +107,12 @@ msgstr ""
|
||||||
msgid "Score"
|
msgid "Score"
|
||||||
msgstr "スコア"
|
msgstr "スコア"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:78
|
#: accounts/templates/accounts/edit.html:93
|
||||||
#: accounts/templates/accounts/profile.html:60
|
#: accounts/templates/accounts/profile.html:60
|
||||||
msgid "Registered since"
|
msgid "Registered since"
|
||||||
msgstr "登録日"
|
msgstr "登録日"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:84
|
#: accounts/templates/accounts/edit.html:99
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Delete my account"
|
#| msgid "Delete my account"
|
||||||
msgid " Delete my account"
|
msgid " Delete my account"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -86,7 +86,19 @@ msgstr "Отключить Discord"
|
||||||
msgid "Connect Discord"
|
msgid "Connect Discord"
|
||||||
msgstr "Подключить Discord"
|
msgstr "Подключить Discord"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:70
|
#: accounts/templates/accounts/edit.html:68
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Disconnect Discord"
|
||||||
|
msgid "Disconnect 42"
|
||||||
|
msgstr "Отключить Discord"
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:74
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Connect Discord"
|
||||||
|
msgid "Connect 42"
|
||||||
|
msgstr "Подключить Discord"
|
||||||
|
|
||||||
|
#: accounts/templates/accounts/edit.html:85
|
||||||
#: accounts/templates/accounts/profile.html:46
|
#: accounts/templates/accounts/profile.html:46
|
||||||
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
#: ctfs/templates/ctfs/ctf_info.html:65 ctfs/templates/ctfs/ctfs_list.html:13
|
||||||
#: events/templates/events/event_info.html:66
|
#: events/templates/events/event_info.html:66
|
||||||
|
@ -97,12 +109,12 @@ msgstr "Подключить Discord"
|
||||||
msgid "Score"
|
msgid "Score"
|
||||||
msgstr "Счет"
|
msgstr "Счет"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:78
|
#: accounts/templates/accounts/edit.html:93
|
||||||
#: accounts/templates/accounts/profile.html:60
|
#: accounts/templates/accounts/profile.html:60
|
||||||
msgid "Registered since"
|
msgid "Registered since"
|
||||||
msgstr "Зарегистрирован с"
|
msgstr "Зарегистрирован с"
|
||||||
|
|
||||||
#: accounts/templates/accounts/edit.html:84
|
#: accounts/templates/accounts/edit.html:99
|
||||||
msgid " Delete my account"
|
msgid " Delete my account"
|
||||||
msgstr " Удалить мой аккаунт"
|
msgstr " Удалить мой аккаунт"
|
||||||
|
|
||||||
|
@ -250,7 +262,7 @@ msgstr "Поздравление !"
|
||||||
#: ctfs/templates/ctfs/ctf_info.html:31
|
#: ctfs/templates/ctfs/ctf_info.html:31
|
||||||
#: events/templates/events/ctf_info.html:26
|
#: events/templates/events/ctf_info.html:26
|
||||||
msgid "Already flagged"
|
msgid "Already flagged"
|
||||||
msgstr "Уже отмечено"
|
msgstr "Этот челлендж уже пройден"
|
||||||
|
|
||||||
#: ctfs/templates/ctfs/ctf_info.html:33 ctfs/templates/ctfs/ctf_info.html:42
|
#: ctfs/templates/ctfs/ctf_info.html:33 ctfs/templates/ctfs/ctf_info.html:42
|
||||||
#: events/templates/events/ctf_info.html:36
|
#: events/templates/events/ctf_info.html:36
|
||||||
|
@ -381,7 +393,8 @@ msgstr "Событие"
|
||||||
msgid ""
|
msgid ""
|
||||||
"No translation available. Please try another language (English or French)."
|
"No translation available. Please try another language (English or French)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Перевод недоступен. Пожалуйста, попобуй другой язык (английский или французский)."
|
"Перевод недоступен. Пожалуйста, попобуй другой язык (английский или "
|
||||||
|
"французский)."
|
||||||
|
|
||||||
#: events/templates/events/ctf_info.html:28
|
#: events/templates/events/ctf_info.html:28
|
||||||
#: events/templates/events/event_info.html:18
|
#: events/templates/events/event_info.html:18
|
||||||
|
@ -400,7 +413,8 @@ msgstr "Перед вводом флагов необходимо зарегис
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is a team event, please create or join a team before submitting flags."
|
"This is a team event, please create or join a team before submitting flags."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Это командное соревнование, пожалуйста, создай или вступи в команду перед тем как отправить флаги."
|
"Это командное соревнование, пожалуйста, создай или вступи в команду перед "
|
||||||
|
"тем как отправить флаги."
|
||||||
|
|
||||||
#: events/templates/events/event_info.html:9
|
#: events/templates/events/event_info.html:9
|
||||||
msgid "Subscriptions is over."
|
msgid "Subscriptions is over."
|
||||||
|
@ -516,7 +530,7 @@ msgstr "Нет доступных статей."
|
||||||
|
|
||||||
#: home/templates/home/home.html:53
|
#: home/templates/home/home.html:53
|
||||||
msgid "Latest challenges added"
|
msgid "Latest challenges added"
|
||||||
msgstr "Последние добавленные челленджы"
|
msgstr "Недавно добавленные челленджы"
|
||||||
|
|
||||||
#: home/templates/home/home.html:58
|
#: home/templates/home/home.html:58
|
||||||
msgid "points"
|
msgid "points"
|
||||||
|
@ -528,7 +542,7 @@ msgstr "Нет доступных CTF."
|
||||||
|
|
||||||
#: home/templates/home/home.html:66
|
#: home/templates/home/home.html:66
|
||||||
msgid "Latest Flags"
|
msgid "Latest Flags"
|
||||||
msgstr "Последние флаги"
|
msgstr "Недавно кто решил челлендж"
|
||||||
|
|
||||||
#: home/templates/home/home.html:80
|
#: home/templates/home/home.html:80
|
||||||
msgid "Flags"
|
msgid "Flags"
|
||||||
|
@ -584,7 +598,7 @@ msgstr "Последний"
|
||||||
|
|
||||||
#: templates/base.html:59
|
#: templates/base.html:59
|
||||||
msgid "Scoreboard"
|
msgid "Scoreboard"
|
||||||
msgstr "Табло"
|
msgstr "Таблица результатов"
|
||||||
|
|
||||||
#: templates/base.html:64
|
#: templates/base.html:64
|
||||||
msgid "Resources"
|
msgid "Resources"
|
||||||
|
@ -635,8 +649,8 @@ msgid ""
|
||||||
"We've emailed you instructions for setting your password. You should receive "
|
"We've emailed you instructions for setting your password. You should receive "
|
||||||
"the email shortly!"
|
"the email shortly!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Мы отправили тебе по электронной почте инструкции по установке пароля."
|
"Мы отправили тебе по электронной почте инструкции по установке пароля.Письмо "
|
||||||
"Письмо будет получено совсем скоро!"
|
"будет получено совсем скоро!"
|
||||||
|
|
||||||
#: templates/registration/password_reset_form.html:16
|
#: templates/registration/password_reset_form.html:16
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
|
|
|
@ -151,7 +151,10 @@ TEMPLATES[0]['OPTIONS']['context_processors'].append("ctfs.context_processors.ca
|
||||||
MEDIA_URL = '/media/'
|
MEDIA_URL = '/media/'
|
||||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||||
LOGIN_URL = '/accounts/signin/'
|
LOGIN_URL = '/accounts/signin/'
|
||||||
EMAIL_BACKEND = 'django_mailjet.backends.MailjetBackend'
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
EMAIL_HOST = 'in-v3.mailjet.com'
|
EMAIL_HOST = 'mail.42ctf.local'
|
||||||
EMAIL_PORT = 587
|
EMAIL_PORT = 587
|
||||||
DEFAULT_FROM_EMAIL = '42ctf <no-reply@42ctf.org>'
|
EMAIL_USE_TLS = True
|
||||||
|
EMAIL_HOST_USER = os.getenv("EMAIL_USER")
|
||||||
|
EMAIL_HOST_PASSWORD = os.getenv("EMAIL_PASSWORD")
|
||||||
|
DEFAULT_FROM_EMAIL = '42CTF <no-reply@42ctf.org>'
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: 2022-02-10 19:27+0100\n"
|
"PO-Revision-Date: 2022-02-10 19:27+0100\n"
|
||||||
"Last-Translator: Clément Hamada <clementhamada@pm.me>\n"
|
"Last-Translator: Clément Hamada <clementhamada@pm.me>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
|
@ -255,11 +255,13 @@ msgid "What will we do with your money ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: resources/templates/resources/donate.html:51
|
#: resources/templates/resources/donate.html:51
|
||||||
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Hosting a website - and especially a CTF platform - costs money:\n"
|
"Hosting a website - and especially a CTF platform - costs money:\n"
|
||||||
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
||||||
" If we had <b>40 members</b> each year, it would be enough to "
|
" If we had <b>40 members</b> each year, it would be enough to "
|
||||||
"cover the hosting of 42CTF.<br>\n"
|
"cover the hosting of 42CTF.<br>\n"
|
||||||
|
" We currently have %(nb_members)s members. <br>\n"
|
||||||
" With the additional money, we could for example offer prizes "
|
" With the additional money, we could for example offer prizes "
|
||||||
"for limited-time events, but we will update this page as soon as we reach "
|
"for limited-time events, but we will update this page as soon as we reach "
|
||||||
"this threshold :)"
|
"this threshold :)"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -210,11 +210,13 @@ msgid "What will we do with your money ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: resources/templates/resources/donate.html:51
|
#: resources/templates/resources/donate.html:51
|
||||||
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Hosting a website - and especially a CTF platform - costs money:\n"
|
"Hosting a website - and especially a CTF platform - costs money:\n"
|
||||||
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
||||||
" If we had <b>40 members</b> each year, it would be enough to "
|
" If we had <b>40 members</b> each year, it would be enough to "
|
||||||
"cover the hosting of 42CTF.<br>\n"
|
"cover the hosting of 42CTF.<br>\n"
|
||||||
|
" We currently have %(nb_members)s members. <br>\n"
|
||||||
" With the additional money, we could for example offer prizes "
|
" With the additional money, we could for example offer prizes "
|
||||||
"for limited-time events, but we will update this page as soon as we reach "
|
"for limited-time events, but we will update this page as soon as we reach "
|
||||||
"this threshold :)"
|
"this threshold :)"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: 2022-02-09 10:55+0100\n"
|
"PO-Revision-Date: 2022-02-09 10:55+0100\n"
|
||||||
"Last-Translator: Javier Uhagón (uhagontorralvojavier@gmail.com)\n"
|
"Last-Translator: Javier Uhagón (uhagontorralvojavier@gmail.com)\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
|
@ -244,11 +244,13 @@ msgid "What will we do with your money ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: resources/templates/resources/donate.html:51
|
#: resources/templates/resources/donate.html:51
|
||||||
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Hosting a website - and especially a CTF platform - costs money:\n"
|
"Hosting a website - and especially a CTF platform - costs money:\n"
|
||||||
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
||||||
" If we had <b>40 members</b> each year, it would be enough to "
|
" If we had <b>40 members</b> each year, it would be enough to "
|
||||||
"cover the hosting of 42CTF.<br>\n"
|
"cover the hosting of 42CTF.<br>\n"
|
||||||
|
" We currently have %(nb_members)s members. <br>\n"
|
||||||
" With the additional money, we could for example offer prizes "
|
" With the additional money, we could for example offer prizes "
|
||||||
"for limited-time events, but we will update this page as soon as we reach "
|
"for limited-time events, but we will update this page as soon as we reach "
|
||||||
"this threshold :)"
|
"this threshold :)"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -254,11 +254,13 @@ msgid "What will we do with your money ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: resources/templates/resources/donate.html:51
|
#: resources/templates/resources/donate.html:51
|
||||||
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Hosting a website - and especially a CTF platform - costs money:\n"
|
"Hosting a website - and especially a CTF platform - costs money:\n"
|
||||||
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
||||||
" If we had <b>40 members</b> each year, it would be enough to "
|
" If we had <b>40 members</b> each year, it would be enough to "
|
||||||
"cover the hosting of 42CTF.<br>\n"
|
"cover the hosting of 42CTF.<br>\n"
|
||||||
|
" We currently have %(nb_members)s members. <br>\n"
|
||||||
" With the additional money, we could for example offer prizes "
|
" With the additional money, we could for example offer prizes "
|
||||||
"for limited-time events, but we will update this page as soon as we reach "
|
"for limited-time events, but we will update this page as soon as we reach "
|
||||||
"this threshold :)"
|
"this threshold :)"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -248,11 +248,13 @@ msgid "What will we do with your money ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: resources/templates/resources/donate.html:51
|
#: resources/templates/resources/donate.html:51
|
||||||
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Hosting a website - and especially a CTF platform - costs money:\n"
|
"Hosting a website - and especially a CTF platform - costs money:\n"
|
||||||
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
||||||
" If we had <b>40 members</b> each year, it would be enough to "
|
" If we had <b>40 members</b> each year, it would be enough to "
|
||||||
"cover the hosting of 42CTF.<br>\n"
|
"cover the hosting of 42CTF.<br>\n"
|
||||||
|
" We currently have %(nb_members)s members. <br>\n"
|
||||||
" With the additional money, we could for example offer prizes "
|
" With the additional money, we could for example offer prizes "
|
||||||
"for limited-time events, but we will update this page as soon as we reach "
|
"for limited-time events, but we will update this page as soon as we reach "
|
||||||
"this threshold :)"
|
"this threshold :)"
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-03-13 18:04+0100\n"
|
"POT-Creation-Date: 2022-03-29 16:42+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -212,11 +212,13 @@ msgid "What will we do with your money ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: resources/templates/resources/donate.html:51
|
#: resources/templates/resources/donate.html:51
|
||||||
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Hosting a website - and especially a CTF platform - costs money:\n"
|
"Hosting a website - and especially a CTF platform - costs money:\n"
|
||||||
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
" more precisely, it costs us <b>50 euros per month</b>.<br>\n"
|
||||||
" If we had <b>40 members</b> each year, it would be enough to "
|
" If we had <b>40 members</b> each year, it would be enough to "
|
||||||
"cover the hosting of 42CTF.<br>\n"
|
"cover the hosting of 42CTF.<br>\n"
|
||||||
|
" We currently have %(nb_members)s members. <br>\n"
|
||||||
" With the additional money, we could for example offer prizes "
|
" With the additional money, we could for example offer prizes "
|
||||||
"for limited-time events, but we will update this page as soon as we reach "
|
"for limited-time events, but we will update this page as soon as we reach "
|
||||||
"this threshold :)"
|
"this threshold :)"
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
<th scope="col">{% trans "Rank" %}</th>
|
<th scope="col">{% trans "Rank" %}</th>
|
||||||
<th scope="col">{% trans "Username" %}</th>
|
<th scope="col">{% trans "Username" %}</th>
|
||||||
<th scope="col">{% trans "Website" %}</th>
|
<th scope="col">{% trans "Website" %}</th>
|
||||||
|
<th scope="col">{% trans "Campus" %}</th>
|
||||||
<th scope="col">{% trans "Score" %}</th>
|
<th scope="col">{% trans "Score" %}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -26,6 +27,13 @@
|
||||||
<a href="{{ s.user.userprofileinfo.portfolio_site }}" target="_blank">{{ s.user.userprofileinfo.portfolio_site }}</a>
|
<a href="{{ s.user.userprofileinfo.portfolio_site }}" target="_blank">{{ s.user.userprofileinfo.portfolio_site }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if s.user.userprofileinfo.intra42_campus %}
|
||||||
|
<a href="{% url 'scoreboard:campus' campus=s.user.userprofileinfo.intra42_campus %}">
|
||||||
|
{{ s.user.userprofileinfo.intra42_campus }}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
<td>{{ s.user.userprofileinfo.score }}</td>
|
<td>{{ s.user.userprofileinfo.score }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -4,5 +4,6 @@ from . import views
|
||||||
app_name = "scoreboard"
|
app_name = "scoreboard"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.scoreboard, name='scoreboard')
|
path('', views.scoreboard, name='scoreboard'),
|
||||||
|
path('campus/<str:campus>', views.campus, name='campus')
|
||||||
]
|
]
|
||||||
|
|
|
@ -8,5 +8,12 @@ def scoreboard(request):
|
||||||
page = request.GET.get('page')
|
page = request.GET.get('page')
|
||||||
scores_p = paginator.get_page(page)
|
scores_p = paginator.get_page(page)
|
||||||
return render(request, 'scoreboard/scoreboard.html', {'scores':scores_p})
|
return render(request, 'scoreboard/scoreboard.html', {'scores':scores_p})
|
||||||
|
|
||||||
|
def campus(request, campus):
|
||||||
|
scores = UserProfileInfo.objects.filter(score__gt=0, intra42_campus__exact=campus).select_related().order_by('-score', 'last_submission_date', 'user__username')
|
||||||
|
paginator = Paginator(scores, 20)
|
||||||
|
page = request.GET.get('page')
|
||||||
|
scores_p = paginator.get_page(page)
|
||||||
|
return render(request, 'scoreboard/scoreboard.html', {'scores':scores_p})
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
@ -0,0 +1,130 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="4487.6143mm"
|
||||||
|
height="1053.2188mm"
|
||||||
|
viewBox="0 0 4487.6143 1053.2188"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
|
||||||
|
sodipodi:docname="42ctf_logo_big_no_bg_full_white.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview889"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:pageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.092365554"
|
||||||
|
inkscape:cx="3155.9384"
|
||||||
|
inkscape:cy="1169.2671"
|
||||||
|
inkscape:window-width="1856"
|
||||||
|
inkscape:window-height="993"
|
||||||
|
inkscape:window-x="29"
|
||||||
|
inkscape:window-y="52"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="text14333" />
|
||||||
|
<defs
|
||||||
|
id="defs884" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(1823.5311,156.47152)">
|
||||||
|
<g
|
||||||
|
id="g28009"
|
||||||
|
transform="matrix(1.0000013,0,0,0.99999497,-1790.2968,3673.4424)">
|
||||||
|
<g
|
||||||
|
id="g1328"
|
||||||
|
transform="matrix(1.8079585,0,0,1.8079585,-6120.2987,-4183.4979)">
|
||||||
|
<path
|
||||||
|
id="path892"
|
||||||
|
style="color:#000000;fill:#ffffff;stroke-linejoin:round;-inkscape-stroke:none;fill-opacity:1"
|
||||||
|
d="m 3429.7852,260.05664 a 10.001,10.001 0 0 0 -2.584,0.24609 10.001,10.001 0 0 0 -7.543,11.88868 l 50.8516,231.84961 c -8.0433,50.54175 -18.4962,83.38434 -10.0821,113.95703 4.2599,15.47831 13.8073,29.4333 29.5254,42.57031 15.4175,12.88578 36.9112,25.45154 66.6641,39.83008 29.3397,32.4749 71.8944,54.602 116.3652,60.33984 44.2125,5.70449 90.6965,-5.23805 125.961,-39.25 41.0031,-6.77869 71.1344,-17.1823 93.0586,-31.875 22.4915,-15.07297 36.0189,-34.95663 42.6464,-57.71289 12.1554,-41.73612 3.4108,-92.32777 -4.375,-152.31445 l -18.1738,16.0625 c 6.9573,54.19372 12.7038,98.52852 3.3457,130.66015 -5.5196,18.95192 -15.6037,33.97353 -34.5781,46.68946 -18.9744,12.71594 -47.2581,22.79932 -88.1738,29.28515 a 10.001,10.001 0 0 0 -5.5372,2.83789 c -30.7955,31.08045 -71.388,40.97154 -111.6152,35.78125 -40.2272,-5.1903 -79.5879,-25.92311 -105.4492,-55.30468 a 10.001,10.001 0 0 0 -3.1758,-2.40625 c -29.9263,-14.37694 -50.5867,-26.64378 -64.1367,-37.96875 -13.55,-11.32497 -19.9624,-21.24579 -23.0684,-32.53125 -6.2119,-22.57092 2.6054,-54.52185 10.8672,-107.32032 a 10.001,10.001 0 0 0 -0.1113,-3.68945 l -46.1914,-210.61328 103.2598,64.25391 a 10.001,10.001 0 0 0 6.8535,1.38476 c 101.0075,-16.0581 198.5231,-2.99499 300.5293,9.73633 a 10.001,10.001 0 0 0 5.0722,-0.68555 l 126.4903,-52.49414 -71.0039,134.95117 17.6933,9.32227 83.9043,-159.46875 a 10.001,10.001 0 0 0 -12.6816,-13.89258 l -149.6406,62.10156 c -99.7291,-12.46388 -197.3928,-25.43702 -299.7364,-9.85546 l -120.3047,-74.86329 a 10.001,10.001 0 0 0 -4.9257,-1.50195 z"
|
||||||
|
transform="translate(0,4.5838445)" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 3527.9156,562.18166 42.6109,16.8649 c 16.7292,46.1214 40.4484,45.6318 63.9976,46.2755 l 11.9704,32.0331 c 0,0 62.9831,-86.6735 -118.5789,-95.1735 z"
|
||||||
|
id="path894"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 3880.1258,592.94106 -45.0518,8.3934 c -25.2514,42.0644 -48.4379,37.0419 -71.6746,33.1644 l -17.8828,29.1481 c 0,0 -45.2207,-97.1302 134.6092,-70.7059 z"
|
||||||
|
id="path896"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 3692.9385,715.37226 c -15.7925,-3.6732 -22.0278,-10.7121 -29.2363,4.1074 5.902,0.5487 12.1205,0.6112 15.9283,4.3774 0.059,24.1798 24.3616,28.1471 22.7779,2.4787 4.0032,-3.2853 8.4983,-5.6589 15.9731,-2.5092 -2.1673,-17.5646 -10.8503,-10.4507 -25.443,-8.4543 z"
|
||||||
|
id="path898"
|
||||||
|
sodipodi:nodetypes="cccccc" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:#ffffff;-inkscape-stroke:none;fill-opacity:1"
|
||||||
|
d="m 3433.1099,271.25146 -7.3652,6.7636 c 0,0 29.0621,31.6444 58.998,69.2617 14.968,18.8087 30.1434,39.1065 41.9473,57.5645 l 32.125,32.41153 c -2.0573,-13.6978 -11.5933,-18.86803 -23.6992,-37.79833 -12.1059,-18.9302 -27.4498,-39.4309 -42.5488,-58.4042 -30.1981,-37.9467 -59.4571,-69.7988 -59.4571,-69.7988 z"
|
||||||
|
id="path900"
|
||||||
|
sodipodi:nodetypes="ccsccssc" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:#ffffff;-inkscape-stroke:none;fill-opacity:1"
|
||||||
|
d="m 4008.225,297.99676 5.5749,8.3015 c 0,0 -35.6691,23.9517 -73.5876,53.5052 -18.9593,14.7768 -38.4692,30.9525 -54.2703,46.1299 l -41.0812,35.6821 c 5.2103,-12.8341 17.9471,-27.3278 34.1525,-42.8935 16.2054,-15.5657 35.9267,-31.8992 55.0519,-46.8054 38.2506,-29.8122 74.1598,-53.9198 74.1598,-53.9198 z"
|
||||||
|
id="path902"
|
||||||
|
sodipodi:nodetypes="ccsccssc" />
|
||||||
|
<g
|
||||||
|
id="g914"
|
||||||
|
transform="matrix(1.0763584,0.09091724,-0.09091724,1.0763584,2884.4125,-924.2937)">
|
||||||
|
<g
|
||||||
|
id="g908"
|
||||||
|
transform="matrix(1.288481,0,0,1.1087193,-1703.4773,538.66999)">
|
||||||
|
<path
|
||||||
|
id="path904"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 1971.0918,398.34375 -78.7422,24.52344 -39.3359,157.64648 c 67.4756,63.35272 201.1134,73.65398 285.1543,0 l -39.336,-157.64648 -78.7422,-24.52344 -24.5,21.14453 z"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
<path
|
||||||
|
id="path906"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 1827.0195,592.78063 -62.414,12.2207 c 137.3398,147.76478 333.9643,135.43034 451.7968,0 l -54.71,-12.2207 c -110.1435,81.05461 -235.0036,76.56686 -334.6728,0 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:10;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 638.772,1205.6514 59.86027,-25.3526"
|
||||||
|
id="path910"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:10;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1088.7943,1202.8548 -59.8603,-25.3526"
|
||||||
|
id="path912"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="42CTF"
|
||||||
|
transform="matrix(23.766838,0,0,23.766838,-32926.98,-18251.25)"
|
||||||
|
id="text14333"
|
||||||
|
style="font-size:50.8px;line-height:1.25;font-family:Lovelo;-inkscape-font-specification:Lovelo;white-space:pre;fill:#ffffff;stroke-width:1.66987">
|
||||||
|
<path
|
||||||
|
d="m 1460.5686,646.43126 v -9.0932 h 3.9624 v -7.2644 h -3.9624 v -11.0236 l -7.2644,4.8768 v 6.1468 h -4.6228 l 7.4168,-19.9136 h -7.62 l -10.3124,27.178 h 15.1384 v 9.0932 z"
|
||||||
|
id="path837" />
|
||||||
|
<path
|
||||||
|
d="m 1479.6695,624.94286 -13.5636,21.5392 h 23.9776 v -7.366 h -10.7696 l 7.1628,-11.0744 c 6.096,-8.4836 2.54,-17.8308 -8.128,-18.3896 -3.556,-0.1524 -7.9756,1.27 -10.7696,3.302 l 1.778,7.0104 c 1.1684,-1.016 5.1816,-3.0988 8.382,-2.8956 2.1336,0.1016 3.7592,1.6256 3.7592,3.6576 0,0 0.1016,1.4732 -1.8288,4.2164 z"
|
||||||
|
id="path839" />
|
||||||
|
<path
|
||||||
|
d="m 1519.4459,618.59286 0.8636,-7.4676 c -2.1844,-0.9652 -4.6228,-1.4224 -7.1628,-1.4224 -24.5872,0 -24.638,36.8808 0,36.8808 2.54,0 5.7404,-0.6096 7.9756,-1.524 l -0.9652,-7.5184 c -1.3716,0.7112 -3.8608,1.6256 -7.0104,1.6256 -14.3764,0 -14.3764,-22.1488 0,-22.1488 3.1496,0 4.9276,0.8636 6.2992,1.5748 z"
|
||||||
|
id="path841" />
|
||||||
|
<path
|
||||||
|
d="m 1540.1722,646.48206 v -29.0576 h 9.0424 v -7.2136 h -25.3492 v 7.2136 h 9.0424 v 29.0576 z"
|
||||||
|
id="path843" />
|
||||||
|
<path
|
||||||
|
d="m 1572.8367,617.42446 v -7.2644 h -18.1356 v 36.322 h 7.2644 v -14.5288 h 9.2456 v -7.2644 h -9.2456 v -7.2644 z"
|
||||||
|
id="path845" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 229 KiB |
|
@ -5,6 +5,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="{% static 'img/favicon.ico' %}"/>
|
||||||
<!-- Bootstrap CSS -->
|
<!-- Bootstrap CSS -->
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||||
<link rel="stylesheet" href="{% static "css/style.css" %}">
|
<link rel="stylesheet" href="{% static "css/style.css" %}">
|
||||||
|
@ -34,7 +35,7 @@
|
||||||
<header>
|
<header>
|
||||||
<!-- As a link -->
|
<!-- As a link -->
|
||||||
<nav class="navbar navbar-expand-lg navbar-dark">
|
<nav class="navbar navbar-expand-lg navbar-dark">
|
||||||
<a class="navbar-brand" href="{% url "home" %}"><img src="{% static "img/cover.png" %}" width="110px"/></a>
|
<a class="navbar-brand" href="{% url "home" %}"><img src="{% static "img/42ctf_logo_big_no_bg_full_white.svg" %}" width="150px" alt="42ctf logo"/></a>
|
||||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
|
@ -112,17 +113,17 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-4 col-12">
|
<div class="col-lg-4 col-12">
|
||||||
<a href="https://discord.gg/DwZqPpA">
|
<a href="https://discord.gg/DwZqPpA">
|
||||||
<img width="250px" src="https://discordapp.com/api/guilds/606162827274616845/widget.png?style=banner2" style="margin-bottom:5px">
|
<img width="250px" src="https://discordapp.com/api/guilds/606162827274616845/widget.png?style=banner2" style="margin-bottom:5px" alt="42ctf discord server banner">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-1 col-6">
|
<div class="col-lg-1 col-6">
|
||||||
<a href="https://twitter.com/42ctf">
|
<a href="https://twitter.com/42ctf">
|
||||||
<img width="50px" src="{% static "img/twitter.png" %}">
|
<img width="50px" src="{% static "img/twitter.png" %}" alt="Twitter logo">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-1 col-6 middle-md">
|
<div class="col-lg-1 col-6 middle-md">
|
||||||
<a href="https://fr.linkedin.com/company/42ctf">
|
<a href="https://fr.linkedin.com/company/42ctf">
|
||||||
<img width="50px" src="{% static "img/linkedin.png" %}" style="margin-bottom:5px">
|
<img width="50px" src="{% static "img/linkedin.png" %}" style="margin-bottom:5px" alt="Linkedin logo">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4 col-12 bottom-md">
|
<div class="col-lg-4 col-12 bottom-md">
|
||||||
|
@ -137,7 +138,7 @@
|
||||||
</div>
|
</div>
|
||||||
</a> -->
|
</a> -->
|
||||||
<a href="https://www.paypal.com/donate/?hosted_button_id=M6YBYZ63MQGAY" target="_blank">
|
<a href="https://www.paypal.com/donate/?hosted_button_id=M6YBYZ63MQGAY" target="_blank">
|
||||||
<img src="/static/img/paypal.png" width="250" style="margin-top: -20px;">
|
<img src="/static/img/paypal.png" width="250" style="margin-top: -20px;" alt="'Donate with Paypal' banner">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-2 footer-text col-sm-12">
|
<div class="col-lg-2 footer-text col-sm-12">
|
||||||
|
@ -153,4 +154,4 @@
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-9">
|
<div class="col-sm-12 col-md-9">
|
||||||
<div class="ctf-block">
|
<div class="ctf-block">
|
||||||
<div class="ctf-head">
|
<div class="ctf-head">
|
||||||
<h3>Reset password</h3>
|
<h3>Reset password</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="ctf-body">
|
<div class="ctf-body">
|
||||||
<div class="col-sm-8 col-md-6 mx-auto">
|
<div class="col-sm-8 col-md-6 mx-auto">
|
||||||
<form method="post">
|
<form method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input class="form-control" type="email" name="email" autocomplete="email" maxlength="254" required="" placeholder="Email"><br>
|
<input class="form-control" type="email" name="email" autocomplete="email" maxlength="254" required="" placeholder="Email"><br>
|
||||||
<input class="form-control" type="submit" value="{% trans "Reset" %}">
|
<input class="form-control" type="submit" value='{% trans "Reset" %}'>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 col-md-3 right-sidebar">
|
<div class="col-sm-12 col-md-3 right-sidebar">
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
<a href="/accounts/signin" class="list-group-item">{% trans "Login" %}</a>
|
<a href="/accounts/signin" class="list-group-item">{% trans "Login" %}</a>
|
||||||
<a href="/accounts/signup" class="list-group-item"{% trans "Sign up" %}</a>
|
<a href="/accounts/signup" class="list-group-item">{% trans "Sign up" %}</a>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue