Compare commits

..

No commits in common. "main" and "challenges-description" have entirely different histories.

99 changed files with 4030 additions and 6010 deletions

104
bot.py Normal file
View File

@ -0,0 +1,104 @@
import os
import discord
import discord.utils
import urllib.request, json
import asyncio
import json
import logging
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = '42ctf'
intents = discord.Intents.all()
client = discord.Client(intents=intents)
db_file = open('members.json', 'r')
users = json.load(db_file)
db_file.close()
logging.basicConfig(filename='bot.log', format='%(asctime)s %(message)s', level=logging.INFO)
guild = ''
roles = {}
def get_rank(token):
url = urllib.request.urlopen("https://www.42ctf.org/accounts/rank/" + token)
data = json.loads(url.read().decode())
rank = data['rank']
return rank
async def watch_roles():
global users
await client.wait_until_ready() # ensures cache is loaded
while not client.is_closed():
for member_id, token in users.items():
if (token == "0000"):
continue
member = discord.utils.get(guild.members, id=int(member_id))
rank = get_rank(token)
if rank == 1 and roles['top1'] not in member.roles:
await member.add_roles(roles['top1'])
await member.remove_roles(roles['top10'])
await member.remove_roles(roles['top50'])
elif rank > 1 and rank <= 10 and roles['top10'] not in member.roles:
await member.add_roles(roles['top10'])
await member.remove_roles(roles['top1'])
await member.remove_roles(roles['top50'])
elif rank > 10 and rank <= 50 and roles['top50'] not in member.roles:
await member.add_roles(roles['top50'])
await member.remove_roles(roles['top10'])
await member.remove_roles(roles['top1'])
elif rank > 50:
await member.remove_roles(roles['top1'])
await member.remove_roles(roles['top10'])
await member.remove_roles(roles['top50'])
await asyncio.sleep(60)
@client.event
async def on_ready():
global guild, roles
guild = discord.utils.get(client.guilds, name=GUILD)
roles['top10'] = discord.utils.get(guild.roles, id=801787467064672286)
roles['top1'] = discord.utils.get(guild.roles, id=798638767359524875)
roles['top50'] = discord.utils.get(guild.roles, id=803729539145924649)
logging.info('%s is connected to the following guild: %s(id: %d)', client.user, guild.name, guild.id)
client.loop.create_task(watch_roles())
@client.event
async def on_message(message):
global guild, roles
if message.author == client.user:
return
if '!connect' in message.content:
try:
user_token = message.content.split(' ')[1]
member = discord.utils.get(guild.members, name=message.author.name)
rank = get_rank(user_token)
users[str(member.id)] = user_token
logging.info("MESSAGE: from %s with token %s", message.author.name, user_token)
with open('members.json', 'w') as json_file:
json.dump(users, json_file)
if rank == 1:
await member.add_roles(roles['top1'])
response = "Congratulations, you're now Top 1. But for how long ?"
elif (rank <= 10):
await member.add_roles(roles['top10'])
response = "You've been granted the Top 10 role. Now, go away and flag !"
elif rank <= 50:
await member.add_roles(roles['top50'])
response = "You've been granted the Top 50 role. Now, go away and flag !"
else:
response = "No role for you now, but I'll keep watching you."
except IndexError:
response = 'usage: !connect 42ctf_token'
await message.author.create_dm()
await message.author.dm_channel.send(response)
client.run(TOKEN)

View File

@ -1,6 +1,5 @@
from .models import UserProfileInfo
from django.contrib import admin
from .models import Campus
#admin.site.register(UserProfileInfo)
# Register your models here.
@ -8,10 +7,6 @@ from .models import Campus
@admin.register(UserProfileInfo)
class userprofile(admin.ModelAdmin):
#list display
list_display = ['user', 'score', 'last_submission_date', 'campus']
list_display = ['user', 'score', 'last_submission_date']
# search list
search_fields = ['score', 'user__username', 'campus__name']
@admin.register(Campus)
class campus(admin.ModelAdmin):
list_display = ['name']
search_fields = ['score', 'user__username']

View File

@ -1,24 +0,0 @@
from collections import defaultdict
from django.core.management.base import BaseCommand, CommandError
from accounts import models as acc_models
from django.contrib.auth import models as auth_models
from django.contrib.auth.models import timezone
from datetime import timedelta
class Command(BaseCommand):
help = 'Remove all users who never logged in'
def handle(self, *args, **options):
all_users = acc_models.UserProfileInfo.objects.filter(score=0).select_related()
to_remove = []
for elem in all_users:
user = elem.user
if user.last_login is None and user.date_joined < timezone.now() - timedelta(hours=72):
to_remove.append(user)
print("You are going to remove {} users.".format(len(to_remove)))
answer = input("Continue ? [y/N] ")
if answer.lower() in ["y","yes"]:
for elem in to_remove:
elem.delete()
print("Users have been successfully pruned.")

View File

@ -1,23 +0,0 @@
# 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),
),
]

View File

@ -1,22 +0,0 @@
# 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),
),
]

View File

@ -1,31 +0,0 @@
# 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'),
),
]

View File

@ -1,23 +0,0 @@
# 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),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 3.2.11 on 2022-08-01 20:12
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('accounts', '0011_migration_campus'),
]
operations = [
migrations.AlterModelOptions(
name='userprofileinfo',
options={'ordering': ['-score', 'last_submission_date', 'user__username', 'campus'], 'permissions': (('view_info', 'View user info'),), 'verbose_name': 'profile', 'verbose_name_plural': 'profiles'},
),
migrations.RemoveField(
model_name='userprofileinfo',
name='intra42_campus',
),
migrations.RemoveField(
model_name='userprofileinfo',
name='intra42_campus_id',
),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 3.2.11 on 2022-08-18 15:41
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0012_auto_20220801_2212'),
]
operations = [
migrations.AddField(
model_name='campus',
name='logo',
field=models.URLField(default='https://42.fr'),
preserve_default=False,
),
migrations.AddField(
model_name='campus',
name='url',
field=models.URLField(default='https://42.fr', max_length=100),
preserve_default=False,
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.11 on 2022-08-18 15:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0013_auto_20220818_1741'),
]
operations = [
migrations.AlterField(
model_name='campus',
name='logo',
field=models.URLField(blank=True),
),
migrations.AlterField(
model_name='campus',
name='url',
field=models.URLField(blank=True, max_length=100),
),
]

View File

@ -12,29 +12,15 @@ class UserProfileInfo(models.Model):
last_submission_date = models.DateTimeField('Last Submission Date', default=timezone.now)
token = models.CharField(max_length=200, blank=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)
member = models.BooleanField(default=False)
member_since = models.DateTimeField('Member since', default=timezone.now)
member_until = models.DateTimeField('Member until', default=timezone.now)
def __str__(self):
return self.user.username
class Meta:
ordering = ['-score', 'last_submission_date', 'user__username', 'campus']
ordering = ['-score', 'last_submission_date', 'user__username']
verbose_name = 'profile'
verbose_name_plural = 'profiles'
permissions = (("view_info", "View user info"),)
class Campus(models.Model):
id = models.IntegerField(primary_key=True, unique=True)
name = models.CharField(max_length=50)
url = models.URLField(max_length=100,blank=True)
logo = models.URLField(max_length=200,blank=True)
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.

View File

@ -12,7 +12,7 @@
{% trans "Deleted accounts cannot be recovered." %}<br><br>
<div class="col-sm-8 col-md-6 mx-auto">
{% if bad_password %}
<span class="message error-msg">{% trans "Password incorrect." %}</span>
<span class="message error-msg">{% trans "Password inccorect." %}</span>
{% elif deleted %}
<span class="message success-msg">{% trans "Your account has been deleted." %}</span>
{% endif %}

View File

@ -2,111 +2,67 @@
{% block content %}
{% load i18n %}
<div class="row">
<div class="col-sm-12 col-md-9">
<div class="ctf-block">
<div class="ctf-head">
<h3>Edit info</h3>
</div>
<div class="bloc-body">
<div class="col-sm-12 col-md-12 mx-auto">
{{ u_form.non_field_errors }}
{% if error is not None %}
<span class="message error-msg">{{ error }}</span>
{% elif success is not None %}
<span class="message success-msg">{{ success }}</span>
{% endif %}
<form method='POST'>
<div class="edit-infos-grp">
{%csrf_token%}
<label for="{{ u_form.username.id_for_label }}">{% trans "Username" %} *</label>
{{ u_form.username.errors}}
{{u_form.username}}
</br>
<label for="{{ u_form.email.id_for_label }}">{% trans "Email" %} *</label>
{{ u_form.email.errors}}
{{u_form.email}}
</br>
</br>
<label for="{{ p_form.portfolio_site.id_for_label }}">{% trans "Website" %}</label>
{{p_form.portfolio_site}}
</br>
</br>Token
<input type='text' readonly value='{{token}}'>
</br>
<input class="form-control" type="submit" value="{% trans " Apply" %}">
</div>
</form>
</div>
</div>
<div class="col-sm-12 col-md-9">
<div class="ctf-block">
<div class="ctf-head">
<h3>Edit info</h3>
</div>
<div class="ctf-block">
<div class="ctf-head">
<h3>{% trans "Connected accounts" %}</h3>
</div>
<div class="bloc-body">
<div class="d-flex">
{% if user.userprofileinfo.discord_id|length > 0 %}
<form action="{% url 'accounts:connections-disconnect-discord' %}" method='POST'
class="form-inline p-2">
<div class="bloc-body">
<div class="col-sm-12 col-md-12 mx-auto">
{{ u_form.non_field_errors }}
{% if error is not None %}
<span class="message error-msg">{{ error }}</span>
{% elif success is not None %}
<span class="message success-msg">{{ success }}</span>
{% endif %}
<form method='POST'>
<div class="edit-infos-grp">
{%csrf_token%}
<button class="btn btn-dark" type="submit">{% trans "Disconnect Discord" %}</button>
</form>
{% else %}
<form action="{% url 'accounts:connections-connect-discord' %}" method='POST'
class="form-inline p-2">
{%csrf_token%}
<button class="btn btn-dark" type="submit">{% trans "Connect Discord" %}</button>
</form>
{% endif %}
</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>
<label for="{{ u_form.username.id_for_label }}">{% trans "Username" %} *</label>
{{ u_form.username.errors}}
{{u_form.username}}
</br>
<label for="{{ u_form.email.id_for_label }}">{% trans "Email" %} *</label>
{{ u_form.email.errors}}
{{u_form.email}}
</br>
</br>
<label for="{{ p_form.portfolio_site.id_for_label }}">{% trans "Website" %}</label>
{{p_form.portfolio_site}}
</br>
</br>Token
<input type='text' readonly value='{{token}}'>
</br>
<input class="form-control" type="submit" value="{% trans "Apply" %}">
</div>
</form>
</div>
</div>
</div>
<div class="d-none d-md-block col-10 col-md-3 right-sidebar">
<ul class="list-group">
</div>
<div class="d-none d-md-block col-10 col-md-3 right-sidebar">
<ul class="list-group">
<li class="list-group-item">{{ user.username }}</li>
<li class="list-group-item">{% trans "Score" %} : {{ user.userprofileinfo.score }}</li>
{% if user.userprofileinfo.portfolio_site %}
<li class="list-group-item">
<a href="{{ user.userprofileinfo.portfolio_site }}" target="_blank">
{{ user.userprofileinfo.portfolio_site }}
</a>
</li>
<li class="list-group-item">
<a href="{{ user.userprofileinfo.portfolio_site }}" target="_blank">
{{ user.userprofileinfo.portfolio_site }}
</a>
</li>
{% endif %}
<li class="list-group-item">{% trans "Registered since" %} {{ user.date_joined|date:"Y-m-d" }}</li>
</ul>
<ul class="list-group">
<form method='GET' action="{% url 'accounts:profile' user %}">
<li class="list-group-item">
<input class="form-control" type="submit" value="{% trans " View my profile" %}">
</li>
</form>
</ul>
<ul class="list-group">
<form method='GET' action="{% url 'accounts:delete_account' %}">
{%csrf_token%}
<li class="list-group-item">
<input class="form-control" type="submit" value="{% trans " Delete my account" %}">
</li>
{%csrf_token%}
<li class="list-group-item">
<input class="form-control" type="submit" value="{% trans "Delete my account" %}">
</li>
</form>
</ul>
</div>
</ul>
</div>
</div>
{% endblock %}

View File

@ -53,9 +53,9 @@
</li>
{% endif %}
{% if member %}
<li class="list-group-item">Status: <a class="{{ is_member }}" href="{% url 'resources:becomeMember' %}">{% trans "Member" %}</a></li>
<li class="list-group-item is-member">{% trans "Status: Member" %}</li>
{% else %}
<li class="list-group-item">Status: {% trans " Visitor" %}</li>
<li class="list-group-item">{% trans "Status: Visitor" %}</li>
{% endif %}
<li class="list-group-item">{% trans "Registered since" %} {{ user.date_joined|date:"d-m-Y" }}</li>
</ul>
@ -75,26 +75,13 @@
</li>
{% endfor %}
</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>
<script src="https://code.highcharts.com/highcharts.src.js"></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.setOptions(Highcharts.theme);
Highcharts.chart('time-chart', {
@ -135,7 +122,7 @@
series: [
{
name: 'Total',
data: {{ solved|safe }}
data: {{ solved|safe }}
},
{% for cat in cats %}
{

View File

@ -2,40 +2,42 @@
{% block content %}
{% load i18n %}
<div class="row">
<div class="col-sm-12 col-md-9">
<div class="ctf-block">
<div class="ctf-head">
<h3>Register</h3>
</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>
<div class="col-sm-12 col-md-3 right-sidebar">
<ul class="list-group">
<a href="/accounts/signup" class="list-group-item">{% trans "Sign up" %}</a>
<a href="/accounts/signin" class="list-group-item">{% trans "Login" %}</a>
</ul>
</div>
<div class="col-sm-12 col-md-9">
<div class="ctf-block">
<div class="ctf-head">
<h3>Register</h3>
</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>
<div class="col-sm-12 col-md-3 right-sidebar">
<ul class="list-group">
<a href="/accounts/signup" class="list-group-item">{% trans "Sign up" %}</a>
<a href="/accounts/signin" class="list-group-item">{% trans "Login" %}</a>
</ul>
</div>
</div>
{% endblock %}

View File

@ -10,11 +10,8 @@ urlpatterns = [
path('edit/', views.edit, name='edit'),
path('logout/', views.out, name='out'),
path('rank/<str:token>', views.rank, name='rank'),
path('connections/connect/discord', views.connection.connect_discord, name='connections-connect-discord'),
path('connections/connect/discord/authorize', views.connection.authorize_discord, name='connections-connect-discord-authorize'),
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('connections/connect/discord', views.connection.connect, name='connections-connect-discord'),
path('connections/connect/discord/authorize', views.connection.authorize, name='connections-connect-discord-authorize'),
path('connections/disconnect/discord', views.connection.disconnect, name='connections-disconnect-discord'),
path('delete_account/', views.delete_account, name='delete_account'),
]

View File

@ -4,106 +4,47 @@ from django.views.decorators.http import require_POST
from django.views.defaults import bad_request
from django.urls import reverse
from django.shortcuts import redirect
from django.contrib.sites.models import Site
from accounts.models import Campus
from django.db import IntegrityError
import os
oauth = OAuth()
oauth.register(
name='discord',
client_id=os.getenv('OAUTH2_DISCORD_CLIENT_ID'),
client_secret=os.getenv('OAUTH2_DISCORD_CLIENT_SECRET'),
access_token_url='https://discord.com/api/oauth2/token',
authorize_url='https://discord.com/api/oauth2/authorize',
client_kwargs={'scope': 'identify'},
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/'
name='discord',
client_id=os.getenv('OAUTH2_DISCORD_CLIENT_ID'),
client_secret=os.getenv('OAUTH2_DISCORD_CLIENT_SECRET'),
access_token_url='https://discord.com/api/oauth2/token',
authorize_url='https://discord.com/api/oauth2/authorize',
client_kwargs={'scope': 'identify'},
api_base_url='https://discord.com/api/'
)
@login_required
@require_POST
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)
def connect(request):
if request.user.userprofileinfo.discord_id:
return bad_request(request, "Already connected")
redirect_uri = reverse('accounts:connections-connect-discord-authorize')
redirect_uri = request.build_absolute_uri(redirect_uri)
print(redirect_uri)
return oauth.discord.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')
def authorize(request):
if request.user.userprofileinfo.discord_id:
return bad_request(request, "Already connected")
token = oauth.discord.authorize_access_token(request)
response = oauth.discord.get('users/@me', token=token)
response = response.json()
discord_id = response['id']
request.user.userprofileinfo.discord_id = discord_id
request.user.userprofileinfo.save()
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:
return bad_request(request, "Already connected")
site = Site.objects.get_current()
redirect_uri = reverse('accounts:connections-connect-discord-authorize')
redirect_uri = "https://" + site.domain + redirect_uri[3:] # remove language code
return oauth.discord.authorize_redirect(request, redirect_uri)
@login_required
def authorize_discord(request):
if request.user.userprofileinfo.discord_id:
return bad_request(request, "Already connected")
try:
token = oauth.discord.authorize_access_token(request)
except:
return redirect('accounts:edit')
response = oauth.discord.get('users/@me', token=token)
response = response.json()
discord_id = response['id']
request.user.userprofileinfo.discord_id = discord_id
request.user.userprofileinfo.save()
return redirect('accounts:edit')
@login_required
@require_POST
def disconnect_discord(request):
if not request.user.userprofileinfo.discord_id:
return bad_request(request, "Already disconnected")
request.user.userprofileinfo.discord_id = None
request.user.userprofileinfo.save()
return redirect('accounts:edit')
def disconnect(request):
if not request.user.userprofileinfo.discord_id:
return bad_request(request, "Already disconnected")
request.user.userprofileinfo.discord_id = None
request.user.userprofileinfo.save()
return redirect('accounts:edit')

View File

@ -43,69 +43,32 @@ def signup(request):
user_form = UserForm()
profile_form = UserProfileInfoForm()
registered = False
if request.method == 'POST':
username = request.POST.get('username')
passwd = request.POST.get('password')
email = request.POST.get('email')
website = request.POST.get('portfolio_site')
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
})
pass1 = request.POST.get('password')
if len(pass1) < 8:
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})
first_isalpha = pass1[0].isalpha()
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 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."),
'old_username': username,
'old_website': website
})
return render(request,'accounts/register.html', {'user_form':user_form, 'profile_form':profile_form, 'registered_failed':_("A user with that email already exists.")})
user_form = UserForm(data=request.POST)
profile_form = UserProfileInfoForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
profile.user = user
profile.token = token_hex(16)
profile.save()
registered = True
else:
return render(request, 'accounts/register.html', {
'user_form': user_form,
'profile_form': profile_form,
'registered_failed': _("A user with that username already exists."),
'old_email': email,
'old_website': website
})
return render(request, 'accounts/register.html', {
'user_form': user_form,
'profile_form': profile_form,
'registered': registered
})
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',
{'user_form':user_form,
'profile_form':profile_form,
'registered':registered})
else:
return HttpResponseRedirect(reverse('home'))
@ -172,7 +135,7 @@ def profile(request, user_name):
# get datas
somme = 0
solved_count = len(solved)
pointDatas[cat.name] = []
pointDatas[cat.name].append([user_obj.date_joined.timestamp() * 1000, 0])
percent = (solved_count / max_count) * 100
@ -188,9 +151,20 @@ def profile(request, user_name):
for s in solves.reverse():
somme += s.ctf.points
solved.append([s.flag_date.timestamp() * 1000,somme])
created = CTF.objects.filter(author=user_obj, event=None)
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, 'created':created})
'rank': rank, 'score' : somme, 'member' : member, 'cats':cats})
def rank(request, token):
all_users = UserProfileInfo.objects.filter(score__gt=0).select_related().order_by('-score', 'last_submission_date', 'user__username')
rank = 1
for elem in all_users:
if elem.token == token:
break
rank += 1
data = {"rank": rank}
return JsonResponse(data)
@login_required
def delete_account(request):
@ -207,15 +181,4 @@ def delete_account(request):
return render(request, 'accounts/delete.html', {'deleted': False, 'bad_password': True})
else:
return render(request, 'accounts/delete.html', {'deleted': False, 'bad_password': False} )
def rank(request, token):
all_users = UserProfileInfo.objects.filter(score__gt=0).select_related().order_by('-score', 'last_submission_date', 'user__username')
rank = 1
for elem in all_users:
if elem.token == token:
break
rank += 1
data = {"rank": rank}
return JsonResponse(data)
return render(request, 'accounts/delete.html', {'deleted': False, 'bad_password': False} )

View File

View File

@ -1,3 +0,0 @@
from django.contrib import admin
# Register your models here.

View File

@ -1,6 +0,0 @@
from django.apps import AppConfig
class ApiConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'api'

View File

@ -1,3 +0,0 @@
from django.db import models
# Create your models here.

View File

@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

@ -1,9 +0,0 @@
from django.urls import path
from . import views
urlpatterns = [
path('bot/discord', views.bot_discord_rank, name='bot_discord_rank'), # legacy, to remove when new bot is deployed
path('bot/discord/rank', views.bot_discord_rank, name='bot_discord_rank'), # use this
path('bot/discord/campus', views.bot_discord_campus, name='bot_discord_campus'),
path('events/<str:event_slug>', views.events_data, name='events_data'),
]

View File

@ -1,72 +0,0 @@
from django.shortcuts import render
from accounts.models import UserProfileInfo
from django.http import JsonResponse
import os
from events.models import Event, Team, EventPlayer
from django.shortcuts import get_object_or_404
# Create your views here.
def bot_discord_rank(request):
if request.method != 'GET':
return JsonResponse({'error':'bad request'})
token = request.GET.get('token')
auth_token = os.getenv('BOT_TOKEN')
if (token != auth_token or not auth_token):
return JsonResponse({'error':'not authorized'})
all_users = UserProfileInfo.objects.select_related().order_by('-score', 'last_submission_date', 'user__username')
data = {}
rank = 1
for user in all_users:
if user.discord_id:
data[user.discord_id] = rank
rank += 1
return JsonResponse(data)
def bot_discord_campus(request):
if request.method != 'GET':
return JsonResponse({'error':'bad request'})
token = request.GET.get('token')
auth_token = os.getenv('BOT_TOKEN')
if (token != auth_token or not auth_token):
return JsonResponse({'error':'not authorized'})
all_users = UserProfileInfo.objects.select_related().order_by('-score', 'last_submission_date', 'user__username')
data = {}
for user in all_users:
if user.campus and user.discord_id:
data[user.discord_id] = user.campus.name
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)

View File

@ -2,6 +2,8 @@ from django.contrib import admin
from .models import Category, CTF, CTF_flags
admin.site.register(Category)
#admin.site.register(CTF)
#admin.site.register(CTF_flags)
@admin.register(CTF_flags)
class ctf_flags(admin.ModelAdmin):
@ -12,61 +14,12 @@ class ctf_flags(admin.ModelAdmin):
# search list
search_fields = ['ctf__category__name', 'ctf__name', 'user__username']
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
groups = list(request.user.groups.values_list('name', flat=True))
return qs.filter(event__name__in=groups)
def has_view_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_view_permission(request, obj)
def has_change_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_change_permission(request, obj)
def has_delete_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_delete_permission(request, obj)
@admin.register(CTF)
class ctf(admin.ModelAdmin):
#list display
list_display = ['name', 'event', 'category', 'points']
list_display = ['name', 'event', 'category']
#list Filter
list_filter = ('category', 'event')
# search list
search_fields = ['category__name', 'name', 'author__username']
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
groups = list(request.user.groups.values_list('name', flat=True))
return qs.filter(event__name__in=groups)
def has_view_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_view_permission(request, obj)
def has_change_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_change_permission(request, obj)
# Register your models here.

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.11 on 2023-09-17 17:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ctfs', '0008_auto_20220215_1713'),
]
operations = [
migrations.AddField(
model_name='ctf_flags',
name='bonus',
field=models.PositiveSmallIntegerField(default=0),
),
]

View File

@ -45,7 +45,6 @@ class CTF_flags(models.Model):
user = models.ForeignKey(User, unique=False, on_delete=models.CASCADE)
ctf = models.ForeignKey(CTF, unique=False, on_delete=models.CASCADE)
flag_date = models.DateTimeField('Flag date')
bonus = models.PositiveSmallIntegerField(default=0)
class Meta:
ordering = ['-flag_date']

View File

@ -1,26 +0,0 @@
from django.contrib import sitemaps
from django.urls import reverse
from .models import Category, CTF
from .views import category, ctf
class CategorySitemap(sitemaps.Sitemap):
changefreq = "weekly"
priority = 0.7
i18n = True
def items(self):
return Category.objects.all()
def location(self, obj):
return reverse(category, kwargs={'cat_slug': obj.slug})
class CTFSitemap(sitemaps.Sitemap):
changefreq = "weekly"
priority = 0.7
i18n = True
def items(self):
return CTF.objects.all()
def location(self, obj):
return reverse(ctf, kwargs={'cat_slug': obj.category.slug, 'ctf_slug': obj.slug})

@ -1 +1 @@
Subproject commit 5c7b5995fe12c0ed1bb10f97e56ec89377c98b54
Subproject commit 18fac3978d21dc824bcffa2bc960aa2bf6b4abd9

View File

@ -8,7 +8,7 @@
<div class="col-sm-12 col-md-9">
<div class="ctf-block">
<div class="ctf-head">
<h1>{{ ctf.name }}</h1>
<h3>{{ ctf.name }}</h3>
<small>{% trans "Published date" %} : {{ ctf.pub_date }}</small>
</div>
{% if date < ctf.pub_date %}

View File

@ -2,10 +2,8 @@
{% block content %}
{% load i18n %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{{ cat.name }}</h1>
</div>
<div class="col-sm-12 col-md-9 news-card">
<h3>{{ cat.name }}</h3>
{% if ctfs %}
<table class="table table-striped table-dark">
<thead>

View File

@ -4,7 +4,9 @@ register = template.Library()
@register.simple_tag
def get_chall_by_lang(chall, lang):
print(chall.slug)
filepath = "ctfs/templates/challenges/"+ lang + "/" + chall.slug + ".html"
print(filepath)
try:
with open(filepath) as fp:
return fp.read()

View File

@ -1,15 +1,7 @@
from django.contrib.sitemaps.views import sitemap
from django.urls import path
from .sitemaps import CategorySitemap, CTFSitemap
from . import views
sitemaps = {
'categories': CategorySitemap(),
'challenges': CTFSitemap(),
}
urlpatterns = [
path('<str:cat_slug>/', views.category, name='category'),
path('<str:cat_slug>/<str:ctf_slug>', views.ctf, name='ctf'),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
path('<str:cat_slug>/<str:ctf_slug>', views.ctf, name='ctf')
]

View File

@ -1,5 +1,5 @@
from django.contrib import admin
from .models import Event, EventPlayer, Team, Bonus
from .models import Event, EventPlayer, Team
@admin.register(Event)
class event(admin.ModelAdmin):
@ -8,27 +8,6 @@ class event(admin.ModelAdmin):
# search list
search_fields = ['name', 'slug', 'description', 'password']
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
groups = list(request.user.groups.values_list('name', flat=True))
return qs.filter(name__in=groups)
def has_view_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.name).exists()
return super().has_view_permission(request, obj)
def has_change_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.name).exists()
return super().has_change_permission(request, obj)
@admin.register(EventPlayer)
class score(admin.ModelAdmin):
#list display
@ -38,33 +17,7 @@ class score(admin.ModelAdmin):
# search list
search_fields = ['user__username', 'score', 'event__name']
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
groups = list(request.user.groups.values_list('name', flat=True))
return qs.filter(event__name__in=groups)
def has_view_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_view_permission(request, obj)
def has_change_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_change_permission(request, obj)
def has_delete_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_delete_permission(request, obj)
# Register your models here.
@admin.register(Team)
class team(admin.ModelAdmin):
@ -74,36 +27,3 @@ class team(admin.ModelAdmin):
list_filter = ('event',)
# search list
search_fields = ['name']
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
groups = list(request.user.groups.values_list('name', flat=True))
return qs.filter(event__name__in=groups)
def has_view_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_view_permission(request, obj)
def has_change_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_change_permission(request, obj)
def has_delete_permission(self, request, obj=None):
if request.user.is_superuser:
return True
if obj is not None:
return request.user.groups.filter(name=obj.event.name).exists()
return super().has_delete_permission(request, obj)
@admin.register(Bonus)
class bonus(admin.ModelAdmin):
#list display
list_display = ['points', 'absolute']

View File

@ -1,19 +0,0 @@
# Generated by Django 3.2.11 on 2022-05-30 07:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0011_migration_campus'),
('events', '0009_auto_20220215_1706'),
]
operations = [
migrations.AddField(
model_name='event',
name='campus',
field=models.ManyToManyField(blank=True, to='accounts.Campus'),
),
]

View File

@ -1,28 +0,0 @@
# Generated by Django 3.2.11 on 2023-09-17 17:00
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('events', '0010_event_campus'),
]
operations = [
migrations.CreateModel(
name='Bonus',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('absolute', models.BooleanField(default=True)),
('points', models.CharField(max_length=100, validators=[django.core.validators.int_list_validator])),
],
),
migrations.AddField(
model_name='event',
name='bonus',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='events.bonus'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 3.2.11 on 2023-09-17 18:38
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('events', '0011_bonus_points'),
]
operations = [
migrations.AlterField(
model_name='event',
name='bonus',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='events.bonus'),
),
migrations.AlterField(
model_name='eventplayer',
name='team',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='events.team'),
),
]

View File

@ -1,17 +1,9 @@
from django.db import models
from django.contrib.auth.models import User
from django.contrib.auth.models import timezone
from django.core.validators import int_list_validator
import uuid
from accounts.models import Campus
# Create your models here.
class Bonus(models.Model):
absolute = models.BooleanField(default=True)
points = models.CharField(validators=[int_list_validator], max_length=100)
def __str__(self):
return self.points
class Event(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=200)
@ -25,8 +17,6 @@ class Event(models.Model):
team_size = models.PositiveIntegerField(default=1)
auto_match = models.BooleanField(default=False)
dynamic = models.BooleanField(default=False)
campus = models.ManyToManyField(Campus, blank=True)
bonus = models.ForeignKey(Bonus, null=True, on_delete=models.SET_NULL, blank=True)
def __str__(self):
return self.name
@ -38,13 +28,15 @@ class Team(models.Model):
last_submission_date = models.DateTimeField('Last Submission Date', default=timezone.now)
auto = models.BooleanField(default=False)
def __str__(self):
return self.name
return self.name
class EventPlayer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
score = models.PositiveIntegerField(default=0, db_index=True)
last_submission_date = models.DateTimeField('Last Submission Date', default=timezone.now)
team = models.ForeignKey(Team, on_delete=models.CASCADE, null=True, blank=True)
team = models.ForeignKey(Team, on_delete=models.CASCADE, null=True)
class Meta:
ordering = ['-score', 'last_submission_date', 'user__username']

View File

@ -1,24 +0,0 @@
from django.contrib import sitemaps
from django.urls import reverse
from .models import Event
class EventsSitemap(sitemaps.Sitemap):
changefreq = "daily"
priority = 0.7
i18n = True
def items(self):
return Event.objects.all()
def location(self, obj):
return reverse('events:event_info', kwargs={'event_slug': obj.slug})
class StaticViewSitemap(sitemaps.Sitemap):
priority = 0.7
changefreq = 'daily'
i18n = True
def items(self):
return ['events:events']
def location(self, item):
return reverse(item)

View File

@ -16,9 +16,6 @@
{% if registered == False %}
<span class="message error-msg">{% trans "You need to be registered to the event." %}</span>
{% else %}
{% if invalid == True %}
<span class="message error-msg">{% trans "Invalid characters in name" %}</span>
{% endif %}
{% if exist == True %}
<span class="message error-msg">{% trans "Name already taken." %}</span>
{% endif %}

View File

@ -7,7 +7,7 @@
<div class="ctf-block">
<a href="{% url 'events:event_info' event_slug=event.slug %}">< Back to event</a>
<div class="ctf-head">
<h1>{% trans "Event" %} - {{ event.name }}</h1>
<h2>{% trans "Event" %} - {{ event.name }}</h2>
<h4>{{ ctf.name }}</h4>
<small>{% trans "Published date" %} : {{ ctf.pub_date }}</small>
</div>
@ -21,10 +21,7 @@
<div class="ctf-footer">
{% if request.user.is_authenticated %}
{% if congrat == True %}
<p>{% trans "Congratulation !" %}</p>
{% if bonus|add:"0" > 0 %}
<p>{% trans "Bonus points awarded" %} : {{ bonus }}</p>
{% endif %}
<p>{% trans "Congratulation !" %}</p>
{% elif alreadyflag == True %}
<p>{% trans "Already flagged" %}</p>
{% elif eventisover == True %}
@ -99,9 +96,6 @@
<ul class="list-group">
<li class="list-group-item">{% trans "Author" %} : <a style="position:absolute;right: 15px;" class="profile_link {{is_member}}" href="{% url 'accounts:profile' user_name=ctf.author.username %}">{{ ctf.author.username }}</a></li>
<li class="list-group-item">{% trans "Point reward" %} : <span style="position:absolute;right: 15px;">{{ ctf.points }}</span></li>
{% if ctf.event.bonus %}
<li class="list-group-item">{% trans "Speed Bonuses" %} : <span style="position:absolute;right: 15px;">{{ bonus_points }}</span></li>
{% endif %}
</ul>
</div>

View File

@ -13,7 +13,7 @@
{% endif %}
<div class="event-block">
<div class="event-head" style="background-image:linear-gradient(180deg, rgba(102,102,102,0.3) 100%, rgba(29,29,29,1) 100%),url('{{ event.img }}');">
<h1>{{ event.name }}</h1>
<h3>{{ event.name }}</h3>
{% if ended == True %}
<small>{% trans "This event is over." %}</small>
{% else %}
@ -26,7 +26,7 @@
{% endif %}
</div>
<div class="event-footer">
{% if begun == True or is_event_manager == True %}
{% if begun == True %}
<h4>{% trans "Challenges" %}</h4>
{% if ctfs %}

View File

@ -8,38 +8,22 @@
<h3>{{ event.name }}</h3>
<small>{% trans "This event start at" %} : {{ event.start_date }}</small>
</div>
<div class="ctf-footer">
{% if logged == True %}
{% if userHasCampus == False %}
<span class="message error-msg">
{% trans "This event is reserved for one or more 42 campuses. If you have not connected your intranet to 42CTF, you can do so with this button: " %}
<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>
</span>
{% if wrongpwd == True %}
<span class="message error-msg">{% trans "Wrong password submited." %}</span>
{% endif %}
{% if campusCanJoin == False %}
<span class="message error-msg">
{% trans "This event is reserved for one or more 42 campuses. And unfortunately your campus can't participate. Do not hesitate to contact us to organize an event on your campus!" %}
</span>
{% endif %}
{% if userHasCampus == True and campusCanJoin == True %}
{% if wrongpwd == True %}
<span class="message error-msg">{% trans "Wrong password submited." %}</span>
{% endif %}
{% if alreadyregistered == True %}
<span class="message error-msg">{% trans "You're already registered to this event." %}</span>
{% endif %}
<h4>{% trans "This event is password protected" %}</h4>
<small>{% trans "You need to submit the event password to gain access to this event." %}</small>
<form method="post" action="{% url 'events:submit_pwd' event_slug=event.slug %}" class="submitflag-form">
{% csrf_token %}
<input type="text" name="password" maxlength="48" required="">
<input class="form-control" type="submit" value=">">
</form>
{% if alreadyregistered == True %}
<span class="message error-msg">{% trans "You're already registered to this event." %}</span>
{% endif %}
<h4>{% trans "This event is password protected" %}</h4>
<small>{% trans "You need to submit the event password to gain access to this event." %}</small>
<form method="post" action="{% url 'events:submit_pwd' event_slug=event.slug %}" class="submitflag-form">
{% csrf_token %}
<input type="text" name="password" maxlength="48" required="">
<input class="form-control" type="submit" value=">">
</form>
{% else %}
<h4>{% trans "You need to be logged to access this event." %}</h4>
{% endif %}
@ -51,7 +35,7 @@
<li class="list-group-item">{{ event.name }}</li>
<li class="list-group-item">{% trans "Starts at" %} : {{ event.start_date | date:'H:i d-m-y'}}</li>
<li class="list-group-item">{% trans "Ends at" %} : {{ event.end_date | date:'H:i d-m-y'}}</li>
</ul>
</div>
</div>

View File

@ -2,8 +2,8 @@
{% block content %}
{% load i18n %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "Events" %}</h1>
<div class="col-12">
<h3>{% trans "Events" %}</h3>
</div>
{% if events %}
{% for ev in events %}

View File

@ -1,168 +0,0 @@
{% extends 'base.html' %}
{% block content %}
{% load i18n %}
{% load key_value %}
{% load is_member %}
{% ismember user.userprofileinfo as is_member %}
<div class="row">
<div class="col-sm-12 col-md-9">
<a href="{% url 'events:event_info' event_slug=event.slug %}">< Back to event</a>
<div>
<h4>{% trans "Challenges Solved by" %} <span class="{{ is_member }}">{{ user.username }} - {{ event.name }}</span></h4>
{% if solves%}
<div class="table table-dark">
<div class="card-body">
<div id="time-chart"></div>
</div>
</div>
<table class="table table-dark">
<thead>
<tr>
<th scope="col">{% trans "Challenge Name" %}</th>
<th scope="col">{% trans "Category" %}</th>
<th scope="col">{% trans "Points" %}</th>
<th scope="col">{% trans "Bonus" %}</th>
<th scope="col">{% trans "Date" %}</th>
</tr>
</thead>
<tbody>
{% for s in solves %}
<tr>
<th scope="row"><a href="{% url 'events:event_chall_info' event_slug=event.slug chall_slug=s.ctf.slug %}">{{ s.ctf.name }}</a></th>
<td>{{ s.ctf.category.name}}</td>
<td>{{ s.ctf.points }}</td>
<td>{{ s.bonus }}</td>
<td>{{ s.flag_date|date:"Y-m-d H:i:s" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "It seems that this user has not solved any challenge yet..." %}</p>
{% endif %}
</div>
</div>
<div class="d-none d-md-block col-10 col-md-3 right-sidebar">
<ul class="list-group">
<li class="list-group-item {{ is_member }}">{{ user.username }}</li>
<li class="list-group-item">{% trans "Score" %} : {{ score }}</li>
<li class="list-group-item">{% trans "Rank" %} : {{ rank }}</li>
{% if user.userprofileinfo.portfolio_site %}
<li class="list-group-item">
<a href="{{ user.userprofileinfo.portfolio_site }}" target="_blank">
{{ user.userprofileinfo.portfolio_site }}
</a>
</li>
{% endif %}
{% if member %}
<li class="list-group-item is-member">{% trans "Status: Member" %}</li>
{% else %}
<li class="list-group-item">{% trans "Status: Visitor" %}</li>
{% endif %}
<li class="list-group-item">{% trans "Registered since" %} {{ user.date_joined|date:"d-m-Y" }}</li>
</ul>
<ul class="list-group">
<li class="list-group-item">{% trans "Categories stats" %}</li>
{% for cat in catsDatas %}
<li class="list-group-item" style="padding-bottom: 3;padding-top: 0;">
<span>{{ cat.0 }}</span>
<div class="progress">
{% if cat.3 == '0' %}
<div class="progress-bar bg-success" role="progressbar" style="width: 0%;color:#d9d9d9;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">0 %</div>
{% else %}
<div class="progress-bar bg-success" role="progressbar" style="width: {{ cat.3 }}%" aria-valuenow="{{ cat.3 }}" aria-valuemin="0" aria-valuemax="100">{{ cat.3 }} %</div>
{% endif %}
</div>
</li>
{% endfor %}
</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>
<script src="https://code.highcharts.com/highcharts.src.js"></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.setOptions(Highcharts.theme);
Highcharts.chart('time-chart', {
title: {
text: 'Points earned for each category'
},
yAxis: {
title: {
text: 'Points earned'
}
},
xAxis: {
type: 'datetime',
labels: {
formatter: function() {
return Highcharts.dateFormat('%d.%b %Y',
this.value);
}
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle'
},
plotOptions: {
pointStart: {{ user.date_joined|timestamp_fromdate }},
series: {
label: {
connectorAllowed: false
},
allowPointSelect: true,
marker: {
enabled: true
}
}
},
series: [
{
name: 'Total',
data: {{ solved|safe }}
},
{% for cat in cats %}
{
name: '{{ cat.name }}',
data: {{ pointDatas|keyvalue:cat.name|safe }},
visible: false,
},
{% endfor %}
],
responsive: {
rules: [{
condition: {
maxWidth: 500
},
chartOptions: {
legend: {
layout: 'horizontal',
align: 'center',
verticalAlign: 'bottom'
}
}
}]
}
});
</script>
{% endblock %}

View File

@ -1,18 +1,10 @@
from django.contrib.sitemaps.views import sitemap
from django.urls import path
from .sitemaps import StaticViewSitemap, EventsSitemap
from . import views
app_name = "events"
sitemaps = {
'events': EventsSitemap(),
'static': StaticViewSitemap(),
}
urlpatterns = [
path('', views.events, name='events'),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
path('<str:event_slug>', views.event, name='event_info'),
path('<str:event_slug>/challenge/<str:chall_slug>', views.chall_event_info, name='event_chall_info'),
path('pwd/<str:event_slug>', views.submit_pwd, name='submit_pwd'),

View File

@ -4,7 +4,6 @@ from django.contrib.auth.models import timezone
from ..forms import submit_flag
from ..models import Event, EventPlayer, Team
from ctfs.models import CTF, CTF_flags, Category
from accounts.models import UserProfileInfo
from django.utils.translation import get_language
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _
@ -41,31 +40,6 @@ def actualize_points(ctf):
player.team.score -= diff
player.team.save()
def compute_bonus_points(ctf):
if not ctf.event.bonus:
return 0
solves = CTF_flags.objects.filter(ctf=ctf)
bonuses = ctf.event.bonus.points.split(',')
if len(solves) >= len(bonuses):
return 0
else:
if ctf.event.bonus.absolute == True:
return int(bonuses[len(solves)])
else:
return int(bonuses[len(solves)]) * ctf.points // 100
def format_bonus_points(ctf):
if not ctf.event.bonus:
return None
bonuses = ctf.event.bonus.points.split(',')
if ctf.event.bonus.absolute == True:
return ''.join([b + ', ' for b in bonuses])[:-2]
return ''.join([str(ctf.points * int(b) // 100) + ', ' for b in bonuses])[:-2]
# Create your views here.
def events(request):
list_events = Event.objects.filter().order_by('-end_date', 'start_date')
@ -75,8 +49,7 @@ def chall_event_info(request, event_slug, chall_slug):
event_info = get_object_or_404(Event, slug=event_slug)
ctf_info = get_object_or_404(CTF, event__slug=event_info.slug, slug=chall_slug)
is_event_manager = request.user.groups.filter(name=event_info.name).exists() or request.user.is_superuser
if timezone.now() < ctf_info.pub_date and not is_event_manager:
if timezone.now() < ctf_info.pub_date:
return redirect('events:event_info', event_slug=event_slug)
eventisover = False
alreadyflag = False
@ -86,7 +59,6 @@ def chall_event_info(request, event_slug, chall_slug):
notsub = False
noteam = False
player = None
bonus = 0
if request.user.is_authenticated and not request.user.is_staff:
player = EventPlayer.objects.filter(event=event_info, user=request.user)
if not player:
@ -107,8 +79,6 @@ def chall_event_info(request, event_slug, chall_slug):
notsub = True
if request.GET.get('NoTeam'):
noteam = True
bonus = request.GET.get('Bonus')
bonus_points = format_bonus_points(ctf_info)
solved_challs = CTF_flags.objects.filter(ctf=ctf_info).order_by('flag_date')
solved_list = []
for s in solved_challs:
@ -118,59 +88,47 @@ def chall_event_info(request, event_slug, chall_slug):
solved_list.append([s.user, s.flag_date])
description = get_description_by_lang(ctf_info)
return render(request, 'events/ctf_info.html', { 'ctf' : ctf_info, 'event':event_info, 'solved_list': solved_list, 'description': description, 'eventisover': eventisover, 'alreadyflag': alreadyflag,
'congrat': congrat, 'wrongflag': wrongflag, 'errorform': errorform, 'notsub': notsub, 'noteam':noteam, 'bonus':bonus, 'bonus_points':bonus_points})
'congrat': congrat, 'wrongflag': wrongflag, 'errorform': errorform, 'notsub': notsub, 'noteam':noteam})
def event(request, event_slug):
event_info = get_object_or_404(Event, slug=event_slug)
IsRegistered = False
wrongpwd = False
alreadyregistered = False
subisover = False
is_event_manager = request.user.groups.filter(name=event_info.name).exists() or request.user.is_superuser
ended = (timezone.now() >= event_info.end_date)
begun = (timezone.now() >= event_info.start_date)
if is_event_manager: # we want to see all the challenges
challenges = CTF.objects.filter(event=event_info).order_by('category', 'points')
else:
challenges = CTF.objects.filter(event=event_info, pub_date__lte=timezone.now()).order_by('category', 'points')
if event_info.team_size == 1:
solved_list = EventPlayer.objects.filter(event=event_info).order_by('-score', 'last_submission_date', 'user__username')
else:
solved_list = Team.objects.filter(event=event_info).order_by('-score', 'last_submission_date', 'name')
if request.GET.get('WrongPassword'):
wrongpwd = True
if request.GET.get('AlreadyRegistered'):
alreadyregistered = True
if request.GET.get('SubscriptionIsOver'):
subisover = True
if request.user.is_authenticated:
try:
EventPlayer.objects.get(event=event_info, user=request.user)
return render(request, 'events/event_info.html', {'event' : event_info, 'IsRegistered': True, 'ctfs': challenges, 'solved_list':solved_list,
'ended': ended, 'begun': begun, 'wrongpwd': wrongpwd, 'alreadyregistered': alreadyregistered, 'subisover': subisover, 'is_event_manager':is_event_manager})
player = EventPlayer.objects.get(event=event_info, user=request.user)
except:
pass
if (event_info.campus.all() or event_info.password) and request.user.is_authenticated is False:
return render(request, 'events/event_pwd.html', {'event' : event_info, 'logged': False})
if event_info.campus.all() and is_event_manager is False:
user = UserProfileInfo.objects.get(user=request.user)
if user.campus is None:
return render(request, 'events/event_pwd.html', {'event' : event_info, 'logged': True, 'wrongpwd': wrongpwd, 'alreadyregistered': alreadyregistered, 'userHasCampus': False, 'campusCanJoin': True})
elif user.campus not in event_info.campus.all():
return render(request, 'events/event_pwd.html', {'event' : event_info, 'logged': True, 'wrongpwd': wrongpwd, 'alreadyregistered': alreadyregistered, 'userHasCampus': True, 'campusCanJoin': False})
if event_info.password and is_event_manager is False:
return render(request, 'events/event_pwd.html', {'event' : event_info, 'logged': True, 'wrongpwd': wrongpwd, 'alreadyregistered': alreadyregistered, 'userHasCampus': True, 'campusCanJoin': True})
return render(request, 'events/event_info.html', {'event' : event_info, 'ctfs': challenges, 'solved_list':solved_list, 'IsRegistered': False,
'ended': ended, 'begun': begun, 'wrongpwd': wrongpwd, 'alreadyregistered': alreadyregistered, 'subisover': subisover, 'is_event_manager':is_event_manager})
player = None
if player:
IsRegistered = True
if event_info.password:
if request.user.is_authenticated:
if request.user.is_staff is False:
if not player:
return render(request, 'events/event_pwd.html', {'event' : event_info, 'logged': True, 'wrongpwd': wrongpwd, 'alreadyregistered': alreadyregistered})
else:
return render(request, 'events/event_pwd.html', {'event' : event_info, 'logged': False, 'wrongpwd': wrongpwd, 'alreadyregistered': alreadyregistered})
ended = False
if timezone.now() >= event_info.end_date:
ended = True
begun = False
if timezone.now() >= event_info.start_date:
begun = True
challenges = CTF.objects.filter(event=event_info, pub_date__lte=timezone.now()).order_by('category', 'points')
if event_info.team_size == 1:
solved_list = EventPlayer.objects.filter(event=event_info).order_by('-score', 'last_submission_date', 'user__username')
else:
solved_list = Team.objects.filter(event=event_info).order_by('-score', 'last_submission_date', 'name')
return render(request, 'events/event_info.html', {'event' : event_info, 'IsRegistered': IsRegistered, 'ctfs': challenges, 'solved_list':solved_list,
'ended': ended, 'begun': begun, 'wrongpwd': wrongpwd, 'alreadyregistered': alreadyregistered, 'subisover': subisover})
@login_required
def submit_event_flag(request, event_slug, chall_slug):
@ -187,19 +145,18 @@ def submit_event_flag(request, event_slug, chall_slug):
if not ctf_info:
response['Location'] += '?ChallengeNotFound=1'
return response
try:
player = EventPlayer.objects.get(event=ev, user=request.user)
except:
player = None
if player:
if ev.team_size > 1 and player.team is None:
response['Location'] += '?NoTeam=1'
return response
if ev.team_size == 1:
if CTF_flags.objects.filter(user=request.user, ctf=ctf_info):
flagged = True
response['Location'] += '?NoTeam=1'
return response
if ev.team_size == 1 and CTF_flags.objects.filter(user=request.user, ctf=ctf_info):
flagged = True
else:
solved_list = CTF_flags.objects.filter(ctf=ctf_info)
for s in solved_list:
@ -214,21 +171,20 @@ def submit_event_flag(request, event_slug, chall_slug):
if form.is_valid():
if ctf_info.flag == request.POST.get('flag'):
bonus = compute_bonus_points(ctf_info)
new = CTF_flags(user = request.user, ctf = ctf_info, flag_date = timezone.now(), bonus = bonus)
new = CTF_flags(user = request.user, ctf = ctf_info, flag_date = timezone.now())
new.save()
if ctf_info.points > 0:
player.last_submission_date = timezone.now()
player.score += (ctf_info.points + bonus)
player.score += ctf_info.points
player.save()
if player.team:
if ctf_info.points > 0:
player.team.last_submission_date = timezone.now()
player.team.score += (ctf_info.points + bonus)
player.team.score += ctf_info.points
player.team.save()
if ev.dynamic:
actualize_points(ctf_info)
response['Location'] += '?Congrat=1&Bonus=' + str(bonus)
response['Location'] += '?Congrat=1'
return response
else:
response['Location'] += '?WrongFlag=1'
@ -263,7 +219,7 @@ def submit_pwd(request, event_slug):
new = EventPlayer(user=request.user, event=ev)
new.save()
return redirect('events:event_info', event_slug=event_slug)
@login_required
def register_to_event(request, event_slug):
@ -310,7 +266,7 @@ def profile(request, user_name, event_slug):
percent = (solved_count / max_count) * 100
catsDatas.append([cat.name, solved_count, max_count, '{:.0f}'.format(percent)])
for flag in solved:
somme += (flag.ctf.points + flag.bonus)
somme += flag.ctf.points
pointDatas[cat.name].append([flag.flag_date.timestamp() * 1000, somme])
solves = CTF_flags.objects.filter(user=user_obj, ctf__event=event_info).order_by('-flag_date')
@ -318,10 +274,10 @@ def profile(request, user_name, event_slug):
somme = 0
solved.append([event_info.start_date.timestamp() * 1000, 0])
for s in solves.reverse():
somme += (s.ctf.points + s.bonus)
somme += s.ctf.points
solved.append([s.flag_date.timestamp() * 1000,somme])
return render(request,'events/profile.html', {'user':user_obj, 'solves':solves,'solved':solved,'catsDatas': catsDatas, 'pointDatas': pointDatas,
'rank': rank, 'score' : player.score, 'cats':cats, 'event': event_info})
return render(request,'accounts/profile.html', {'user':user_obj, 'solves':solves,'solved':solved,'catsDatas': catsDatas, 'pointDatas': pointDatas,
'rank': rank, 'score' : somme, 'cats':cats})

View File

@ -13,13 +13,10 @@ from random import randint
def create_team(request, event_slug):
ev = get_object_or_404(Event, slug=event_slug)
if request.method == 'POST':
teamname = request.POST.get('teamname')
if request.user.is_authenticated and ev.team_size > 1:
if any(c in set('./') for c in teamname):
return render(request, 'events/create_team.html', {'event' : ev, 'logged': True, 'wrongpwd': False, 'registered' : True, 'exist' : False, 'invalid' : True})
if Team.objects.filter(name=teamname, event=ev).exists():
if Team.objects.filter(name=request.POST.get('teamname'), event=ev).exists():
return render(request, 'events/create_team.html', {'event' : ev, 'logged': True, 'wrongpwd': False, 'registered' : True, 'exist' : True})
new = Team(name=teamname, password=request.POST.get('password'), event=ev)
new = Team(name=request.POST.get('teamname'), password=request.POST.get('password'), event=ev)
new.save()
player = EventPlayer.objects.get(user=request.user, event=ev)
player.team = new
@ -118,10 +115,9 @@ def manage_team(request, event_slug):
pname = p_form.cleaned_data['name']
if pname == tname:
pass
elif any(c in set('./') for c in pname):
error = _("Invalid characters in name")
elif Team.objects.filter(name=pname, event=event_info).exists():
error = _("Name already taken.")
else:
if Team.objects.filter(name=pname, event=event_info).exists():
error = _("Name already taken.")
ppassword = p_form.cleaned_data['password']
if error is None:
p_form.save()
@ -141,20 +137,18 @@ def leave_team(request, event_slug):
player = EventPlayer.objects.get(user=request.user, event=event_info)
team = Team.objects.get(event=event_info, name=player.team.name)
team.score -= player.score
team.save()
player.team = None
player.save()
members = EventPlayer.objects.filter(team=team, event=event_info)
if members.count() == 0:
team.delete()
else:
team.score -= player.score
team.save()
solved = CTF_flags.objects.filter(user=player.user, ctf__event=event_info)
player.score = 0
solved.delete()
player.save()
members = EventPlayer.objects.filter(team=team, event=event_info)
if members.count() == 0:
team.delete()
return redirect('events:event_info', event_slug=event_slug)
@login_required

View File

@ -1,12 +0,0 @@
from django.contrib import sitemaps
from django.urls import reverse
class StaticViewSitemap(sitemaps.Sitemap):
priority = 0.5
changefreq = 'monthly'
i18n = True
def items(self):
return ['home', 'cgu']
def location(self, item):
return reverse(item)

View File

@ -4,7 +4,7 @@
{% get_current_language as lang %}
<div class="row">
<div class="col-12 news-card">
<h1>Conditions générales d'utilisation du site 42CTF</h1>
<h2>Conditions générales d'utilisation du site 42CTF</h2>
<h5>Article 1 : Objet</h5>

View File

@ -1,3 +0,0 @@
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" alt="Discord logo"></a> or simply fill this <a href="https://forms.42l.fr/apps/forms/bpmyGR37AR4yHGnC">form</a> and we'll contact you !

View File

@ -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_3'>Simple Question of Logic 3</a></b> (40 points)<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" alt="Discord logo"></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"></a> to propose new challenges !

View File

@ -1,3 +0,0 @@
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" alt="Logo Discord"></a> ou simplement remplir ce <a href="https://forms.42l.fr/apps/forms/bpmyGR37AR4yHGnC">formulaire</a> et nous vous contacterons !

View File

@ -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_3'>Simple Question of Logic 3</a></b> (40 points)<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" alt="Logo Discord"></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"></a> pour proposer des nouveaux challenges !

View File

@ -4,4 +4,4 @@
チャレンジポイントは200から始まり、5より低くなることはありません。<br><br>
これにより、課題の実際の難易度をより良く反映できるようになると期待しています。期間限定イベントは、この変更の影響は受けません。
これにより、チャレンジの実際の難易度をより良く反映できるようになると期待しています。期間限定イベントは、この変更の影響は受けません。

View File

@ -1,3 +0,0 @@
42CTFのソースコードがセルフホストのgitea <a class="footer_imgs" href="https://gitea.42ctf.org" target="_blank"><img src="/static/img/gitea_logo.png" width="30"></a> で公開されたことをお知らせします。<br><br>
プラットフォームへの貢献(開発や翻訳)をしていただける方は、 <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30"></a> にメッセージをお送りいただくか、こちらの <a href="https://forms.42l.fr/apps/forms/bpmyGR37AR4yHGnC">フォーム</a> にご記入いただければご連絡いたします!

View File

@ -1,8 +1,8 @@
SQLインジェクションについて学びたいと思ったことはありませんか<br>
<br>
<b><a class=profile_link href=https://www.42ctf.org/accounts/profile/aldubar>aldubar</a></b>が作成した全く新しい3つの課題を提供します。<br>
<b><a class=profile_link href=https://www.42ctf.org/accounts/profile/aldubar>aldubar</a></b>が作成した全く新しい3つのチャレンジを提供します。<br>
- <b><a href='https://www.42ctf.org/ctfs/web/simple_question_1'>Simple Question of Logic 1</a></b> (10 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>
<br>
新しい課題を提案するために、<a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30"></a>へいつでも連絡できることを忘れないでください!
新しいチャレンジを提案するために、<a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30"></a>へいつでも連絡できることを忘れないでください!

View File

@ -1,14 +1,7 @@
from django.contrib.sitemaps.views import sitemap
from django.urls import path
from .sitemaps import StaticViewSitemap
from . import views
sitemaps = {
'static': StaticViewSitemap(),
}
urlpatterns = [
path('', views.home, name='home'),
path('CGU', views.cgu, name='cgu'),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
]

View File

@ -9,15 +9,12 @@ from django.utils.translation import (
LANGUAGE_SESSION_KEY, check_for_language, get_language,
)
from django.core.files.storage import default_storage
# import datetime
from django.utils import timezone
import datetime
from collections import defaultdict
import operator
def get_weekly_top():
week_ago = timezone.now() - timezone.timedelta(days=7)
week_ago = datetime.datetime.now() - datetime.timedelta(days=7)
weekly_flags = CTF_flags.objects.filter(flag_date__gt=week_ago, ctf__disabled=False, ctf__event=None)
scores = defaultdict(int)
@ -35,6 +32,7 @@ def home(request):
lang_code = request.session[LANGUAGE_SESSION_KEY]
url_translated = translate_url(request.path, lang_code)
if request.path != url_translated:
print("%s\n%s" % (request.path, url_translated))
response = HttpResponseRedirect(url_translated)
return response
news = new.objects.order_by('-pub_date')[:5]

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: 2022-02-10 19:50+0100\n"
"Last-Translator: Clément Hamada <clementhamada@pm.me>\n"
"Language-Team: \n"
@ -17,231 +17,181 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/accounts/templates/accounts/delete.html:8
#: accounts/templates/accounts/delete.html:8
msgid "Delete account"
msgstr "Account löschen"
#: src/accounts/templates/accounts/delete.html:11
#: accounts/templates/accounts/delete.html:11
msgid "Please confirm your password to delete your account."
msgstr "Bitte bestätigen Sie Ihr Passwort, um Ihren Account zu löschen."
#: src/accounts/templates/accounts/delete.html:12
#: accounts/templates/accounts/delete.html:12
msgid "Deleted accounts cannot be recovered."
msgstr "Gelöschte Accounts können nicht wiederhergestellt werden."
#: src/accounts/templates/accounts/delete.html:15
msgid "Password incorrect."
#: accounts/templates/accounts/delete.html:15
msgid "Password inccorect."
msgstr "Falsches Passwort."
#: src/accounts/templates/accounts/delete.html:17
#: accounts/templates/accounts/delete.html:17
msgid "Your account has been deleted."
msgstr "Ihr Account wurde gelöscht."
#: src/accounts/templates/accounts/delete.html:22
#: src/accounts/templates/accounts/login.html:19
#: src/accounts/templates/accounts/register.html:23
#: src/events/templates/events/create_team.html:27
#: src/events/templates/events/join_team.html:32
#: accounts/templates/accounts/delete.html:22
#: accounts/templates/accounts/login.html:19
#: accounts/templates/accounts/register.html:23
#: events/templates/events/create_team.html:27
#: events/templates/events/join_team.html:32
msgid "Password"
msgstr "Passwort"
#: src/accounts/templates/accounts/edit.html:21
#: src/accounts/templates/accounts/login.html:18
#: src/accounts/templates/accounts/register.html:22
#: src/ctfs/templates/ctfs/ctf_info.html:63
#: src/ctfs/templates/ctfs/ctfs_list.html:12
#: src/events/templates/events/ctf_info.html:65
#: src/events/templates/events/event_info.html:64
#: src/scoreboard/templates/scoreboard/scoreboard.html:13
#: accounts/templates/accounts/edit.html:21
#: accounts/templates/accounts/login.html:18
#: accounts/templates/accounts/register.html:22
#: ctfs/templates/ctfs/ctf_info.html:61 ctfs/templates/ctfs/ctfs_list.html:12
#: events/templates/events/ctf_info.html:65
#: events/templates/events/event_info.html:64
#: scoreboard/templates/scoreboard/scoreboard.html:13
msgid "Username"
msgstr "Nutzername"
#: src/accounts/templates/accounts/edit.html:25
#: accounts/templates/accounts/edit.html:25
msgid "Email"
msgstr "Email"
#: src/accounts/templates/accounts/edit.html:30
#: src/ctfs/templates/ctfs/ctf_info.html:64
#: src/events/templates/events/ctf_info.html:66
#: src/events/templates/events/event_info.html:65
#: src/scoreboard/templates/scoreboard/scoreboard.html:14
#: accounts/templates/accounts/edit.html:30
#: ctfs/templates/ctfs/ctf_info.html:62
#: events/templates/events/ctf_info.html:66
#: events/templates/events/event_info.html:65
#: scoreboard/templates/scoreboard/scoreboard.html:14
msgid "Website"
msgstr "Webseite"
#: src/accounts/templates/accounts/edit.html:36
#, fuzzy
#| msgid "Apply"
msgid " Apply"
#: accounts/templates/accounts/edit.html:36
#: events/templates/events/manage_team.html:29
msgid "Apply"
msgstr "Anwenden"
#: src/accounts/templates/accounts/edit.html:45
#, fuzzy
#| msgid "Delete account"
msgid "Connected accounts"
msgstr "Account löschen"
#: src/accounts/templates/accounts/edit.html:53
msgid "Disconnect Discord"
msgstr ""
#: src/accounts/templates/accounts/edit.html:59
msgid "Connect Discord"
msgstr ""
#: src/accounts/templates/accounts/edit.html:68
msgid "Disconnect 42"
msgstr ""
#: src/accounts/templates/accounts/edit.html:74
#: src/events/templates/events/event_pwd.html:19
msgid "Connect 42"
msgstr ""
#: src/accounts/templates/accounts/edit.html:85
#: src/accounts/templates/accounts/profile.html:46
#: src/ctfs/templates/ctfs/ctf_info.html:65
#: src/ctfs/templates/ctfs/ctfs_list.html:13
#: src/events/templates/events/event_info.html:66
#: src/events/templates/events/event_info.html:89
#: src/events/templates/events/manage_team.html:40
#: src/events/templates/events/team.html:45
#: src/scoreboard/templates/scoreboard/scoreboard.html:16
#: accounts/templates/accounts/edit.html:47
#: accounts/templates/accounts/profile.html:46
#: ctfs/templates/ctfs/ctf_info.html:63 ctfs/templates/ctfs/ctfs_list.html:13
#: events/templates/events/event_info.html:66
#: events/templates/events/event_info.html:89
#: events/templates/events/manage_team.html:40
#: events/templates/events/team.html:45
#: scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Score"
msgstr "Punktzahl"
#: src/accounts/templates/accounts/edit.html:93
#: src/accounts/templates/accounts/profile.html:60
#: accounts/templates/accounts/edit.html:55
#: accounts/templates/accounts/profile.html:60
msgid "Registered since"
msgstr "Registriert seit"
#: src/accounts/templates/accounts/edit.html:99
#, fuzzy
#| msgid "Delete my account"
msgid " Delete my account"
#: accounts/templates/accounts/edit.html:61
msgid "Delete my account"
msgstr "Meinen Account löschen"
#: src/accounts/templates/accounts/login.html:13
#: accounts/templates/accounts/login.html:13
msgid "Please, verify your infos."
msgstr "Überprüfen Sie bitte ihre Daten."
#: src/accounts/templates/accounts/login.html:22
#: accounts/templates/accounts/login.html:22
msgid "Reset password"
msgstr "Passwort zurücksetzen"
#: src/accounts/templates/accounts/login.html:31
#: src/accounts/templates/accounts/register.html:37 src/templates/base.html:97
#: src/templates/registration/password_reset_complete.html:18
#: src/templates/registration/password_reset_confirm.html:38
#: src/templates/registration/password_reset_done.html:18
#: src/templates/registration/password_reset_form.html:26
#: accounts/templates/accounts/login.html:31
#: accounts/templates/accounts/register.html:38 templates/base.html:97
#: templates/registration/password_reset_complete.html:18
#: templates/registration/password_reset_confirm.html:38
#: templates/registration/password_reset_done.html:18
#: templates/registration/password_reset_form.html:26
msgid "Login"
msgstr "Anmelden"
#: src/accounts/templates/accounts/login.html:32
#: src/accounts/templates/accounts/register.html:36
#: src/templates/registration/password_reset_complete.html:19
#: src/templates/registration/password_reset_confirm.html:39
#: src/templates/registration/password_reset_done.html:19
#: src/templates/registration/password_reset_form.html:27
#: accounts/templates/accounts/login.html:32
#: accounts/templates/accounts/register.html:37
#: templates/registration/password_reset_complete.html:19
#: templates/registration/password_reset_confirm.html:39
#: templates/registration/password_reset_done.html:19
#: templates/registration/password_reset_form.html:27
msgid "Sign up"
msgstr "Registrieren"
#: src/accounts/templates/accounts/profile.html:10
#: accounts/templates/accounts/profile.html:10
msgid "Challenges Solved by"
msgstr "Herausforderung gelöst von"
#: src/accounts/templates/accounts/profile.html:21
#: src/events/templates/events/team.html:20
#: accounts/templates/accounts/profile.html:21
#: events/templates/events/team.html:20
msgid "Challenge Name"
msgstr "Name der Herausforderung"
#: src/accounts/templates/accounts/profile.html:22
#: src/events/templates/events/team.html:21
#: accounts/templates/accounts/profile.html:22
#: events/templates/events/team.html:21
msgid "Category"
msgstr "Kategorie"
#: src/accounts/templates/accounts/profile.html:23
#: src/events/templates/events/team.html:22
#: accounts/templates/accounts/profile.html:23
#: events/templates/events/team.html:22
msgid "Points"
msgstr "Punkte"
#: src/accounts/templates/accounts/profile.html:24
#: src/ctfs/templates/ctfs/ctf_info.html:66
#: src/events/templates/events/ctf_info.html:67
#: src/events/templates/events/team.html:23
#: accounts/templates/accounts/profile.html:24
#: ctfs/templates/ctfs/ctf_info.html:64
#: events/templates/events/ctf_info.html:67
#: events/templates/events/team.html:23
msgid "Date"
msgstr "Datum"
#: src/accounts/templates/accounts/profile.html:39
#: accounts/templates/accounts/profile.html:39
msgid "It seems that this user has not solved any challenge yet..."
msgstr "Es scheint bisher noch keiner diese Herausforderung gelöst zu haben..."
#: src/accounts/templates/accounts/profile.html:47
#: src/events/templates/events/event_info.html:63
#: src/events/templates/events/event_info.html:87
#: src/events/templates/events/manage_team.html:41
#: src/events/templates/events/team.html:46
#: src/scoreboard/templates/scoreboard/scoreboard.html:12
#: accounts/templates/accounts/profile.html:47
#: events/templates/events/event_info.html:63
#: events/templates/events/event_info.html:87
#: events/templates/events/manage_team.html:41
#: events/templates/events/team.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:12
msgid "Rank"
msgstr "Rang"
#: src/accounts/templates/accounts/profile.html:56
#, fuzzy
#| msgid "Members"
msgid "Member"
msgstr "Mitgliede"
#: accounts/templates/accounts/profile.html:56
msgid "Status: Member"
msgstr "Status: Mitglied"
#: src/accounts/templates/accounts/profile.html:58
#, fuzzy
#| msgid "Status: Visitor"
msgid " Visitor"
#: accounts/templates/accounts/profile.html:58
msgid "Status: Visitor"
msgstr "Status: Gast"
#: src/accounts/templates/accounts/profile.html:64
#: src/events/templates/events/team.html:57
#: accounts/templates/accounts/profile.html:64
#: events/templates/events/team.html:57
msgid "Categories stats"
msgstr "Kategorie Statistiken"
#: src/accounts/templates/accounts/profile.html:81
#, fuzzy
#| msgid "Challenge Name"
msgid "Challenges created"
msgstr "Name der Herausforderung"
#: src/accounts/templates/accounts/profile.html:87
#, fuzzy
#| msgid "It seems that this user has not solved any challenge yet..."
msgid "It seems that this user has not created any challenge yet..."
msgstr "Es scheint bisher noch keiner diese Herausforderung gelöst zu haben..."
#: src/accounts/templates/accounts/register.html:13
#: accounts/templates/accounts/register.html:13
msgid "Welcome !"
msgstr "Willkommen!"
#: src/accounts/templates/accounts/register.html:14
#: accounts/templates/accounts/register.html:14
msgid "Your account has been created."
msgstr "Ihr Account wurde erstellt."
#: src/accounts/templates/accounts/register.html:25
#: accounts/templates/accounts/register.html:25
msgid "Personal website"
msgstr "Persönliche Webseite"
#: src/accounts/templates/accounts/register.html:26
#: src/events/templates/events/event_info.html:119
#: accounts/templates/accounts/register.html:26
#: events/templates/events/event_info.html:119
msgid "Register"
msgstr "Registrieren"
#: src/accounts/views/views.py:33
#: accounts/views/views.py:33
msgid "Your account was inactive."
msgstr "Ihr Account war inaktiv."
#: src/accounts/views/views.py:57
#, fuzzy
#| msgid "Your password must contain at least 8 characters."
msgid "The password must be at least 8 characters long."
msgstr "Ihr Passwort muss mindestens 8 Zeichen enthalten."
#: src/accounts/views/views.py:67
#: accounts/views/views.py:52
msgid ""
"The password must contain at least one letter and at least one digit or "
"punctuation character."
@ -249,442 +199,421 @@ msgstr ""
"Das Passwort muss mindestens einen Buchstaben und eine Ziffer oder einen "
"Satzzeichen enthalten."
#: src/accounts/views/views.py:77
#: accounts/views/views.py:54
msgid "A user with that email already exists."
msgstr "Ein Nutzer mit dieser Email existiert bereits."
#: src/accounts/views/views.py:99
#: accounts/views/views.py:67
msgid "A user with that username already exists."
msgstr "Ein Nutzer mit diesem Nutzernamen existiert bereits."
#: src/accounts/views/views.py:132
#: accounts/views/views.py:95
msgid "Email already taken."
msgstr "Email bereits vergeben."
#: src/accounts/views/views.py:138
#: accounts/views/views.py:101
msgid "Username already taken."
msgstr "Nutzername bereits vergeben."
#: src/accounts/views/views.py:142 src/events/views/teams.py:124
#: accounts/views/views.py:105 events/views/teams.py:124
msgid "Updated."
msgstr "Aktualisiert."
#: src/ctfs/templates/ctfs/ctf_info.html:12
#: src/events/templates/events/ctf_info.html:12
#: ctfs/templates/ctfs/ctf_info.html:10
#: events/templates/events/ctf_info.html:12
msgid "Published date"
msgstr "Veröffentlichungsdatum"
#: src/ctfs/templates/ctfs/ctf_info.html:16
#: ctfs/templates/ctfs/ctf_info.html:14
msgid "Challenge is not yet available."
msgstr "Herausforderung ist noch nicht verfügbar."
#: src/ctfs/templates/ctfs/ctf_info.html:29
#: src/events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr "Herzlichen Glückwunsch!"
#: src/ctfs/templates/ctfs/ctf_info.html:31
#: src/events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr "Schon gelöst"
#: src/ctfs/templates/ctfs/ctf_info.html:33
#: src/ctfs/templates/ctfs/ctf_info.html:42
#: src/events/templates/events/ctf_info.html:36
#: src/events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr "Herausforderung beginnen"
#: src/ctfs/templates/ctfs/ctf_info.html:35
#: src/ctfs/templates/ctfs/ctf_info.html:44
#: src/events/templates/events/ctf_info.html:38
#: src/events/templates/events/ctf_info.html:47
msgid "Download"
msgstr "Herunterladen"
#: src/ctfs/templates/ctfs/ctf_info.html:39
#: src/events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr "Falsche flagge! Sie können es schaffen!"
#: src/ctfs/templates/ctfs/ctf_info.html:58
#: src/events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr "Gelöst von"
#: src/ctfs/templates/ctfs/ctf_info.html:82
#: src/events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr "Bisher hat noch niemand diese Herausforderung gelöst."
#: src/ctfs/templates/ctfs/ctf_info.html:89
#: src/events/templates/events/ctf_info.html:97
msgid "Author"
msgstr "Autor/-in"
#: src/ctfs/templates/ctfs/ctf_info.html:90
#: src/events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr "Belohnungspunkte"
#: src/ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr "Gelöst"
#: src/ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr "Kein CTF in dieser Kategorie verfügbar."
#: src/ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr "Kategorien"
#: src/ctfs/templates/ctfs/ctfs_list.html:48 src/templates/base.html:56
msgid "No category available."
msgstr "Keine Kategorie verfügbar."
#: src/events/templates/events/create_team.html:10
#: src/events/templates/events/join_team.html:10
msgid "This event starts at"
msgstr "Dieses Ereignis beginnt am"
#: src/events/templates/events/create_team.html:17
#: src/events/templates/events/join_team.html:17
msgid "You need to be registered to the event."
msgstr "Sie müssen am Ereignis teilnehmen."
#: src/events/templates/events/create_team.html:20
#: src/events/views/teams.py:120
msgid "Name already taken."
msgstr "Name schon vergeben."
#: src/events/templates/events/create_team.html:26
#: src/events/templates/events/join_team.html:31
#: src/events/templates/events/manage_team.html:22
msgid "Team name"
msgstr "Teamname"
#: src/events/templates/events/create_team.html:28
#: src/events/templates/events/create_team.html:49
#: src/events/templates/events/join_team.html:54
msgid "Create Team"
msgstr "Team erstellen"
#: src/events/templates/events/create_team.html:33
#: src/events/templates/events/event_pwd.html:44
#: src/events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr "Sie müssen angemeldet sein um auf dieses Ereignis zuzugreifen."
#: src/events/templates/events/create_team.html:42
#: src/events/templates/events/event_info.html:113
#: src/events/templates/events/event_pwd.html:52
#: src/events/templates/events/join_team.html:47
msgid "Starts at"
msgstr "Beginnt am"
#: src/events/templates/events/create_team.html:43
#: src/events/templates/events/event_info.html:114
#: src/events/templates/events/event_pwd.html:53
#: src/events/templates/events/join_team.html:48
msgid "Ends at"
msgstr "Endet am"
#: src/events/templates/events/create_team.html:47
#: src/events/templates/events/event_info.html:129
#: src/events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr "Team verwalten"
#: src/events/templates/events/create_team.html:48
#: src/events/templates/events/join_team.html:33
#: src/events/templates/events/join_team.html:53
msgid "Join Team"
msgstr "Team beitreten"
#: src/events/templates/events/create_team.html:53
#: src/events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr "Auto-Matching"
#: src/events/templates/events/create_team.html:57
#: src/events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr "Finde mir einen Team!"
#: src/events/templates/events/ctf_info.html:10
msgid "Event"
msgstr "Ereignis"
#: src/events/templates/events/ctf_info.html:18
#: ctfs/templates/ctfs/ctf_info.html:21
#: events/templates/events/ctf_info.html:18
msgid ""
"No translation available. Please try another language (English or French)."
msgstr ""
"Keine Übersetzung verfügbar. Bitte versuchen Sie es auf einer anderen "
"Sprache noch einmal (Englisch oder Französisch)."
#: src/events/templates/events/ctf_info.html:28
#: src/events/templates/events/event_info.html:18
#: ctfs/templates/ctfs/ctf_info.html:27
#: events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr "Herzlichen Glückwunsch!"
#: ctfs/templates/ctfs/ctf_info.html:29
#: events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr "Schon gelöst"
#: ctfs/templates/ctfs/ctf_info.html:31 ctfs/templates/ctfs/ctf_info.html:40
#: events/templates/events/ctf_info.html:36
#: events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr "Herausforderung beginnen"
#: ctfs/templates/ctfs/ctf_info.html:33 ctfs/templates/ctfs/ctf_info.html:42
#: events/templates/events/ctf_info.html:38
#: events/templates/events/ctf_info.html:47
msgid "Download"
msgstr "Herunterladen"
#: ctfs/templates/ctfs/ctf_info.html:37
#: events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr "Falsche flagge! Sie können es schaffen!"
#: ctfs/templates/ctfs/ctf_info.html:56
#: events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr "Gelöst von"
#: ctfs/templates/ctfs/ctf_info.html:80
#: events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr "Bisher hat noch niemand diese Herausforderung gelöst."
#: ctfs/templates/ctfs/ctf_info.html:87
#: events/templates/events/ctf_info.html:97
msgid "Author"
msgstr "Autor/-in"
#: ctfs/templates/ctfs/ctf_info.html:88
#: events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr "Belohnungspunkte"
#: ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr "Gelöst"
#: ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr "Kein CTF in dieser Kategorie verfügbar."
#: ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr "Kategorien"
#: ctfs/templates/ctfs/ctfs_list.html:48 templates/base.html:54
msgid "No category available."
msgstr "Keine Kategorie verfügbar."
#: events/templates/events/create_team.html:10
#: events/templates/events/join_team.html:10
msgid "This event starts at"
msgstr "Dieses Ereignis beginnt am"
#: events/templates/events/create_team.html:17
#: events/templates/events/join_team.html:17
msgid "You need to be registered to the event."
msgstr "Sie müssen am Ereignis teilnehmen."
#: events/templates/events/create_team.html:20 events/views/teams.py:120
msgid "Name already taken."
msgstr "Name schon vergeben."
#: events/templates/events/create_team.html:26
#: events/templates/events/join_team.html:31
#: events/templates/events/manage_team.html:22
msgid "Team name"
msgstr "Teamname"
#: events/templates/events/create_team.html:28
#: events/templates/events/create_team.html:49
#: events/templates/events/join_team.html:54
msgid "Create Team"
msgstr "Team erstellen"
#: events/templates/events/create_team.html:33
#: events/templates/events/event_pwd.html:28
#: events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr "Sie müssen angemeldet sein um auf dieses Ereignis zuzugreifen."
#: events/templates/events/create_team.html:42
#: events/templates/events/event_info.html:113
#: events/templates/events/event_pwd.html:36
#: events/templates/events/join_team.html:47
msgid "Starts at"
msgstr "Beginnt am"
#: events/templates/events/create_team.html:43
#: events/templates/events/event_info.html:114
#: events/templates/events/event_pwd.html:37
#: events/templates/events/join_team.html:48
msgid "Ends at"
msgstr "Endet am"
#: events/templates/events/create_team.html:47
#: events/templates/events/event_info.html:129
#: events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr "Team verwalten"
#: events/templates/events/create_team.html:48
#: events/templates/events/join_team.html:33
#: events/templates/events/join_team.html:53
msgid "Join Team"
msgstr "Team beitreten"
#: events/templates/events/create_team.html:53
#: events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr "Auto-Matching"
#: events/templates/events/create_team.html:57
#: events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr "Finde mir einen Team!"
#: events/templates/events/ctf_info.html:10
msgid "Event"
msgstr "Ereignis"
#: events/templates/events/ctf_info.html:28
#: events/templates/events/event_info.html:18
msgid "This event is over."
msgstr "Dieses Ereignis hat bereits geendet."
#: src/events/templates/events/ctf_info.html:30
#: events/templates/events/ctf_info.html:30
msgid "Error while processing your request. (Invalid Form)"
msgstr "Fehler während der Verarbeitung ihrer Anfrage. (Ungültiges Formular)"
#: src/events/templates/events/ctf_info.html:32
#: events/templates/events/ctf_info.html:32
msgid "You must register to the event before submitting flags."
msgstr ""
#: src/events/templates/events/ctf_info.html:34
#: events/templates/events/ctf_info.html:34
msgid ""
"This is a team event, please create or join a team before submitting flags."
msgstr ""
#: src/events/templates/events/event_info.html:9
#: events/templates/events/event_info.html:9
msgid "Subscriptions is over."
msgstr "Die Registrierung hat geendet."
#: src/events/templates/events/event_info.html:12
#: src/events/templates/events/event_pwd.html:33
#: events/templates/events/event_info.html:12
#: events/templates/events/event_pwd.html:18
msgid "You're already registered to this event."
msgstr "Sie haben sich schon für dieses Ereignis registriert."
#: src/events/templates/events/event_info.html:20
#: src/events/templates/events/event_pwd.html:9
#: events/templates/events/event_info.html:20
#: events/templates/events/event_pwd.html:9
msgid "This event start at"
msgstr "Dieses Ereignis startet am"
#: src/events/templates/events/event_info.html:30
#: events/templates/events/event_info.html:30
msgid "Challenges"
msgstr "Herausforderungen"
#: src/events/templates/events/event_info.html:47
#: events/templates/events/event_info.html:47
msgid "No challenges available."
msgstr "Keine Herausforderung verfügbar."
#: src/events/templates/events/event_info.html:51
#: events/templates/events/event_info.html:51
msgid "The event has not started yet."
msgstr "Das Ereignis hat noch nicht begonnen."
#: src/events/templates/events/event_info.html:57
#: events/templates/events/event_info.html:57
msgid "ScoreBoard"
msgstr "Punktestand"
#: src/events/templates/events/event_info.html:88
#: events/templates/events/event_info.html:88
msgid "Team"
msgstr "Team"
#: src/events/templates/events/event_info.html:106
#: events/templates/events/event_info.html:106
msgid "No one have earn point yet, you gonna be the first ?"
msgstr "Niemand hat bisher Punkte verdient, werden Sie der erste sein?"
#: src/events/templates/events/event_pwd.html:16
msgid ""
"This event is reserved for one or more 42 campuses. If you have not "
"connected your intranet to 42CTF, you can do so with this button: "
msgstr ""
#: src/events/templates/events/event_pwd.html:25
msgid ""
"This event is reserved for one or more 42 campuses. And unfortunately your "
"campus can't participate. Do not hesitate to contact us to organize an event "
"on your campus!"
msgstr ""
#: src/events/templates/events/event_pwd.html:30
#: src/events/templates/events/join_team.html:22
#: events/templates/events/event_pwd.html:15
#: events/templates/events/join_team.html:22
msgid "Wrong password submited."
msgstr "Falsches Passwort eingetragen."
#: src/events/templates/events/event_pwd.html:35
#: events/templates/events/event_pwd.html:20
msgid "This event is password protected"
msgstr "Dieses Ereignis ist passwortgeschützt"
#: src/events/templates/events/event_pwd.html:36
#: events/templates/events/event_pwd.html:21
msgid "You need to submit the event password to gain access to this event."
msgstr "Sie müssen das Ereignispasswort eintragen um darauf zuzugreifen."
#: src/events/templates/events/events_list.html:6 src/templates/base.html:65
#: events/templates/events/events_list.html:6 templates/base.html:61
msgid "Events"
msgstr "Ereignisse"
#: src/events/templates/events/events_list.html:38
#: events/templates/events/events_list.html:38
msgid "See more"
msgstr "Weiter"
#: src/events/templates/events/events_list.html:44
#: events/templates/events/events_list.html:44
msgid "No events available."
msgstr "Keine Ereignisse verfügbar."
#: src/events/templates/events/join_team.html:20
#: events/templates/events/join_team.html:20
msgid "Team does not exist."
msgstr "Team existiert nicht."
#: src/events/templates/events/join_team.html:24
#: events/templates/events/join_team.html:24
msgid "Maximum size reached."
msgstr "Maximale Mitgliederanzahl erreicht."
#: src/events/templates/events/manage_team.html:26
#: events/templates/events/manage_team.html:26
msgid "Team password"
msgstr "Teampasswort"
#: src/events/templates/events/manage_team.html:29
msgid "Apply"
msgstr "Anwenden"
#: src/events/templates/events/manage_team.html:44
#: src/events/templates/events/team.html:49
#: events/templates/events/manage_team.html:44
#: events/templates/events/team.html:49
msgid "Members"
msgstr "Mitgliede"
#: src/events/templates/events/manage_team.html:52
#: events/templates/events/manage_team.html:52
msgid "Leave Team"
msgstr "Team verlassen"
#: src/events/templates/events/manage_team.html:59
#: events/templates/events/manage_team.html:59
#, fuzzy
#| msgid "Auto-matching"
msgid "Open to automatching"
msgstr "Auto-Matching"
#: src/events/templates/events/manage_team.html:66
#: events/templates/events/manage_team.html:66
#, fuzzy
#| msgid "Auto-matching"
msgid "Close to automatching"
msgstr "Auto-Matching"
#: src/events/templates/events/team.html:38
#: events/templates/events/team.html:38
msgid "It seems that this team has not solved any challenge yet..."
msgstr "Dieses Team scheint noch keine Herausforderung gelöst zu haben..."
#: src/home/templates/home/home.html:21
#: home/templates/home/home.html:21
msgid "Weekly Top 5"
msgstr "Top 5 der Woche"
#: src/home/templates/home/home.html:48
#: home/templates/home/home.html:48
msgid "No article available."
msgstr "Kein Artikel verfügbar."
#: src/home/templates/home/home.html:53
#: home/templates/home/home.html:53
msgid "Latest challenges added"
msgstr "Neue Herausforderungen"
#: src/home/templates/home/home.html:58
#: home/templates/home/home.html:58
msgid "points"
msgstr "Punkte"
#: src/home/templates/home/home.html:62
#: home/templates/home/home.html:62
msgid "No ctf available."
msgstr "Kein CTF verfügbar."
#: src/home/templates/home/home.html:66
#: home/templates/home/home.html:66
msgid "Latest Flags"
msgstr "Letzte Flaggen"
#: src/home/templates/home/home.html:80
#: home/templates/home/home.html:80
msgid "Flags"
msgstr "Flaggen"
#: src/home/templates/home/home.html:86
#: home/templates/home/home.html:86
msgid "Users"
msgstr "Nutzer"
#: src/project/settings.py:116
#: project/settings.py:115
msgid "English"
msgstr "Englisch"
#: src/project/settings.py:117
#: project/settings.py:116
msgid "German"
msgstr "Deutsch"
#: src/project/settings.py:118
#: project/settings.py:117
msgid "French"
msgstr "Französisch"
#: src/project/settings.py:119
#: project/settings.py:118
msgid "Russian"
msgstr "Russisch"
#: src/project/settings.py:120
#: project/settings.py:119
msgid "Japanese"
msgstr ""
#: src/project/settings.py:121
#: project/settings.py:120
msgid "Spanish"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Campus"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:38
msgid "First"
msgstr "Erste"
#: src/scoreboard/templates/scoreboard/scoreboard.html:47
#: scoreboard/templates/scoreboard/scoreboard.html:39
msgid "Previous"
msgstr "Vorherige"
#: src/scoreboard/templates/scoreboard/scoreboard.html:51
#: scoreboard/templates/scoreboard/scoreboard.html:43
msgid "Page "
msgstr "Seite "
#: src/scoreboard/templates/scoreboard/scoreboard.html:55
#: scoreboard/templates/scoreboard/scoreboard.html:47
msgid "Next"
msgstr "Nächste"
#: src/scoreboard/templates/scoreboard/scoreboard.html:56
#: scoreboard/templates/scoreboard/scoreboard.html:48
msgid "Last"
msgstr "Letzte"
#: src/templates/base.html:62
#: templates/base.html:59
msgid "Scoreboard"
msgstr "Punktestand"
#: src/templates/base.html:83
#, fuzzy
#| msgid "Become a Patron!"
msgid "Become a member"
msgstr "Unterstützen Sie uns!"
#: templates/base.html:64
msgid "Resources"
msgstr "Ressourcen"
#: src/templates/base.html:93
#: templates/base.html:93
msgid "Logout"
msgstr "Abmelden"
#: src/templates/base.html:100
#: templates/base.html:100
msgid "Sign Up"
msgstr "Registrieren"
#: src/templates/registration/password_reset_complete.html:11
#: templates/base.html:135
msgid "Become a Patron!"
msgstr "Unterstützen Sie uns!"
#: templates/registration/password_reset_complete.html:11
msgid "Your new password has been set."
msgstr "Ihr neues Passwort wurde festgelegt."
#: src/templates/registration/password_reset_confirm.html:20
#: templates/registration/password_reset_confirm.html:20
msgid "Your password cant be too similar to your other personal information."
msgstr "Ihr Passwort kann nicht zu ähnlich zu ihren persönlichen Daten sein."
#: src/templates/registration/password_reset_confirm.html:21
#: templates/registration/password_reset_confirm.html:21
msgid "Your password must contain at least 8 characters."
msgstr "Ihr Passwort muss mindestens 8 Zeichen enthalten."
#: src/templates/registration/password_reset_confirm.html:22
#: templates/registration/password_reset_confirm.html:22
msgid "Your password cant be a commonly used password."
msgstr "Ihr Passwort kann nicht ein häufig benutztes Passwort sein."
#: src/templates/registration/password_reset_confirm.html:23
#: templates/registration/password_reset_confirm.html:23
msgid "Your password cant be entirely numeric."
msgstr "Ihr Passwort kann nicht nur Ziffern enthalten."
#: src/templates/registration/password_reset_confirm.html:26
#: templates/registration/password_reset_confirm.html:26
msgid "Confirm"
msgstr "Bestätigen"
#: src/templates/registration/password_reset_confirm.html:28
#: templates/registration/password_reset_confirm.html:28
msgid "Submit"
msgstr "Einreichen"
#: src/templates/registration/password_reset_done.html:11
#: templates/registration/password_reset_done.html:11
msgid ""
"We've emailed you instructions for setting your password. You should receive "
"the email shortly!"
@ -692,16 +621,10 @@ msgstr ""
"Wir haben Ihnen eine Anleitung um Ihren Passwort zurückzusetzen per Email "
"geschickt. Sie sollten sie in Kürze empfangen!"
#: src/templates/registration/password_reset_form.html:16
#: templates/registration/password_reset_form.html:16
msgid "Reset"
msgstr "Zurücksetzen"
#~ msgid "Status: Member"
#~ msgstr "Status: Mitglied"
#~ msgid "Resources"
#~ msgstr "Ressourcen"
#~ msgid ""
#~ "Error: you're not registered to this event, so you can't register scores, "
#~ "fucking logic."

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,653 +18,600 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/accounts/templates/accounts/delete.html:8
#: accounts/templates/accounts/delete.html:8
msgid "Delete account"
msgstr ""
#: src/accounts/templates/accounts/delete.html:11
#: accounts/templates/accounts/delete.html:11
msgid "Please confirm your password to delete your account."
msgstr ""
#: src/accounts/templates/accounts/delete.html:12
#: accounts/templates/accounts/delete.html:12
msgid "Deleted accounts cannot be recovered."
msgstr ""
#: src/accounts/templates/accounts/delete.html:15
msgid "Password incorrect."
#: accounts/templates/accounts/delete.html:15
msgid "Password inccorect."
msgstr ""
#: src/accounts/templates/accounts/delete.html:17
#: accounts/templates/accounts/delete.html:17
msgid "Your account has been deleted."
msgstr ""
#: src/accounts/templates/accounts/delete.html:22
#: src/accounts/templates/accounts/login.html:19
#: src/accounts/templates/accounts/register.html:23
#: src/events/templates/events/create_team.html:27
#: src/events/templates/events/join_team.html:32
#: accounts/templates/accounts/delete.html:22
#: accounts/templates/accounts/login.html:19
#: accounts/templates/accounts/register.html:23
#: events/templates/events/create_team.html:27
#: events/templates/events/join_team.html:32
msgid "Password"
msgstr ""
#: src/accounts/templates/accounts/edit.html:21
#: src/accounts/templates/accounts/login.html:18
#: src/accounts/templates/accounts/register.html:22
#: src/ctfs/templates/ctfs/ctf_info.html:63
#: src/ctfs/templates/ctfs/ctfs_list.html:12
#: src/events/templates/events/ctf_info.html:65
#: src/events/templates/events/event_info.html:64
#: src/scoreboard/templates/scoreboard/scoreboard.html:13
#: accounts/templates/accounts/edit.html:21
#: accounts/templates/accounts/login.html:18
#: accounts/templates/accounts/register.html:22
#: ctfs/templates/ctfs/ctf_info.html:61 ctfs/templates/ctfs/ctfs_list.html:12
#: events/templates/events/ctf_info.html:65
#: events/templates/events/event_info.html:64
#: scoreboard/templates/scoreboard/scoreboard.html:13
msgid "Username"
msgstr ""
#: src/accounts/templates/accounts/edit.html:25
#: accounts/templates/accounts/edit.html:25
msgid "Email"
msgstr ""
#: src/accounts/templates/accounts/edit.html:30
#: src/ctfs/templates/ctfs/ctf_info.html:64
#: src/events/templates/events/ctf_info.html:66
#: src/events/templates/events/event_info.html:65
#: src/scoreboard/templates/scoreboard/scoreboard.html:14
#: accounts/templates/accounts/edit.html:30
#: ctfs/templates/ctfs/ctf_info.html:62
#: events/templates/events/ctf_info.html:66
#: events/templates/events/event_info.html:65
#: scoreboard/templates/scoreboard/scoreboard.html:14
msgid "Website"
msgstr ""
#: src/accounts/templates/accounts/edit.html:36
msgid " Apply"
#: accounts/templates/accounts/edit.html:36
#: events/templates/events/manage_team.html:29
msgid "Apply"
msgstr ""
#: src/accounts/templates/accounts/edit.html:45
msgid "Connected accounts"
msgstr ""
#: src/accounts/templates/accounts/edit.html:53
msgid "Disconnect Discord"
msgstr ""
#: src/accounts/templates/accounts/edit.html:59
msgid "Connect Discord"
msgstr ""
#: src/accounts/templates/accounts/edit.html:68
msgid "Disconnect 42"
msgstr ""
#: src/accounts/templates/accounts/edit.html:74
#: src/events/templates/events/event_pwd.html:19
msgid "Connect 42"
msgstr ""
#: src/accounts/templates/accounts/edit.html:85
#: src/accounts/templates/accounts/profile.html:46
#: src/ctfs/templates/ctfs/ctf_info.html:65
#: src/ctfs/templates/ctfs/ctfs_list.html:13
#: src/events/templates/events/event_info.html:66
#: src/events/templates/events/event_info.html:89
#: src/events/templates/events/manage_team.html:40
#: src/events/templates/events/team.html:45
#: src/scoreboard/templates/scoreboard/scoreboard.html:16
#: accounts/templates/accounts/edit.html:47
#: accounts/templates/accounts/profile.html:46
#: ctfs/templates/ctfs/ctf_info.html:63 ctfs/templates/ctfs/ctfs_list.html:13
#: events/templates/events/event_info.html:66
#: events/templates/events/event_info.html:89
#: events/templates/events/manage_team.html:40
#: events/templates/events/team.html:45
#: scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Score"
msgstr ""
#: src/accounts/templates/accounts/edit.html:93
#: src/accounts/templates/accounts/profile.html:60
#: accounts/templates/accounts/edit.html:55
#: accounts/templates/accounts/profile.html:60
msgid "Registered since"
msgstr ""
#: src/accounts/templates/accounts/edit.html:99
msgid " Delete my account"
#: accounts/templates/accounts/edit.html:61
msgid "Delete my account"
msgstr ""
#: src/accounts/templates/accounts/login.html:13
#: accounts/templates/accounts/login.html:13
msgid "Please, verify your infos."
msgstr ""
#: src/accounts/templates/accounts/login.html:22
#: accounts/templates/accounts/login.html:22
msgid "Reset password"
msgstr ""
#: src/accounts/templates/accounts/login.html:31
#: src/accounts/templates/accounts/register.html:37 src/templates/base.html:97
#: src/templates/registration/password_reset_complete.html:18
#: src/templates/registration/password_reset_confirm.html:38
#: src/templates/registration/password_reset_done.html:18
#: src/templates/registration/password_reset_form.html:26
#: accounts/templates/accounts/login.html:31
#: accounts/templates/accounts/register.html:38 templates/base.html:97
#: templates/registration/password_reset_complete.html:18
#: templates/registration/password_reset_confirm.html:38
#: templates/registration/password_reset_done.html:18
#: templates/registration/password_reset_form.html:26
msgid "Login"
msgstr ""
#: src/accounts/templates/accounts/login.html:32
#: src/accounts/templates/accounts/register.html:36
#: src/templates/registration/password_reset_complete.html:19
#: src/templates/registration/password_reset_confirm.html:39
#: src/templates/registration/password_reset_done.html:19
#: src/templates/registration/password_reset_form.html:27
#: accounts/templates/accounts/login.html:32
#: accounts/templates/accounts/register.html:37
#: templates/registration/password_reset_complete.html:19
#: templates/registration/password_reset_confirm.html:39
#: templates/registration/password_reset_done.html:19
#: templates/registration/password_reset_form.html:27
msgid "Sign up"
msgstr ""
#: src/accounts/templates/accounts/profile.html:10
#: accounts/templates/accounts/profile.html:10
msgid "Challenges Solved by"
msgstr ""
#: src/accounts/templates/accounts/profile.html:21
#: src/events/templates/events/team.html:20
#: accounts/templates/accounts/profile.html:21
#: events/templates/events/team.html:20
msgid "Challenge Name"
msgstr ""
#: src/accounts/templates/accounts/profile.html:22
#: src/events/templates/events/team.html:21
#: accounts/templates/accounts/profile.html:22
#: events/templates/events/team.html:21
msgid "Category"
msgstr ""
#: src/accounts/templates/accounts/profile.html:23
#: src/events/templates/events/team.html:22
#: accounts/templates/accounts/profile.html:23
#: events/templates/events/team.html:22
msgid "Points"
msgstr ""
#: src/accounts/templates/accounts/profile.html:24
#: src/ctfs/templates/ctfs/ctf_info.html:66
#: src/events/templates/events/ctf_info.html:67
#: src/events/templates/events/team.html:23
#: accounts/templates/accounts/profile.html:24
#: ctfs/templates/ctfs/ctf_info.html:64
#: events/templates/events/ctf_info.html:67
#: events/templates/events/team.html:23
msgid "Date"
msgstr ""
#: src/accounts/templates/accounts/profile.html:39
#: accounts/templates/accounts/profile.html:39
msgid "It seems that this user has not solved any challenge yet..."
msgstr ""
#: src/accounts/templates/accounts/profile.html:47
#: src/events/templates/events/event_info.html:63
#: src/events/templates/events/event_info.html:87
#: src/events/templates/events/manage_team.html:41
#: src/events/templates/events/team.html:46
#: src/scoreboard/templates/scoreboard/scoreboard.html:12
#: accounts/templates/accounts/profile.html:47
#: events/templates/events/event_info.html:63
#: events/templates/events/event_info.html:87
#: events/templates/events/manage_team.html:41
#: events/templates/events/team.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:12
msgid "Rank"
msgstr ""
#: src/accounts/templates/accounts/profile.html:56
msgid "Member"
#: accounts/templates/accounts/profile.html:56
msgid "Status: Member"
msgstr ""
#: src/accounts/templates/accounts/profile.html:58
msgid " Visitor"
#: accounts/templates/accounts/profile.html:58
msgid "Status: Visitor"
msgstr ""
#: src/accounts/templates/accounts/profile.html:64
#: src/events/templates/events/team.html:57
#: accounts/templates/accounts/profile.html:64
#: events/templates/events/team.html:57
msgid "Categories stats"
msgstr ""
#: src/accounts/templates/accounts/profile.html:81
msgid "Challenges created"
msgstr ""
#: src/accounts/templates/accounts/profile.html:87
msgid "It seems that this user has not created any challenge yet..."
msgstr ""
#: src/accounts/templates/accounts/register.html:13
#: accounts/templates/accounts/register.html:13
msgid "Welcome !"
msgstr ""
#: src/accounts/templates/accounts/register.html:14
#: accounts/templates/accounts/register.html:14
msgid "Your account has been created."
msgstr ""
#: src/accounts/templates/accounts/register.html:25
#: accounts/templates/accounts/register.html:25
msgid "Personal website"
msgstr ""
#: src/accounts/templates/accounts/register.html:26
#: src/events/templates/events/event_info.html:119
#: accounts/templates/accounts/register.html:26
#: events/templates/events/event_info.html:119
msgid "Register"
msgstr ""
#: src/accounts/views/views.py:33
#: accounts/views/views.py:33
msgid "Your account was inactive."
msgstr ""
#: src/accounts/views/views.py:57
msgid "The password must be at least 8 characters long."
msgstr ""
#: src/accounts/views/views.py:67
#: accounts/views/views.py:52
msgid ""
"The password must contain at least one letter and at least one digit or "
"punctuation character."
msgstr ""
#: src/accounts/views/views.py:77
#: accounts/views/views.py:54
msgid "A user with that email already exists."
msgstr ""
#: src/accounts/views/views.py:99
#: accounts/views/views.py:67
msgid "A user with that username already exists."
msgstr ""
#: src/accounts/views/views.py:132
#: accounts/views/views.py:95
msgid "Email already taken."
msgstr ""
#: src/accounts/views/views.py:138
#: accounts/views/views.py:101
msgid "Username already taken."
msgstr ""
#: src/accounts/views/views.py:142 src/events/views/teams.py:124
#: accounts/views/views.py:105 events/views/teams.py:124
msgid "Updated."
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:12
#: src/events/templates/events/ctf_info.html:12
#: ctfs/templates/ctfs/ctf_info.html:10
#: events/templates/events/ctf_info.html:12
msgid "Published date"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:16
#: ctfs/templates/ctfs/ctf_info.html:14
msgid "Challenge is not yet available."
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:29
#: src/events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:31
#: src/events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:33
#: src/ctfs/templates/ctfs/ctf_info.html:42
#: src/events/templates/events/ctf_info.html:36
#: src/events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:35
#: src/ctfs/templates/ctfs/ctf_info.html:44
#: src/events/templates/events/ctf_info.html:38
#: src/events/templates/events/ctf_info.html:47
msgid "Download"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:39
#: src/events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:58
#: src/events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:82
#: src/events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:89
#: src/events/templates/events/ctf_info.html:97
msgid "Author"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:90
#: src/events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr ""
#: src/ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr ""
#: src/ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr ""
#: src/ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr ""
#: src/ctfs/templates/ctfs/ctfs_list.html:48 src/templates/base.html:56
msgid "No category available."
msgstr ""
#: src/events/templates/events/create_team.html:10
#: src/events/templates/events/join_team.html:10
msgid "This event starts at"
msgstr ""
#: src/events/templates/events/create_team.html:17
#: src/events/templates/events/join_team.html:17
msgid "You need to be registered to the event."
msgstr ""
#: src/events/templates/events/create_team.html:20
#: src/events/views/teams.py:120
msgid "Name already taken."
msgstr ""
#: src/events/templates/events/create_team.html:26
#: src/events/templates/events/join_team.html:31
#: src/events/templates/events/manage_team.html:22
msgid "Team name"
msgstr ""
#: src/events/templates/events/create_team.html:28
#: src/events/templates/events/create_team.html:49
#: src/events/templates/events/join_team.html:54
msgid "Create Team"
msgstr ""
#: src/events/templates/events/create_team.html:33
#: src/events/templates/events/event_pwd.html:44
#: src/events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr ""
#: src/events/templates/events/create_team.html:42
#: src/events/templates/events/event_info.html:113
#: src/events/templates/events/event_pwd.html:52
#: src/events/templates/events/join_team.html:47
msgid "Starts at"
msgstr ""
#: src/events/templates/events/create_team.html:43
#: src/events/templates/events/event_info.html:114
#: src/events/templates/events/event_pwd.html:53
#: src/events/templates/events/join_team.html:48
msgid "Ends at"
msgstr ""
#: src/events/templates/events/create_team.html:47
#: src/events/templates/events/event_info.html:129
#: src/events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr ""
#: src/events/templates/events/create_team.html:48
#: src/events/templates/events/join_team.html:33
#: src/events/templates/events/join_team.html:53
msgid "Join Team"
msgstr ""
#: src/events/templates/events/create_team.html:53
#: src/events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr ""
#: src/events/templates/events/create_team.html:57
#: src/events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr ""
#: src/events/templates/events/ctf_info.html:10
msgid "Event"
msgstr ""
#: src/events/templates/events/ctf_info.html:18
#: ctfs/templates/ctfs/ctf_info.html:21
#: events/templates/events/ctf_info.html:18
msgid ""
"No translation available. Please try another language (English or French)."
msgstr ""
#: src/events/templates/events/ctf_info.html:28
#: src/events/templates/events/event_info.html:18
#: ctfs/templates/ctfs/ctf_info.html:27
#: events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:29
#: events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:31 ctfs/templates/ctfs/ctf_info.html:40
#: events/templates/events/ctf_info.html:36
#: events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:33 ctfs/templates/ctfs/ctf_info.html:42
#: events/templates/events/ctf_info.html:38
#: events/templates/events/ctf_info.html:47
msgid "Download"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:37
#: events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:56
#: events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:80
#: events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:87
#: events/templates/events/ctf_info.html:97
msgid "Author"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:88
#: events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr ""
#: ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr ""
#: ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr ""
#: ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr ""
#: ctfs/templates/ctfs/ctfs_list.html:48 templates/base.html:54
msgid "No category available."
msgstr ""
#: events/templates/events/create_team.html:10
#: events/templates/events/join_team.html:10
msgid "This event starts at"
msgstr ""
#: events/templates/events/create_team.html:17
#: events/templates/events/join_team.html:17
msgid "You need to be registered to the event."
msgstr ""
#: events/templates/events/create_team.html:20 events/views/teams.py:120
msgid "Name already taken."
msgstr ""
#: events/templates/events/create_team.html:26
#: events/templates/events/join_team.html:31
#: events/templates/events/manage_team.html:22
msgid "Team name"
msgstr ""
#: events/templates/events/create_team.html:28
#: events/templates/events/create_team.html:49
#: events/templates/events/join_team.html:54
msgid "Create Team"
msgstr ""
#: events/templates/events/create_team.html:33
#: events/templates/events/event_pwd.html:28
#: events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr ""
#: events/templates/events/create_team.html:42
#: events/templates/events/event_info.html:113
#: events/templates/events/event_pwd.html:36
#: events/templates/events/join_team.html:47
msgid "Starts at"
msgstr ""
#: events/templates/events/create_team.html:43
#: events/templates/events/event_info.html:114
#: events/templates/events/event_pwd.html:37
#: events/templates/events/join_team.html:48
msgid "Ends at"
msgstr ""
#: events/templates/events/create_team.html:47
#: events/templates/events/event_info.html:129
#: events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr ""
#: events/templates/events/create_team.html:48
#: events/templates/events/join_team.html:33
#: events/templates/events/join_team.html:53
msgid "Join Team"
msgstr ""
#: events/templates/events/create_team.html:53
#: events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr ""
#: events/templates/events/create_team.html:57
#: events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr ""
#: events/templates/events/ctf_info.html:10
msgid "Event"
msgstr ""
#: events/templates/events/ctf_info.html:28
#: events/templates/events/event_info.html:18
msgid "This event is over."
msgstr ""
#: src/events/templates/events/ctf_info.html:30
#: events/templates/events/ctf_info.html:30
msgid "Error while processing your request. (Invalid Form)"
msgstr ""
#: src/events/templates/events/ctf_info.html:32
#: events/templates/events/ctf_info.html:32
msgid "You must register to the event before submitting flags."
msgstr ""
#: src/events/templates/events/ctf_info.html:34
#: events/templates/events/ctf_info.html:34
msgid ""
"This is a team event, please create or join a team before submitting flags."
msgstr ""
#: src/events/templates/events/event_info.html:9
#: events/templates/events/event_info.html:9
msgid "Subscriptions is over."
msgstr ""
#: src/events/templates/events/event_info.html:12
#: src/events/templates/events/event_pwd.html:33
#: events/templates/events/event_info.html:12
#: events/templates/events/event_pwd.html:18
msgid "You're already registered to this event."
msgstr ""
#: src/events/templates/events/event_info.html:20
#: src/events/templates/events/event_pwd.html:9
#: events/templates/events/event_info.html:20
#: events/templates/events/event_pwd.html:9
msgid "This event start at"
msgstr ""
#: src/events/templates/events/event_info.html:30
#: events/templates/events/event_info.html:30
msgid "Challenges"
msgstr ""
#: src/events/templates/events/event_info.html:47
#: events/templates/events/event_info.html:47
msgid "No challenges available."
msgstr ""
#: src/events/templates/events/event_info.html:51
#: events/templates/events/event_info.html:51
msgid "The event has not started yet."
msgstr ""
#: src/events/templates/events/event_info.html:57
#: events/templates/events/event_info.html:57
msgid "ScoreBoard"
msgstr ""
#: src/events/templates/events/event_info.html:88
#: events/templates/events/event_info.html:88
msgid "Team"
msgstr ""
#: src/events/templates/events/event_info.html:106
#: events/templates/events/event_info.html:106
msgid "No one have earn point yet, you gonna be the first ?"
msgstr ""
#: src/events/templates/events/event_pwd.html:16
msgid ""
"This event is reserved for one or more 42 campuses. If you have not "
"connected your intranet to 42CTF, you can do so with this button: "
msgstr ""
#: src/events/templates/events/event_pwd.html:25
msgid ""
"This event is reserved for one or more 42 campuses. And unfortunately your "
"campus can't participate. Do not hesitate to contact us to organize an event "
"on your campus!"
msgstr ""
#: src/events/templates/events/event_pwd.html:30
#: src/events/templates/events/join_team.html:22
#: events/templates/events/event_pwd.html:15
#: events/templates/events/join_team.html:22
msgid "Wrong password submited."
msgstr ""
#: src/events/templates/events/event_pwd.html:35
#: events/templates/events/event_pwd.html:20
msgid "This event is password protected"
msgstr ""
#: src/events/templates/events/event_pwd.html:36
#: events/templates/events/event_pwd.html:21
msgid "You need to submit the event password to gain access to this event."
msgstr ""
#: src/events/templates/events/events_list.html:6 src/templates/base.html:65
#: events/templates/events/events_list.html:6 templates/base.html:61
msgid "Events"
msgstr ""
#: src/events/templates/events/events_list.html:38
#: events/templates/events/events_list.html:38
msgid "See more"
msgstr ""
#: src/events/templates/events/events_list.html:44
#: events/templates/events/events_list.html:44
msgid "No events available."
msgstr ""
#: src/events/templates/events/join_team.html:20
#: events/templates/events/join_team.html:20
msgid "Team does not exist."
msgstr ""
#: src/events/templates/events/join_team.html:24
#: events/templates/events/join_team.html:24
msgid "Maximum size reached."
msgstr ""
#: src/events/templates/events/manage_team.html:26
#: events/templates/events/manage_team.html:26
msgid "Team password"
msgstr ""
#: src/events/templates/events/manage_team.html:29
msgid "Apply"
msgstr ""
#: src/events/templates/events/manage_team.html:44
#: src/events/templates/events/team.html:49
#: events/templates/events/manage_team.html:44
#: events/templates/events/team.html:49
msgid "Members"
msgstr ""
#: src/events/templates/events/manage_team.html:52
#: events/templates/events/manage_team.html:52
msgid "Leave Team"
msgstr ""
#: src/events/templates/events/manage_team.html:59
#: events/templates/events/manage_team.html:59
msgid "Open to automatching"
msgstr ""
#: src/events/templates/events/manage_team.html:66
#: events/templates/events/manage_team.html:66
msgid "Close to automatching"
msgstr ""
#: src/events/templates/events/team.html:38
#: events/templates/events/team.html:38
msgid "It seems that this team has not solved any challenge yet..."
msgstr ""
#: src/home/templates/home/home.html:21
#: home/templates/home/home.html:21
msgid "Weekly Top 5"
msgstr ""
#: src/home/templates/home/home.html:48
#: home/templates/home/home.html:48
msgid "No article available."
msgstr ""
#: src/home/templates/home/home.html:53
#: home/templates/home/home.html:53
msgid "Latest challenges added"
msgstr ""
#: src/home/templates/home/home.html:58
#: home/templates/home/home.html:58
msgid "points"
msgstr ""
#: src/home/templates/home/home.html:62
#: home/templates/home/home.html:62
msgid "No ctf available."
msgstr ""
#: src/home/templates/home/home.html:66
#: home/templates/home/home.html:66
msgid "Latest Flags"
msgstr ""
#: src/home/templates/home/home.html:80
#: home/templates/home/home.html:80
msgid "Flags"
msgstr ""
#: src/home/templates/home/home.html:86
#: home/templates/home/home.html:86
msgid "Users"
msgstr ""
#: src/project/settings.py:116
#: project/settings.py:115
msgid "English"
msgstr ""
#: src/project/settings.py:117
#: project/settings.py:116
msgid "German"
msgstr ""
#: src/project/settings.py:118
#: project/settings.py:117
msgid "French"
msgstr ""
#: src/project/settings.py:119
#: project/settings.py:118
msgid "Russian"
msgstr ""
#: src/project/settings.py:120
#: project/settings.py:119
msgid "Japanese"
msgstr ""
#: src/project/settings.py:121
#: project/settings.py:120
msgid "Spanish"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Campus"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:38
msgid "First"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:47
#: scoreboard/templates/scoreboard/scoreboard.html:39
msgid "Previous"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:51
#: scoreboard/templates/scoreboard/scoreboard.html:43
msgid "Page "
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:55
#: scoreboard/templates/scoreboard/scoreboard.html:47
msgid "Next"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:56
#: scoreboard/templates/scoreboard/scoreboard.html:48
msgid "Last"
msgstr ""
#: src/templates/base.html:62
#: templates/base.html:59
msgid "Scoreboard"
msgstr ""
#: src/templates/base.html:83
msgid "Become a member"
#: templates/base.html:64
msgid "Resources"
msgstr ""
#: src/templates/base.html:93
#: templates/base.html:93
msgid "Logout"
msgstr ""
#: src/templates/base.html:100
#: templates/base.html:100
msgid "Sign Up"
msgstr ""
#: src/templates/registration/password_reset_complete.html:11
#: templates/base.html:135
msgid "Become a Patron!"
msgstr ""
#: templates/registration/password_reset_complete.html:11
msgid "Your new password has been set."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:20
#: templates/registration/password_reset_confirm.html:20
msgid "Your password cant be too similar to your other personal information."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:21
#: templates/registration/password_reset_confirm.html:21
msgid "Your password must contain at least 8 characters."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:22
#: templates/registration/password_reset_confirm.html:22
msgid "Your password cant be a commonly used password."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:23
#: templates/registration/password_reset_confirm.html:23
msgid "Your password cant be entirely numeric."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:26
#: templates/registration/password_reset_confirm.html:26
msgid "Confirm"
msgstr ""
#: src/templates/registration/password_reset_confirm.html:28
#: templates/registration/password_reset_confirm.html:28
msgid "Submit"
msgstr ""
#: src/templates/registration/password_reset_done.html:11
#: templates/registration/password_reset_done.html:11
msgid ""
"We've emailed you instructions for setting your password. You should receive "
"the email shortly!"
msgstr ""
#: src/templates/registration/password_reset_form.html:16
#: templates/registration/password_reset_form.html:16
msgid "Reset"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: 2022-02-09 10:55+0100\n"
"Last-Translator: Javier Uhagón (uhagontorralvojavier@gmail.com)\n"
"Language-Team: \n"
@ -18,231 +18,181 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/accounts/templates/accounts/delete.html:8
#: accounts/templates/accounts/delete.html:8
msgid "Delete account"
msgstr "Borrar cuenta"
#: src/accounts/templates/accounts/delete.html:11
#: accounts/templates/accounts/delete.html:11
msgid "Please confirm your password to delete your account."
msgstr "Por favor confirme su contraseña para borrar su cuenta."
#: src/accounts/templates/accounts/delete.html:12
#: accounts/templates/accounts/delete.html:12
msgid "Deleted accounts cannot be recovered."
msgstr "Las cuentas borradas no pueden ser recuperadas."
#: src/accounts/templates/accounts/delete.html:15
msgid "Password incorrect."
#: accounts/templates/accounts/delete.html:15
msgid "Password inccorect."
msgstr "Contraseña incorrecta."
#: src/accounts/templates/accounts/delete.html:17
#: accounts/templates/accounts/delete.html:17
msgid "Your account has been deleted."
msgstr "Su cuenta ha sido borrada."
#: src/accounts/templates/accounts/delete.html:22
#: src/accounts/templates/accounts/login.html:19
#: src/accounts/templates/accounts/register.html:23
#: src/events/templates/events/create_team.html:27
#: src/events/templates/events/join_team.html:32
#: accounts/templates/accounts/delete.html:22
#: accounts/templates/accounts/login.html:19
#: accounts/templates/accounts/register.html:23
#: events/templates/events/create_team.html:27
#: events/templates/events/join_team.html:32
msgid "Password"
msgstr "Contraseña"
#: src/accounts/templates/accounts/edit.html:21
#: src/accounts/templates/accounts/login.html:18
#: src/accounts/templates/accounts/register.html:22
#: src/ctfs/templates/ctfs/ctf_info.html:63
#: src/ctfs/templates/ctfs/ctfs_list.html:12
#: src/events/templates/events/ctf_info.html:65
#: src/events/templates/events/event_info.html:64
#: src/scoreboard/templates/scoreboard/scoreboard.html:13
#: accounts/templates/accounts/edit.html:21
#: accounts/templates/accounts/login.html:18
#: accounts/templates/accounts/register.html:22
#: ctfs/templates/ctfs/ctf_info.html:61 ctfs/templates/ctfs/ctfs_list.html:12
#: events/templates/events/ctf_info.html:65
#: events/templates/events/event_info.html:64
#: scoreboard/templates/scoreboard/scoreboard.html:13
msgid "Username"
msgstr "Usuario"
#: src/accounts/templates/accounts/edit.html:25
#: accounts/templates/accounts/edit.html:25
msgid "Email"
msgstr "Email"
#: src/accounts/templates/accounts/edit.html:30
#: src/ctfs/templates/ctfs/ctf_info.html:64
#: src/events/templates/events/ctf_info.html:66
#: src/events/templates/events/event_info.html:65
#: src/scoreboard/templates/scoreboard/scoreboard.html:14
#: accounts/templates/accounts/edit.html:30
#: ctfs/templates/ctfs/ctf_info.html:62
#: events/templates/events/ctf_info.html:66
#: events/templates/events/event_info.html:65
#: scoreboard/templates/scoreboard/scoreboard.html:14
msgid "Website"
msgstr "Página Web"
#: src/accounts/templates/accounts/edit.html:36
#, fuzzy
#| msgid "Apply"
msgid " Apply"
#: accounts/templates/accounts/edit.html:36
#: events/templates/events/manage_team.html:29
msgid "Apply"
msgstr "Aplicar"
#: src/accounts/templates/accounts/edit.html:45
#, fuzzy
#| msgid "Delete account"
msgid "Connected accounts"
msgstr "Borrar cuenta"
#: src/accounts/templates/accounts/edit.html:53
msgid "Disconnect Discord"
msgstr ""
#: src/accounts/templates/accounts/edit.html:59
msgid "Connect Discord"
msgstr ""
#: src/accounts/templates/accounts/edit.html:68
msgid "Disconnect 42"
msgstr ""
#: src/accounts/templates/accounts/edit.html:74
#: src/events/templates/events/event_pwd.html:19
msgid "Connect 42"
msgstr ""
#: src/accounts/templates/accounts/edit.html:85
#: src/accounts/templates/accounts/profile.html:46
#: src/ctfs/templates/ctfs/ctf_info.html:65
#: src/ctfs/templates/ctfs/ctfs_list.html:13
#: src/events/templates/events/event_info.html:66
#: src/events/templates/events/event_info.html:89
#: src/events/templates/events/manage_team.html:40
#: src/events/templates/events/team.html:45
#: src/scoreboard/templates/scoreboard/scoreboard.html:16
#: accounts/templates/accounts/edit.html:47
#: accounts/templates/accounts/profile.html:46
#: ctfs/templates/ctfs/ctf_info.html:63 ctfs/templates/ctfs/ctfs_list.html:13
#: events/templates/events/event_info.html:66
#: events/templates/events/event_info.html:89
#: events/templates/events/manage_team.html:40
#: events/templates/events/team.html:45
#: scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Score"
msgstr "Puntuación"
#: src/accounts/templates/accounts/edit.html:93
#: src/accounts/templates/accounts/profile.html:60
#: accounts/templates/accounts/edit.html:55
#: accounts/templates/accounts/profile.html:60
msgid "Registered since"
msgstr "Registrado desde"
#: src/accounts/templates/accounts/edit.html:99
#, fuzzy
#| msgid "Delete my account"
msgid " Delete my account"
#: accounts/templates/accounts/edit.html:61
msgid "Delete my account"
msgstr "Borrar mi cuenta"
#: src/accounts/templates/accounts/login.html:13
#: accounts/templates/accounts/login.html:13
msgid "Please, verify your infos."
msgstr "Por favor, verifique su información."
#: src/accounts/templates/accounts/login.html:22
#: accounts/templates/accounts/login.html:22
msgid "Reset password"
msgstr "Cambiar contraseña"
#: src/accounts/templates/accounts/login.html:31
#: src/accounts/templates/accounts/register.html:37 src/templates/base.html:97
#: src/templates/registration/password_reset_complete.html:18
#: src/templates/registration/password_reset_confirm.html:38
#: src/templates/registration/password_reset_done.html:18
#: src/templates/registration/password_reset_form.html:26
#: accounts/templates/accounts/login.html:31
#: accounts/templates/accounts/register.html:38 templates/base.html:97
#: templates/registration/password_reset_complete.html:18
#: templates/registration/password_reset_confirm.html:38
#: templates/registration/password_reset_done.html:18
#: templates/registration/password_reset_form.html:26
msgid "Login"
msgstr "Iniciar Sesión"
#: src/accounts/templates/accounts/login.html:32
#: src/accounts/templates/accounts/register.html:36
#: src/templates/registration/password_reset_complete.html:19
#: src/templates/registration/password_reset_confirm.html:39
#: src/templates/registration/password_reset_done.html:19
#: src/templates/registration/password_reset_form.html:27
#: accounts/templates/accounts/login.html:32
#: accounts/templates/accounts/register.html:37
#: templates/registration/password_reset_complete.html:19
#: templates/registration/password_reset_confirm.html:39
#: templates/registration/password_reset_done.html:19
#: templates/registration/password_reset_form.html:27
msgid "Sign up"
msgstr "Registrarse"
#: src/accounts/templates/accounts/profile.html:10
#: accounts/templates/accounts/profile.html:10
msgid "Challenges Solved by"
msgstr "Retos resueltos por"
#: src/accounts/templates/accounts/profile.html:21
#: src/events/templates/events/team.html:20
#: accounts/templates/accounts/profile.html:21
#: events/templates/events/team.html:20
msgid "Challenge Name"
msgstr "Nombre del reto"
#: src/accounts/templates/accounts/profile.html:22
#: src/events/templates/events/team.html:21
#: accounts/templates/accounts/profile.html:22
#: events/templates/events/team.html:21
msgid "Category"
msgstr "Categoría"
#: src/accounts/templates/accounts/profile.html:23
#: src/events/templates/events/team.html:22
#: accounts/templates/accounts/profile.html:23
#: events/templates/events/team.html:22
msgid "Points"
msgstr "Puntos"
#: src/accounts/templates/accounts/profile.html:24
#: src/ctfs/templates/ctfs/ctf_info.html:66
#: src/events/templates/events/ctf_info.html:67
#: src/events/templates/events/team.html:23
#: accounts/templates/accounts/profile.html:24
#: ctfs/templates/ctfs/ctf_info.html:64
#: events/templates/events/ctf_info.html:67
#: events/templates/events/team.html:23
msgid "Date"
msgstr "Fecha"
#: src/accounts/templates/accounts/profile.html:39
#: accounts/templates/accounts/profile.html:39
msgid "It seems that this user has not solved any challenge yet..."
msgstr "Parece que este usuario no ha resuelto ningún reto aún..."
#: src/accounts/templates/accounts/profile.html:47
#: src/events/templates/events/event_info.html:63
#: src/events/templates/events/event_info.html:87
#: src/events/templates/events/manage_team.html:41
#: src/events/templates/events/team.html:46
#: src/scoreboard/templates/scoreboard/scoreboard.html:12
#: accounts/templates/accounts/profile.html:47
#: events/templates/events/event_info.html:63
#: events/templates/events/event_info.html:87
#: events/templates/events/manage_team.html:41
#: events/templates/events/team.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:12
msgid "Rank"
msgstr "Rango"
#: src/accounts/templates/accounts/profile.html:56
#, fuzzy
#| msgid "Members"
msgid "Member"
msgstr "Miembros"
#: accounts/templates/accounts/profile.html:56
msgid "Status: Member"
msgstr "Estatus: Miembro"
#: src/accounts/templates/accounts/profile.html:58
#, fuzzy
#| msgid "Status: Visitor"
msgid " Visitor"
#: accounts/templates/accounts/profile.html:58
msgid "Status: Visitor"
msgstr "Estatus: Visitante"
#: src/accounts/templates/accounts/profile.html:64
#: src/events/templates/events/team.html:57
#: accounts/templates/accounts/profile.html:64
#: events/templates/events/team.html:57
msgid "Categories stats"
msgstr "Estádisticas de las categorías"
#: src/accounts/templates/accounts/profile.html:81
#, fuzzy
#| msgid "Challenge Name"
msgid "Challenges created"
msgstr "Nombre del reto"
#: src/accounts/templates/accounts/profile.html:87
#, fuzzy
#| msgid "It seems that this user has not solved any challenge yet..."
msgid "It seems that this user has not created any challenge yet..."
msgstr "Parece que este usuario no ha resuelto ningún reto aún..."
#: src/accounts/templates/accounts/register.html:13
#: accounts/templates/accounts/register.html:13
msgid "Welcome !"
msgstr "¡ Bienvenid@ !"
#: src/accounts/templates/accounts/register.html:14
#: accounts/templates/accounts/register.html:14
msgid "Your account has been created."
msgstr "Tu cuenta ha sido creada."
#: src/accounts/templates/accounts/register.html:25
#: accounts/templates/accounts/register.html:25
msgid "Personal website"
msgstr "Web personal"
#: src/accounts/templates/accounts/register.html:26
#: src/events/templates/events/event_info.html:119
#: accounts/templates/accounts/register.html:26
#: events/templates/events/event_info.html:119
msgid "Register"
msgstr "Registrarse"
#: src/accounts/views/views.py:33
#: accounts/views/views.py:33
msgid "Your account was inactive."
msgstr "Tu cuenta estaba inactiva."
#: src/accounts/views/views.py:57
#, fuzzy
#| msgid "Your password must contain at least 8 characters."
msgid "The password must be at least 8 characters long."
msgstr "Tu contraseña debe tener al menos 8 carácteres."
#: src/accounts/views/views.py:67
#: accounts/views/views.py:52
msgid ""
"The password must contain at least one letter and at least one digit or "
"punctuation character."
@ -250,442 +200,421 @@ msgstr ""
"La contraseña debe contener al menos una letra y un dígito o un signo de "
"puntuación."
#: src/accounts/views/views.py:77
#: accounts/views/views.py:54
msgid "A user with that email already exists."
msgstr "Ya existe un usuario con este email."
#: src/accounts/views/views.py:99
#: accounts/views/views.py:67
msgid "A user with that username already exists."
msgstr "Ese nombre de usuario ya está en uso."
#: src/accounts/views/views.py:132
#: accounts/views/views.py:95
msgid "Email already taken."
msgstr "Email ya usado."
#: src/accounts/views/views.py:138
#: accounts/views/views.py:101
msgid "Username already taken."
msgstr "Nombre de usuario ya usado."
#: src/accounts/views/views.py:142 src/events/views/teams.py:124
#: accounts/views/views.py:105 events/views/teams.py:124
msgid "Updated."
msgstr "Actualizado."
#: src/ctfs/templates/ctfs/ctf_info.html:12
#: src/events/templates/events/ctf_info.html:12
#: ctfs/templates/ctfs/ctf_info.html:10
#: events/templates/events/ctf_info.html:12
msgid "Published date"
msgstr "Fecha de publicación"
#: src/ctfs/templates/ctfs/ctf_info.html:16
#: ctfs/templates/ctfs/ctf_info.html:14
msgid "Challenge is not yet available."
msgstr "El reto aún no está disponible."
#: src/ctfs/templates/ctfs/ctf_info.html:29
#: src/events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr "¡ Felicidades !"
#: src/ctfs/templates/ctfs/ctf_info.html:31
#: src/events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr "Flag ya conseguida"
#: src/ctfs/templates/ctfs/ctf_info.html:33
#: src/ctfs/templates/ctfs/ctf_info.html:42
#: src/events/templates/events/ctf_info.html:36
#: src/events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr "Comenzar el reto"
#: src/ctfs/templates/ctfs/ctf_info.html:35
#: src/ctfs/templates/ctfs/ctf_info.html:44
#: src/events/templates/events/ctf_info.html:38
#: src/events/templates/events/ctf_info.html:47
msgid "Download"
msgstr "Descargar"
#: src/ctfs/templates/ctfs/ctf_info.html:39
#: src/events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr "¡ Flag incorrecta ! ¡ Puedes hacerlo !"
#: src/ctfs/templates/ctfs/ctf_info.html:58
#: src/events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr "Resuelto por"
#: src/ctfs/templates/ctfs/ctf_info.html:82
#: src/events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr "Nadie ha resuelto este reto aún."
#: src/ctfs/templates/ctfs/ctf_info.html:89
#: src/events/templates/events/ctf_info.html:97
msgid "Author"
msgstr "Autor"
#: src/ctfs/templates/ctfs/ctf_info.html:90
#: src/events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr "Recompensa de puntos"
#: src/ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr "Resuelto"
#: src/ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr "No hay un ctf disponible para esta categoría."
#: src/ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr "Categorías"
#: src/ctfs/templates/ctfs/ctfs_list.html:48 src/templates/base.html:56
msgid "No category available."
msgstr "No hay categoría disponible."
#: src/events/templates/events/create_team.html:10
#: src/events/templates/events/join_team.html:10
msgid "This event starts at"
msgstr "Este evento empieza"
#: src/events/templates/events/create_team.html:17
#: src/events/templates/events/join_team.html:17
msgid "You need to be registered to the event."
msgstr "Necesitas estar registrado al evento."
#: src/events/templates/events/create_team.html:20
#: src/events/views/teams.py:120
msgid "Name already taken."
msgstr "Nombre ya elegido."
#: src/events/templates/events/create_team.html:26
#: src/events/templates/events/join_team.html:31
#: src/events/templates/events/manage_team.html:22
msgid "Team name"
msgstr "Nombre de equipo"
#: src/events/templates/events/create_team.html:28
#: src/events/templates/events/create_team.html:49
#: src/events/templates/events/join_team.html:54
msgid "Create Team"
msgstr "Crear equipo"
#: src/events/templates/events/create_team.html:33
#: src/events/templates/events/event_pwd.html:44
#: src/events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr "Necesitas tener una sesión iniciada para acceder a este evento."
#: src/events/templates/events/create_team.html:42
#: src/events/templates/events/event_info.html:113
#: src/events/templates/events/event_pwd.html:52
#: src/events/templates/events/join_team.html:47
msgid "Starts at"
msgstr "Empieza a las"
#: src/events/templates/events/create_team.html:43
#: src/events/templates/events/event_info.html:114
#: src/events/templates/events/event_pwd.html:53
#: src/events/templates/events/join_team.html:48
msgid "Ends at"
msgstr "Acaba a las"
#: src/events/templates/events/create_team.html:47
#: src/events/templates/events/event_info.html:129
#: src/events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr "Gestionar mi equipo"
#: src/events/templates/events/create_team.html:48
#: src/events/templates/events/join_team.html:33
#: src/events/templates/events/join_team.html:53
msgid "Join Team"
msgstr "Unirse a un equipo"
#: src/events/templates/events/create_team.html:53
#: src/events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr "Auto-matching"
#: src/events/templates/events/create_team.html:57
#: src/events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr "¡ Encuentrame un equipo !"
#: src/events/templates/events/ctf_info.html:10
msgid "Event"
msgstr "Evento"
#: src/events/templates/events/ctf_info.html:18
#: ctfs/templates/ctfs/ctf_info.html:21
#: events/templates/events/ctf_info.html:18
msgid ""
"No translation available. Please try another language (English or French)."
msgstr ""
"Traducción no disponible. Por favor pruebe otro idioma (inglés o francés)."
#: src/events/templates/events/ctf_info.html:28
#: src/events/templates/events/event_info.html:18
#: ctfs/templates/ctfs/ctf_info.html:27
#: events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr "¡ Felicidades !"
#: ctfs/templates/ctfs/ctf_info.html:29
#: events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr "Flag ya conseguida"
#: ctfs/templates/ctfs/ctf_info.html:31 ctfs/templates/ctfs/ctf_info.html:40
#: events/templates/events/ctf_info.html:36
#: events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr "Comenzar el reto"
#: ctfs/templates/ctfs/ctf_info.html:33 ctfs/templates/ctfs/ctf_info.html:42
#: events/templates/events/ctf_info.html:38
#: events/templates/events/ctf_info.html:47
msgid "Download"
msgstr "Descargar"
#: ctfs/templates/ctfs/ctf_info.html:37
#: events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr "¡ Flag incorrecta ! ¡ Puedes hacerlo !"
#: ctfs/templates/ctfs/ctf_info.html:56
#: events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr "Resuelto por"
#: ctfs/templates/ctfs/ctf_info.html:80
#: events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr "Nadie ha resuelto este reto aún."
#: ctfs/templates/ctfs/ctf_info.html:87
#: events/templates/events/ctf_info.html:97
msgid "Author"
msgstr "Autor"
#: ctfs/templates/ctfs/ctf_info.html:88
#: events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr "Recompensa de puntos"
#: ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr "Resuelto"
#: ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr "No hay un ctf disponible para esta categoría."
#: ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr "Categorías"
#: ctfs/templates/ctfs/ctfs_list.html:48 templates/base.html:54
msgid "No category available."
msgstr "No hay categoría disponible."
#: events/templates/events/create_team.html:10
#: events/templates/events/join_team.html:10
msgid "This event starts at"
msgstr "Este evento empieza"
#: events/templates/events/create_team.html:17
#: events/templates/events/join_team.html:17
msgid "You need to be registered to the event."
msgstr "Necesitas estar registrado al evento."
#: events/templates/events/create_team.html:20 events/views/teams.py:120
msgid "Name already taken."
msgstr "Nombre ya elegido."
#: events/templates/events/create_team.html:26
#: events/templates/events/join_team.html:31
#: events/templates/events/manage_team.html:22
msgid "Team name"
msgstr "Nombre de equipo"
#: events/templates/events/create_team.html:28
#: events/templates/events/create_team.html:49
#: events/templates/events/join_team.html:54
msgid "Create Team"
msgstr "Crear equipo"
#: events/templates/events/create_team.html:33
#: events/templates/events/event_pwd.html:28
#: events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr "Necesitas tener una sesión iniciada para acceder a este evento."
#: events/templates/events/create_team.html:42
#: events/templates/events/event_info.html:113
#: events/templates/events/event_pwd.html:36
#: events/templates/events/join_team.html:47
msgid "Starts at"
msgstr "Empieza a las"
#: events/templates/events/create_team.html:43
#: events/templates/events/event_info.html:114
#: events/templates/events/event_pwd.html:37
#: events/templates/events/join_team.html:48
msgid "Ends at"
msgstr "Acaba a las"
#: events/templates/events/create_team.html:47
#: events/templates/events/event_info.html:129
#: events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr "Gestionar mi equipo"
#: events/templates/events/create_team.html:48
#: events/templates/events/join_team.html:33
#: events/templates/events/join_team.html:53
msgid "Join Team"
msgstr "Unirse a un equipo"
#: events/templates/events/create_team.html:53
#: events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr "Auto-matching"
#: events/templates/events/create_team.html:57
#: events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr "¡ Encuentrame un equipo !"
#: events/templates/events/ctf_info.html:10
msgid "Event"
msgstr "Evento"
#: events/templates/events/ctf_info.html:28
#: events/templates/events/event_info.html:18
msgid "This event is over."
msgstr "Este evento ya ha acabado."
#: src/events/templates/events/ctf_info.html:30
#: events/templates/events/ctf_info.html:30
msgid "Error while processing your request. (Invalid Form)"
msgstr "Error al procesar tu solicitud. (Formulario incorrecto)"
#: src/events/templates/events/ctf_info.html:32
#: events/templates/events/ctf_info.html:32
msgid "You must register to the event before submitting flags."
msgstr ""
#: src/events/templates/events/ctf_info.html:34
#: events/templates/events/ctf_info.html:34
msgid ""
"This is a team event, please create or join a team before submitting flags."
msgstr ""
#: src/events/templates/events/event_info.html:9
#: events/templates/events/event_info.html:9
msgid "Subscriptions is over."
msgstr "El periodo de suscripción ha acabado."
#: src/events/templates/events/event_info.html:12
#: src/events/templates/events/event_pwd.html:33
#: events/templates/events/event_info.html:12
#: events/templates/events/event_pwd.html:18
msgid "You're already registered to this event."
msgstr "Ya estás registrado a este evento."
#: src/events/templates/events/event_info.html:20
#: src/events/templates/events/event_pwd.html:9
#: events/templates/events/event_info.html:20
#: events/templates/events/event_pwd.html:9
msgid "This event start at"
msgstr "Este evento empieza"
#: src/events/templates/events/event_info.html:30
#: events/templates/events/event_info.html:30
msgid "Challenges"
msgstr "Retos"
#: src/events/templates/events/event_info.html:47
#: events/templates/events/event_info.html:47
msgid "No challenges available."
msgstr "No hay retos disponibles."
#: src/events/templates/events/event_info.html:51
#: events/templates/events/event_info.html:51
msgid "The event has not started yet."
msgstr "El evento no ha empezado aún."
#: src/events/templates/events/event_info.html:57
#: events/templates/events/event_info.html:57
msgid "ScoreBoard"
msgstr "Tabla de puntuaciones"
#: src/events/templates/events/event_info.html:88
#: events/templates/events/event_info.html:88
msgid "Team"
msgstr "Equipo"
#: src/events/templates/events/event_info.html:106
#: events/templates/events/event_info.html:106
msgid "No one have earn point yet, you gonna be the first ?"
msgstr "Nadie ha conseguido puntos aún, ¿Vas a ser el primero?"
#: src/events/templates/events/event_pwd.html:16
msgid ""
"This event is reserved for one or more 42 campuses. If you have not "
"connected your intranet to 42CTF, you can do so with this button: "
msgstr ""
#: src/events/templates/events/event_pwd.html:25
msgid ""
"This event is reserved for one or more 42 campuses. And unfortunately your "
"campus can't participate. Do not hesitate to contact us to organize an event "
"on your campus!"
msgstr ""
#: src/events/templates/events/event_pwd.html:30
#: src/events/templates/events/join_team.html:22
#: events/templates/events/event_pwd.html:15
#: events/templates/events/join_team.html:22
msgid "Wrong password submited."
msgstr "Contraseña incorrecta."
#: src/events/templates/events/event_pwd.html:35
#: events/templates/events/event_pwd.html:20
msgid "This event is password protected"
msgstr "Este evento está protegido con contraseña"
#: src/events/templates/events/event_pwd.html:36
#: events/templates/events/event_pwd.html:21
msgid "You need to submit the event password to gain access to this event."
msgstr "Necesitas introducir la contraseña del evento para participar."
#: src/events/templates/events/events_list.html:6 src/templates/base.html:65
#: events/templates/events/events_list.html:6 templates/base.html:61
msgid "Events"
msgstr "Eventos"
#: src/events/templates/events/events_list.html:38
#: events/templates/events/events_list.html:38
msgid "See more"
msgstr "Ver más"
#: src/events/templates/events/events_list.html:44
#: events/templates/events/events_list.html:44
msgid "No events available."
msgstr "No hay eventos disponibles."
#: src/events/templates/events/join_team.html:20
#: events/templates/events/join_team.html:20
msgid "Team does not exist."
msgstr "El equipo no existe."
#: src/events/templates/events/join_team.html:24
#: events/templates/events/join_team.html:24
msgid "Maximum size reached."
msgstr "Tamaño máximo alcanzado."
#: src/events/templates/events/manage_team.html:26
#: events/templates/events/manage_team.html:26
msgid "Team password"
msgstr "Contraseña del equipo"
#: src/events/templates/events/manage_team.html:29
msgid "Apply"
msgstr "Aplicar"
#: src/events/templates/events/manage_team.html:44
#: src/events/templates/events/team.html:49
#: events/templates/events/manage_team.html:44
#: events/templates/events/team.html:49
msgid "Members"
msgstr "Miembros"
#: src/events/templates/events/manage_team.html:52
#: events/templates/events/manage_team.html:52
msgid "Leave Team"
msgstr "Salir del equipo"
#: src/events/templates/events/manage_team.html:59
#: events/templates/events/manage_team.html:59
#, fuzzy
#| msgid "Auto-matching"
msgid "Open to automatching"
msgstr "Auto-matching"
#: src/events/templates/events/manage_team.html:66
#: events/templates/events/manage_team.html:66
#, fuzzy
#| msgid "Auto-matching"
msgid "Close to automatching"
msgstr "Auto-matching"
#: src/events/templates/events/team.html:38
#: events/templates/events/team.html:38
msgid "It seems that this team has not solved any challenge yet..."
msgstr "Parece que este equipo aún no ha resuelto ningún reto..."
#: src/home/templates/home/home.html:21
#: home/templates/home/home.html:21
msgid "Weekly Top 5"
msgstr "Top 5 semanal"
#: src/home/templates/home/home.html:48
#: home/templates/home/home.html:48
msgid "No article available."
msgstr "Articulos no disponibles."
#: src/home/templates/home/home.html:53
#: home/templates/home/home.html:53
msgid "Latest challenges added"
msgstr "Ultimos retos añadidos"
#: src/home/templates/home/home.html:58
#: home/templates/home/home.html:58
msgid "points"
msgstr "puntos"
#: src/home/templates/home/home.html:62
#: home/templates/home/home.html:62
msgid "No ctf available."
msgstr "ctf no disponible."
#: src/home/templates/home/home.html:66
#: home/templates/home/home.html:66
msgid "Latest Flags"
msgstr "Ultimas Flags."
#: src/home/templates/home/home.html:80
#: home/templates/home/home.html:80
msgid "Flags"
msgstr "Flags"
#: src/home/templates/home/home.html:86
#: home/templates/home/home.html:86
msgid "Users"
msgstr "Usuarios"
#: src/project/settings.py:116
#: project/settings.py:115
msgid "English"
msgstr "Inglés"
#: src/project/settings.py:117
#: project/settings.py:116
msgid "German"
msgstr "Alemán"
#: src/project/settings.py:118
#: project/settings.py:117
msgid "French"
msgstr "Francés"
#: src/project/settings.py:119
#: project/settings.py:118
msgid "Russian"
msgstr "Ruso"
#: src/project/settings.py:120
#: project/settings.py:119
msgid "Japanese"
msgstr ""
#: src/project/settings.py:121
#: project/settings.py:120
msgid "Spanish"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Campus"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:38
msgid "First"
msgstr "Primero"
#: src/scoreboard/templates/scoreboard/scoreboard.html:47
#: scoreboard/templates/scoreboard/scoreboard.html:39
msgid "Previous"
msgstr "Anterior"
#: src/scoreboard/templates/scoreboard/scoreboard.html:51
#: scoreboard/templates/scoreboard/scoreboard.html:43
msgid "Page "
msgstr "Pagina "
#: src/scoreboard/templates/scoreboard/scoreboard.html:55
#: scoreboard/templates/scoreboard/scoreboard.html:47
msgid "Next"
msgstr "Siguiente"
#: src/scoreboard/templates/scoreboard/scoreboard.html:56
#: scoreboard/templates/scoreboard/scoreboard.html:48
msgid "Last"
msgstr "Último"
#: src/templates/base.html:62
#: templates/base.html:59
msgid "Scoreboard"
msgstr "Tabla de puntuaciones"
#: src/templates/base.html:83
#, fuzzy
#| msgid "Become a Patron!"
msgid "Become a member"
msgstr "¡Conviertete en un Mecenas!"
#: templates/base.html:64
msgid "Resources"
msgstr "Recursos"
#: src/templates/base.html:93
#: templates/base.html:93
msgid "Logout"
msgstr "Cerrar sesión"
#: src/templates/base.html:100
#: templates/base.html:100
msgid "Sign Up"
msgstr "Registrarse"
#: src/templates/registration/password_reset_complete.html:11
#: templates/base.html:135
msgid "Become a Patron!"
msgstr "¡Conviertete en un Mecenas!"
#: templates/registration/password_reset_complete.html:11
msgid "Your new password has been set."
msgstr "Contraseña cambiada correctamente."
#: src/templates/registration/password_reset_confirm.html:20
#: templates/registration/password_reset_confirm.html:20
msgid "Your password cant be too similar to your other personal information."
msgstr ""
"Tu contraseña no puede ser tan similar al resto de tu información personal."
#: src/templates/registration/password_reset_confirm.html:21
#: templates/registration/password_reset_confirm.html:21
msgid "Your password must contain at least 8 characters."
msgstr "Tu contraseña debe tener al menos 8 carácteres."
#: src/templates/registration/password_reset_confirm.html:22
#: templates/registration/password_reset_confirm.html:22
msgid "Your password cant be a commonly used password."
msgstr "Tu contraseña no puede ser una contraseña tan común."
#: src/templates/registration/password_reset_confirm.html:23
#: templates/registration/password_reset_confirm.html:23
msgid "Your password cant be entirely numeric."
msgstr "Tu contraseña no puede ser solo numérica."
#: src/templates/registration/password_reset_confirm.html:26
#: templates/registration/password_reset_confirm.html:26
msgid "Confirm"
msgstr "Confirmar"
#: src/templates/registration/password_reset_confirm.html:28
#: templates/registration/password_reset_confirm.html:28
msgid "Submit"
msgstr "Enviar"
#: src/templates/registration/password_reset_done.html:11
#: templates/registration/password_reset_done.html:11
msgid ""
"We've emailed you instructions for setting your password. You should receive "
"the email shortly!"
@ -693,16 +622,10 @@ msgstr ""
"Te hemos enviado por email las instrucciones para cambiar tu contraseña. "
"¡Deberías recibir el email pronto!"
#: src/templates/registration/password_reset_form.html:16
#: templates/registration/password_reset_form.html:16
msgid "Reset"
msgstr "Restablecer"
#~ msgid "Status: Member"
#~ msgstr "Estatus: Miembro"
#~ msgid "Resources"
#~ msgstr "Recursos"
#~ msgid ""
#~ "Error: you're not registered to this event, so you can't register scores, "
#~ "fucking logic."

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,241 +18,189 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/accounts/templates/accounts/delete.html:8
#: accounts/templates/accounts/delete.html:8
#, fuzzy
#| msgid "Connected accounts"
msgid "Delete account"
msgstr "Comptes connectés"
#: src/accounts/templates/accounts/delete.html:11
#: accounts/templates/accounts/delete.html:11
msgid "Please confirm your password to delete your account."
msgstr ""
#: src/accounts/templates/accounts/delete.html:12
#: accounts/templates/accounts/delete.html:12
msgid "Deleted accounts cannot be recovered."
msgstr ""
#: src/accounts/templates/accounts/delete.html:15
msgid "Password incorrect."
#: accounts/templates/accounts/delete.html:15
msgid "Password inccorect."
msgstr ""
#: src/accounts/templates/accounts/delete.html:17
#: accounts/templates/accounts/delete.html:17
#, fuzzy
#| msgid "Your account has been created."
msgid "Your account has been deleted."
msgstr "Votre compte a été créé."
#: src/accounts/templates/accounts/delete.html:22
#: src/accounts/templates/accounts/login.html:19
#: src/accounts/templates/accounts/register.html:23
#: src/events/templates/events/create_team.html:27
#: src/events/templates/events/join_team.html:32
#: accounts/templates/accounts/delete.html:22
#: accounts/templates/accounts/login.html:19
#: accounts/templates/accounts/register.html:23
#: events/templates/events/create_team.html:27
#: events/templates/events/join_team.html:32
msgid "Password"
msgstr "Mot de passe"
#: src/accounts/templates/accounts/edit.html:21
#: src/accounts/templates/accounts/login.html:18
#: src/accounts/templates/accounts/register.html:22
#: src/ctfs/templates/ctfs/ctf_info.html:63
#: src/ctfs/templates/ctfs/ctfs_list.html:12
#: src/events/templates/events/ctf_info.html:65
#: src/events/templates/events/event_info.html:64
#: src/scoreboard/templates/scoreboard/scoreboard.html:13
#: accounts/templates/accounts/edit.html:21
#: accounts/templates/accounts/login.html:18
#: accounts/templates/accounts/register.html:22
#: ctfs/templates/ctfs/ctf_info.html:61 ctfs/templates/ctfs/ctfs_list.html:12
#: events/templates/events/ctf_info.html:65
#: events/templates/events/event_info.html:64
#: scoreboard/templates/scoreboard/scoreboard.html:13
msgid "Username"
msgstr "Pseudo"
#: src/accounts/templates/accounts/edit.html:25
#: accounts/templates/accounts/edit.html:25
msgid "Email"
msgstr "Email"
#: src/accounts/templates/accounts/edit.html:30
#: src/ctfs/templates/ctfs/ctf_info.html:64
#: src/events/templates/events/ctf_info.html:66
#: src/events/templates/events/event_info.html:65
#: src/scoreboard/templates/scoreboard/scoreboard.html:14
#: accounts/templates/accounts/edit.html:30
#: ctfs/templates/ctfs/ctf_info.html:62
#: events/templates/events/ctf_info.html:66
#: events/templates/events/event_info.html:65
#: scoreboard/templates/scoreboard/scoreboard.html:14
msgid "Website"
msgstr "Site internet"
#: src/accounts/templates/accounts/edit.html:36
#, fuzzy
#| msgid "Apply"
msgid " Apply"
#: accounts/templates/accounts/edit.html:36
#: events/templates/events/manage_team.html:29
msgid "Apply"
msgstr "Appliquer"
#: src/accounts/templates/accounts/edit.html:45
#, fuzzy
#| msgid "Connected accounts"
msgid "Connected accounts"
msgstr "Comptes connectés"
#: src/accounts/templates/accounts/edit.html:53
msgid "Disconnect Discord"
msgstr "Déconnecter Discord"
#: src/accounts/templates/accounts/edit.html:59
msgid "Connect Discord"
msgstr "Connecter Discord"
#: src/accounts/templates/accounts/edit.html:68
#, fuzzy
#| msgid "Disconnect Discord"
msgid "Disconnect 42"
msgstr "Déconnecter Discord"
#: src/accounts/templates/accounts/edit.html:74
#: src/events/templates/events/event_pwd.html:19
#, fuzzy
#| msgid "Connect Discord"
msgid "Connect 42"
msgstr "Connecter Discord"
#: src/accounts/templates/accounts/edit.html:85
#: src/accounts/templates/accounts/profile.html:46
#: src/ctfs/templates/ctfs/ctf_info.html:65
#: src/ctfs/templates/ctfs/ctfs_list.html:13
#: src/events/templates/events/event_info.html:66
#: src/events/templates/events/event_info.html:89
#: src/events/templates/events/manage_team.html:40
#: src/events/templates/events/team.html:45
#: src/scoreboard/templates/scoreboard/scoreboard.html:16
#: accounts/templates/accounts/edit.html:47
#: accounts/templates/accounts/profile.html:46
#: ctfs/templates/ctfs/ctf_info.html:63 ctfs/templates/ctfs/ctfs_list.html:13
#: events/templates/events/event_info.html:66
#: events/templates/events/event_info.html:89
#: events/templates/events/manage_team.html:40
#: events/templates/events/team.html:45
#: scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Score"
msgstr "Score"
#: src/accounts/templates/accounts/edit.html:93
#: src/accounts/templates/accounts/profile.html:60
#: accounts/templates/accounts/edit.html:55
#: accounts/templates/accounts/profile.html:60
msgid "Registered since"
msgstr "Inscrit depuis"
#: src/accounts/templates/accounts/edit.html:99
#: accounts/templates/accounts/edit.html:61
#, fuzzy
#| msgid "Connected accounts"
msgid " Delete my account"
msgid "Delete my account"
msgstr "Comptes connectés"
#: src/accounts/templates/accounts/login.html:13
#: accounts/templates/accounts/login.html:13
msgid "Please, verify your infos."
msgstr "Merci de vérifier vos informations."
#: src/accounts/templates/accounts/login.html:22
#: accounts/templates/accounts/login.html:22
msgid "Reset password"
msgstr "Réinitialiser le mot de passe"
#: src/accounts/templates/accounts/login.html:31
#: src/accounts/templates/accounts/register.html:37 src/templates/base.html:97
#: src/templates/registration/password_reset_complete.html:18
#: src/templates/registration/password_reset_confirm.html:38
#: src/templates/registration/password_reset_done.html:18
#: src/templates/registration/password_reset_form.html:26
#: accounts/templates/accounts/login.html:31
#: accounts/templates/accounts/register.html:38 templates/base.html:97
#: templates/registration/password_reset_complete.html:18
#: templates/registration/password_reset_confirm.html:38
#: templates/registration/password_reset_done.html:18
#: templates/registration/password_reset_form.html:26
msgid "Login"
msgstr "Connexion"
#: src/accounts/templates/accounts/login.html:32
#: src/accounts/templates/accounts/register.html:36
#: src/templates/registration/password_reset_complete.html:19
#: src/templates/registration/password_reset_confirm.html:39
#: src/templates/registration/password_reset_done.html:19
#: src/templates/registration/password_reset_form.html:27
#: accounts/templates/accounts/login.html:32
#: accounts/templates/accounts/register.html:37
#: templates/registration/password_reset_complete.html:19
#: templates/registration/password_reset_confirm.html:39
#: templates/registration/password_reset_done.html:19
#: templates/registration/password_reset_form.html:27
msgid "Sign up"
msgstr "Inscription"
#: src/accounts/templates/accounts/profile.html:10
#: accounts/templates/accounts/profile.html:10
msgid "Challenges Solved by"
msgstr "Challenges résolus par"
#: src/accounts/templates/accounts/profile.html:21
#: src/events/templates/events/team.html:20
#: accounts/templates/accounts/profile.html:21
#: events/templates/events/team.html:20
msgid "Challenge Name"
msgstr "Nom du challenge"
#: src/accounts/templates/accounts/profile.html:22
#: src/events/templates/events/team.html:21
#: accounts/templates/accounts/profile.html:22
#: events/templates/events/team.html:21
msgid "Category"
msgstr "Catégorie"
#: src/accounts/templates/accounts/profile.html:23
#: src/events/templates/events/team.html:22
#: accounts/templates/accounts/profile.html:23
#: events/templates/events/team.html:22
msgid "Points"
msgstr "Points"
#: src/accounts/templates/accounts/profile.html:24
#: src/ctfs/templates/ctfs/ctf_info.html:66
#: src/events/templates/events/ctf_info.html:67
#: src/events/templates/events/team.html:23
#: accounts/templates/accounts/profile.html:24
#: ctfs/templates/ctfs/ctf_info.html:64
#: events/templates/events/ctf_info.html:67
#: events/templates/events/team.html:23
msgid "Date"
msgstr "Date"
#: src/accounts/templates/accounts/profile.html:39
#: accounts/templates/accounts/profile.html:39
msgid "It seems that this user has not solved any challenge yet..."
msgstr "Il semble que cet utilisateur n'a pas encore résolu de CTF..."
#: src/accounts/templates/accounts/profile.html:47
#: src/events/templates/events/event_info.html:63
#: src/events/templates/events/event_info.html:87
#: src/events/templates/events/manage_team.html:41
#: src/events/templates/events/team.html:46
#: src/scoreboard/templates/scoreboard/scoreboard.html:12
#: accounts/templates/accounts/profile.html:47
#: events/templates/events/event_info.html:63
#: events/templates/events/event_info.html:87
#: events/templates/events/manage_team.html:41
#: events/templates/events/team.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:12
msgid "Rank"
msgstr "Rang"
#: src/accounts/templates/accounts/profile.html:56
#, fuzzy
#| msgid "Members"
msgid "Member"
msgstr "Membres"
#: accounts/templates/accounts/profile.html:56
msgid "Status: Member"
msgstr "Status : Membre"
#: src/accounts/templates/accounts/profile.html:58
#, fuzzy
#| msgid "Status: Visitor"
msgid " Visitor"
#: accounts/templates/accounts/profile.html:58
msgid "Status: Visitor"
msgstr "Status : Visiteur"
#: src/accounts/templates/accounts/profile.html:64
#: src/events/templates/events/team.html:57
#: accounts/templates/accounts/profile.html:64
#: events/templates/events/team.html:57
#, fuzzy
#| msgid "Categories"
msgid "Categories stats"
msgstr "Catégories"
#: src/accounts/templates/accounts/profile.html:81
#, fuzzy
#| msgid "Challenge Name"
msgid "Challenges created"
msgstr "Nom du challenge"
#: src/accounts/templates/accounts/profile.html:87
#, fuzzy
#| msgid "It seems that this user has not solved any challenge yet..."
msgid "It seems that this user has not created any challenge yet..."
msgstr "Il semble que cet utilisateur n'a pas encore résolu de CTF..."
#: src/accounts/templates/accounts/register.html:13
#: accounts/templates/accounts/register.html:13
msgid "Welcome !"
msgstr "Bienvenue !"
#: src/accounts/templates/accounts/register.html:14
#: accounts/templates/accounts/register.html:14
msgid "Your account has been created."
msgstr "Votre compte a été créé."
#: src/accounts/templates/accounts/register.html:25
#: accounts/templates/accounts/register.html:25
msgid "Personal website"
msgstr "Site personnel"
#: src/accounts/templates/accounts/register.html:26
#: src/events/templates/events/event_info.html:119
#: accounts/templates/accounts/register.html:26
#: events/templates/events/event_info.html:119
msgid "Register"
msgstr "Inscription"
#: src/accounts/views/views.py:33
#: accounts/views/views.py:33
msgid "Your account was inactive."
msgstr "Votre compte était inactif."
#: src/accounts/views/views.py:57
#, fuzzy
#| msgid "Your password must contain at least 8 characters."
msgid "The password must be at least 8 characters long."
msgstr "Votre mot de passe doit contenir au moins 8 caractères."
#: src/accounts/views/views.py:67
#: accounts/views/views.py:52
msgid ""
"The password must contain at least one letter and at least one digit or "
"punctuation character."
@ -260,454 +208,433 @@ msgstr ""
"Le mot de passe doit contenir au moins une lettre, un chiffre et un signe de "
"ponctuation."
#: src/accounts/views/views.py:77
#: accounts/views/views.py:54
msgid "A user with that email already exists."
msgstr "Un utilisateur avec cet email existe déjà."
#: src/accounts/views/views.py:99
#: accounts/views/views.py:67
msgid "A user with that username already exists."
msgstr "Un utilisateur avec ce pseudo existe déjà."
#: src/accounts/views/views.py:132
#: accounts/views/views.py:95
msgid "Email already taken."
msgstr "L'adresse mail est déjà utilisée."
#: src/accounts/views/views.py:138
#: accounts/views/views.py:101
msgid "Username already taken."
msgstr "Le pseudo est déjà utilisé."
#: src/accounts/views/views.py:142 src/events/views/teams.py:124
#: accounts/views/views.py:105 events/views/teams.py:124
msgid "Updated."
msgstr "Mis à jour."
#: src/ctfs/templates/ctfs/ctf_info.html:12
#: src/events/templates/events/ctf_info.html:12
#: ctfs/templates/ctfs/ctf_info.html:10
#: events/templates/events/ctf_info.html:12
msgid "Published date"
msgstr "Date de publication"
#: src/ctfs/templates/ctfs/ctf_info.html:16
#: ctfs/templates/ctfs/ctf_info.html:14
#, fuzzy
#| msgid "No category available."
msgid "Challenge is not yet available."
msgstr "Il n'y a pas de catégorie disponible."
#: src/ctfs/templates/ctfs/ctf_info.html:29
#: src/events/templates/events/ctf_info.html:24
#: ctfs/templates/ctfs/ctf_info.html:21
#: events/templates/events/ctf_info.html:18
msgid ""
"No translation available. Please try another language (English or French)."
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:27
#: events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr "Félicitations !"
#: src/ctfs/templates/ctfs/ctf_info.html:31
#: src/events/templates/events/ctf_info.html:26
#: ctfs/templates/ctfs/ctf_info.html:29
#: events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr "Déjà résolu"
#: src/ctfs/templates/ctfs/ctf_info.html:33
#: src/ctfs/templates/ctfs/ctf_info.html:42
#: src/events/templates/events/ctf_info.html:36
#: src/events/templates/events/ctf_info.html:45
#: ctfs/templates/ctfs/ctf_info.html:31 ctfs/templates/ctfs/ctf_info.html:40
#: events/templates/events/ctf_info.html:36
#: events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr "Démarrer le challenge"
#: src/ctfs/templates/ctfs/ctf_info.html:35
#: src/ctfs/templates/ctfs/ctf_info.html:44
#: src/events/templates/events/ctf_info.html:38
#: src/events/templates/events/ctf_info.html:47
#: ctfs/templates/ctfs/ctf_info.html:33 ctfs/templates/ctfs/ctf_info.html:42
#: events/templates/events/ctf_info.html:38
#: events/templates/events/ctf_info.html:47
msgid "Download"
msgstr "Télécharger"
#: src/ctfs/templates/ctfs/ctf_info.html:39
#: src/events/templates/events/ctf_info.html:42
#: ctfs/templates/ctfs/ctf_info.html:37
#: events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr "Mauvais flag ! Vous pouvez le faire !"
#: src/ctfs/templates/ctfs/ctf_info.html:58
#: src/events/templates/events/ctf_info.html:60
#: ctfs/templates/ctfs/ctf_info.html:56
#: events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr "Résolu par"
#: src/ctfs/templates/ctfs/ctf_info.html:82
#: src/events/templates/events/ctf_info.html:90
#: ctfs/templates/ctfs/ctf_info.html:80
#: events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr "Personne n'a résolu ce CTF."
#: src/ctfs/templates/ctfs/ctf_info.html:89
#: src/events/templates/events/ctf_info.html:97
#: ctfs/templates/ctfs/ctf_info.html:87
#: events/templates/events/ctf_info.html:97
msgid "Author"
msgstr "Auteur"
#: src/ctfs/templates/ctfs/ctf_info.html:90
#: src/events/templates/events/ctf_info.html:98
#: ctfs/templates/ctfs/ctf_info.html:88
#: events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr "Points"
#: src/ctfs/templates/ctfs/ctfs_list.html:14
#: ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr "Résolu"
#: src/ctfs/templates/ctfs/ctfs_list.html:37
#: ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr "Il n'y a pas de challenges dans cette catégorie."
#: src/ctfs/templates/ctfs/ctfs_list.html:42
#: ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr "Catégories"
#: src/ctfs/templates/ctfs/ctfs_list.html:48 src/templates/base.html:56
#: ctfs/templates/ctfs/ctfs_list.html:48 templates/base.html:54
msgid "No category available."
msgstr "Il n'y a pas de catégorie disponible."
#: src/events/templates/events/create_team.html:10
#: src/events/templates/events/join_team.html:10
#: events/templates/events/create_team.html:10
#: events/templates/events/join_team.html:10
#, fuzzy
#| msgid "This event start at"
msgid "This event starts at"
msgstr "Cet événement débute à"
#: src/events/templates/events/create_team.html:17
#: src/events/templates/events/join_team.html:17
#: events/templates/events/create_team.html:17
#: events/templates/events/join_team.html:17
#, fuzzy
#| msgid "You're already registered to this event."
msgid "You need to be registered to the event."
msgstr "Vous êtes déjà inscrit à cet événement."
#: src/events/templates/events/create_team.html:20
#: src/events/views/teams.py:120
#: events/templates/events/create_team.html:20 events/views/teams.py:120
#, fuzzy
#| msgid "Username already taken."
msgid "Name already taken."
msgstr "Ce nom est déjà utilisé."
#: src/events/templates/events/create_team.html:26
#: src/events/templates/events/join_team.html:31
#: src/events/templates/events/manage_team.html:22
#: events/templates/events/create_team.html:26
#: events/templates/events/join_team.html:31
#: events/templates/events/manage_team.html:22
msgid "Team name"
msgstr "Nom de l'équipe"
#: src/events/templates/events/create_team.html:28
#: src/events/templates/events/create_team.html:49
#: src/events/templates/events/join_team.html:54
#: events/templates/events/create_team.html:28
#: events/templates/events/create_team.html:49
#: events/templates/events/join_team.html:54
msgid "Create Team"
msgstr "Créer une équipe"
#: src/events/templates/events/create_team.html:33
#: src/events/templates/events/event_pwd.html:44
#: src/events/templates/events/join_team.html:38
#: events/templates/events/create_team.html:33
#: events/templates/events/event_pwd.html:28
#: events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr "Vous devez être connecté pour accéder à cet événement."
#: src/events/templates/events/create_team.html:42
#: src/events/templates/events/event_info.html:113
#: src/events/templates/events/event_pwd.html:52
#: src/events/templates/events/join_team.html:47
#: events/templates/events/create_team.html:42
#: events/templates/events/event_info.html:113
#: events/templates/events/event_pwd.html:36
#: events/templates/events/join_team.html:47
msgid "Starts at"
msgstr "Début"
#: src/events/templates/events/create_team.html:43
#: src/events/templates/events/event_info.html:114
#: src/events/templates/events/event_pwd.html:53
#: src/events/templates/events/join_team.html:48
#: events/templates/events/create_team.html:43
#: events/templates/events/event_info.html:114
#: events/templates/events/event_pwd.html:37
#: events/templates/events/join_team.html:48
msgid "Ends at"
msgstr "Fin"
#: src/events/templates/events/create_team.html:47
#: src/events/templates/events/event_info.html:129
#: src/events/templates/events/join_team.html:52
#: events/templates/events/create_team.html:47
#: events/templates/events/event_info.html:129
#: events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr "Gérer mon équipe"
#: src/events/templates/events/create_team.html:48
#: src/events/templates/events/join_team.html:33
#: src/events/templates/events/join_team.html:53
#: events/templates/events/create_team.html:48
#: events/templates/events/join_team.html:33
#: events/templates/events/join_team.html:53
msgid "Join Team"
msgstr "Rejoindre une équipe"
#: src/events/templates/events/create_team.html:53
#: src/events/templates/events/join_team.html:58
#: events/templates/events/create_team.html:53
#: events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr ""
#: src/events/templates/events/create_team.html:57
#: src/events/templates/events/join_team.html:62
#: events/templates/events/create_team.html:57
#: events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr ""
#: src/events/templates/events/ctf_info.html:10
#: events/templates/events/ctf_info.html:10
msgid "Event"
msgstr "Événement"
#: src/events/templates/events/ctf_info.html:18
msgid ""
"No translation available. Please try another language (English or French)."
msgstr ""
#: src/events/templates/events/ctf_info.html:28
#: src/events/templates/events/event_info.html:18
#: events/templates/events/ctf_info.html:28
#: events/templates/events/event_info.html:18
msgid "This event is over."
msgstr "Cet événement est terminé."
#: src/events/templates/events/ctf_info.html:30
#: events/templates/events/ctf_info.html:30
msgid "Error while processing your request. (Invalid Form)"
msgstr "Erreur lors du traitement de votre requête. (Formulaire non valide)"
#: src/events/templates/events/ctf_info.html:32
#: events/templates/events/ctf_info.html:32
msgid "You must register to the event before submitting flags."
msgstr ""
#: src/events/templates/events/ctf_info.html:34
#: events/templates/events/ctf_info.html:34
msgid ""
"This is a team event, please create or join a team before submitting flags."
msgstr ""
#: src/events/templates/events/event_info.html:9
#: events/templates/events/event_info.html:9
msgid "Subscriptions is over."
msgstr "Les inscriptions sont terminées."
#: src/events/templates/events/event_info.html:12
#: src/events/templates/events/event_pwd.html:33
#: events/templates/events/event_info.html:12
#: events/templates/events/event_pwd.html:18
msgid "You're already registered to this event."
msgstr "Vous êtes déjà inscrit à cet événement."
#: src/events/templates/events/event_info.html:20
#: src/events/templates/events/event_pwd.html:9
#: events/templates/events/event_info.html:20
#: events/templates/events/event_pwd.html:9
msgid "This event start at"
msgstr "Cet événement débute à"
#: src/events/templates/events/event_info.html:30
#: events/templates/events/event_info.html:30
#, fuzzy
#| msgid "Challenge Name"
msgid "Challenges"
msgstr "Nom du challenge"
#: src/events/templates/events/event_info.html:47
#: events/templates/events/event_info.html:47
#, fuzzy
#| msgid "No category available."
msgid "No challenges available."
msgstr "Il n'y a pas de catégorie disponible."
#: src/events/templates/events/event_info.html:51
#: events/templates/events/event_info.html:51
msgid "The event has not started yet."
msgstr "L'événement n'a pas encore commencé."
#: src/events/templates/events/event_info.html:57
#: events/templates/events/event_info.html:57
#, fuzzy
#| msgid "Scoreboard"
msgid "ScoreBoard"
msgstr "Classement"
#: src/events/templates/events/event_info.html:88
#: events/templates/events/event_info.html:88
msgid "Team"
msgstr "Équipe"
#: src/events/templates/events/event_info.html:106
#: events/templates/events/event_info.html:106
msgid "No one have earn point yet, you gonna be the first ?"
msgstr "Personne n'a encore gagné de point, allez-vous être le premier ?"
#: src/events/templates/events/event_pwd.html:16
msgid ""
"This event is reserved for one or more 42 campuses. If you have not "
"connected your intranet to 42CTF, you can do so with this button: "
msgstr ""
#: src/events/templates/events/event_pwd.html:25
msgid ""
"This event is reserved for one or more 42 campuses. And unfortunately your "
"campus can't participate. Do not hesitate to contact us to organize an event "
"on your campus!"
msgstr ""
#: src/events/templates/events/event_pwd.html:30
#: src/events/templates/events/join_team.html:22
#: events/templates/events/event_pwd.html:15
#: events/templates/events/join_team.html:22
msgid "Wrong password submited."
msgstr "Mauvais mot de passe saisi."
#: src/events/templates/events/event_pwd.html:35
#: events/templates/events/event_pwd.html:20
msgid "This event is password protected"
msgstr "Cet événement est protégé par un mot de passe"
#: src/events/templates/events/event_pwd.html:36
#: events/templates/events/event_pwd.html:21
msgid "You need to submit the event password to gain access to this event."
msgstr "Vous devez saisir le mot de passe de l'événement pour y avoir accès."
#: src/events/templates/events/events_list.html:6 src/templates/base.html:65
#: events/templates/events/events_list.html:6 templates/base.html:61
msgid "Events"
msgstr "Événements"
#: src/events/templates/events/events_list.html:38
#: events/templates/events/events_list.html:38
msgid "See more"
msgstr "Voir plus"
#: src/events/templates/events/events_list.html:44
#: events/templates/events/events_list.html:44
msgid "No events available."
msgstr "Pas d'évènement disponible."
#: src/events/templates/events/join_team.html:20
#: events/templates/events/join_team.html:20
msgid "Team does not exist."
msgstr "Cette équipe n'existe pas."
#: src/events/templates/events/join_team.html:24
#: events/templates/events/join_team.html:24
msgid "Maximum size reached."
msgstr "Taille maximale atteinte."
#: src/events/templates/events/manage_team.html:26
#: events/templates/events/manage_team.html:26
msgid "Team password"
msgstr "Mot de passe de l'équipe"
#: src/events/templates/events/manage_team.html:29
msgid "Apply"
msgstr "Appliquer"
#: src/events/templates/events/manage_team.html:44
#: src/events/templates/events/team.html:49
#: events/templates/events/manage_team.html:44
#: events/templates/events/team.html:49
msgid "Members"
msgstr "Membres"
#: src/events/templates/events/manage_team.html:52
#: events/templates/events/manage_team.html:52
msgid "Leave Team"
msgstr "Quitte l'équipe"
#: src/events/templates/events/manage_team.html:59
#: events/templates/events/manage_team.html:59
msgid "Open to automatching"
msgstr ""
#: src/events/templates/events/manage_team.html:66
#: events/templates/events/manage_team.html:66
msgid "Close to automatching"
msgstr ""
#: src/events/templates/events/team.html:38
#: events/templates/events/team.html:38
msgid "It seems that this team has not solved any challenge yet..."
msgstr "Il semble que cette équipe n'a pas encore résolu de challenge..."
#: src/home/templates/home/home.html:21
#: home/templates/home/home.html:21
msgid "Weekly Top 5"
msgstr ""
#: src/home/templates/home/home.html:48
#: home/templates/home/home.html:48
msgid "No article available."
msgstr "Il n'y a pas d'article disponible."
#: src/home/templates/home/home.html:53
#: home/templates/home/home.html:53
msgid "Latest challenges added"
msgstr "Derniers challenges ajoutés"
#: src/home/templates/home/home.html:58
#: home/templates/home/home.html:58
#, fuzzy
#| msgid "Points"
msgid "points"
msgstr "Points"
#: src/home/templates/home/home.html:62
#: home/templates/home/home.html:62
msgid "No ctf available."
msgstr "Pas de challenge disponible"
#: src/home/templates/home/home.html:66
#: home/templates/home/home.html:66
msgid "Latest Flags"
msgstr ""
#: src/home/templates/home/home.html:80
#: home/templates/home/home.html:80
msgid "Flags"
msgstr ""
#: src/home/templates/home/home.html:86
#: home/templates/home/home.html:86
#, fuzzy
#| msgid "Username"
msgid "Users"
msgstr "Pseudo"
#: src/project/settings.py:116
#: project/settings.py:115
msgid "English"
msgstr "Anglais"
#: src/project/settings.py:117
#: project/settings.py:116
msgid "German"
msgstr "Allemand"
#: src/project/settings.py:118
#: project/settings.py:117
msgid "French"
msgstr "Français"
#: src/project/settings.py:119
#: project/settings.py:118
msgid "Russian"
msgstr "Russe"
#: src/project/settings.py:120
#: project/settings.py:119
msgid "Japanese"
msgstr ""
#: src/project/settings.py:121
#: project/settings.py:120
msgid "Spanish"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Campus"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:38
msgid "First"
msgstr "Début"
#: src/scoreboard/templates/scoreboard/scoreboard.html:47
#: scoreboard/templates/scoreboard/scoreboard.html:39
msgid "Previous"
msgstr "Précédente"
#: src/scoreboard/templates/scoreboard/scoreboard.html:51
#: scoreboard/templates/scoreboard/scoreboard.html:43
msgid "Page "
msgstr "Page"
#: src/scoreboard/templates/scoreboard/scoreboard.html:55
#: scoreboard/templates/scoreboard/scoreboard.html:47
msgid "Next"
msgstr "Suivante"
#: src/scoreboard/templates/scoreboard/scoreboard.html:56
#: scoreboard/templates/scoreboard/scoreboard.html:48
msgid "Last"
msgstr "Fin"
#: src/templates/base.html:62
#: templates/base.html:59
msgid "Scoreboard"
msgstr "Classement"
#: src/templates/base.html:83
#, fuzzy
#| msgid "Become a Patron!"
msgid "Become a member"
msgstr "Soutenez nous via Patreon !"
#: templates/base.html:64
msgid "Resources"
msgstr ""
#: src/templates/base.html:93
#: templates/base.html:93
msgid "Logout"
msgstr "Déconnexion"
#: src/templates/base.html:100
#: templates/base.html:100
msgid "Sign Up"
msgstr "Inscription"
#: src/templates/registration/password_reset_complete.html:11
#: templates/base.html:135
msgid "Become a Patron!"
msgstr "Soutenez nous via Patreon !"
#: templates/registration/password_reset_complete.html:11
msgid "Your new password has been set."
msgstr "Votre mot de passe a été mis à jour."
#: src/templates/registration/password_reset_confirm.html:20
#: templates/registration/password_reset_confirm.html:20
msgid "Your password cant be too similar to your other personal information."
msgstr "Votre mot de passe ne peut pas être similaire à votre adresse mail."
#: src/templates/registration/password_reset_confirm.html:21
#: templates/registration/password_reset_confirm.html:21
msgid "Your password must contain at least 8 characters."
msgstr "Votre mot de passe doit contenir au moins 8 caractères."
#: src/templates/registration/password_reset_confirm.html:22
#: templates/registration/password_reset_confirm.html:22
msgid "Your password cant be a commonly used password."
msgstr "Votre mot de passe ne peut pas être un mot de passe commun."
#: src/templates/registration/password_reset_confirm.html:23
#: templates/registration/password_reset_confirm.html:23
msgid "Your password cant be entirely numeric."
msgstr "Votre mot de passe ne peut pas être entièrement numérique."
#: src/templates/registration/password_reset_confirm.html:26
#: templates/registration/password_reset_confirm.html:26
msgid "Confirm"
msgstr "Confirmer"
#: src/templates/registration/password_reset_confirm.html:28
#: templates/registration/password_reset_confirm.html:28
msgid "Submit"
msgstr "Soumettre"
#: src/templates/registration/password_reset_done.html:11
#: templates/registration/password_reset_done.html:11
msgid ""
"We've emailed you instructions for setting your password. You should receive "
"the email shortly!"
@ -715,13 +642,10 @@ msgstr ""
"Vous devrierz recevoir rapidement un email avec des instructions pour "
"réinitialiser votre mot de passe."
#: src/templates/registration/password_reset_form.html:16
#: templates/registration/password_reset_form.html:16
msgid "Reset"
msgstr "Réinitialiser"
#~ msgid "Status: Member"
#~ msgstr "Status : Membre"
#~ msgid ""
#~ "Error: you're not registered to this event, so you can't register scores, "
#~ "fucking logic."
@ -739,3 +663,9 @@ msgstr "Réinitialiser"
#~ msgid "End at"
#~ msgstr "Fin"
#~ msgid "Disconnect Discord"
#~ msgstr "Déconnecter Discord"
#~ msgid "Connect Discord"
#~ msgstr "Connecter Discord"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,653 +18,600 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/accounts/templates/accounts/delete.html:8
#: accounts/templates/accounts/delete.html:8
msgid "Delete account"
msgstr ""
#: src/accounts/templates/accounts/delete.html:11
#: accounts/templates/accounts/delete.html:11
msgid "Please confirm your password to delete your account."
msgstr ""
#: src/accounts/templates/accounts/delete.html:12
#: accounts/templates/accounts/delete.html:12
msgid "Deleted accounts cannot be recovered."
msgstr ""
#: src/accounts/templates/accounts/delete.html:15
msgid "Password incorrect."
#: accounts/templates/accounts/delete.html:15
msgid "Password inccorect."
msgstr ""
#: src/accounts/templates/accounts/delete.html:17
#: accounts/templates/accounts/delete.html:17
msgid "Your account has been deleted."
msgstr ""
#: src/accounts/templates/accounts/delete.html:22
#: src/accounts/templates/accounts/login.html:19
#: src/accounts/templates/accounts/register.html:23
#: src/events/templates/events/create_team.html:27
#: src/events/templates/events/join_team.html:32
#: accounts/templates/accounts/delete.html:22
#: accounts/templates/accounts/login.html:19
#: accounts/templates/accounts/register.html:23
#: events/templates/events/create_team.html:27
#: events/templates/events/join_team.html:32
msgid "Password"
msgstr ""
#: src/accounts/templates/accounts/edit.html:21
#: src/accounts/templates/accounts/login.html:18
#: src/accounts/templates/accounts/register.html:22
#: src/ctfs/templates/ctfs/ctf_info.html:63
#: src/ctfs/templates/ctfs/ctfs_list.html:12
#: src/events/templates/events/ctf_info.html:65
#: src/events/templates/events/event_info.html:64
#: src/scoreboard/templates/scoreboard/scoreboard.html:13
#: accounts/templates/accounts/edit.html:21
#: accounts/templates/accounts/login.html:18
#: accounts/templates/accounts/register.html:22
#: ctfs/templates/ctfs/ctf_info.html:61 ctfs/templates/ctfs/ctfs_list.html:12
#: events/templates/events/ctf_info.html:65
#: events/templates/events/event_info.html:64
#: scoreboard/templates/scoreboard/scoreboard.html:13
msgid "Username"
msgstr ""
#: src/accounts/templates/accounts/edit.html:25
#: accounts/templates/accounts/edit.html:25
msgid "Email"
msgstr ""
#: src/accounts/templates/accounts/edit.html:30
#: src/ctfs/templates/ctfs/ctf_info.html:64
#: src/events/templates/events/ctf_info.html:66
#: src/events/templates/events/event_info.html:65
#: src/scoreboard/templates/scoreboard/scoreboard.html:14
#: accounts/templates/accounts/edit.html:30
#: ctfs/templates/ctfs/ctf_info.html:62
#: events/templates/events/ctf_info.html:66
#: events/templates/events/event_info.html:65
#: scoreboard/templates/scoreboard/scoreboard.html:14
msgid "Website"
msgstr ""
#: src/accounts/templates/accounts/edit.html:36
msgid " Apply"
#: accounts/templates/accounts/edit.html:36
#: events/templates/events/manage_team.html:29
msgid "Apply"
msgstr ""
#: src/accounts/templates/accounts/edit.html:45
msgid "Connected accounts"
msgstr ""
#: src/accounts/templates/accounts/edit.html:53
msgid "Disconnect Discord"
msgstr ""
#: src/accounts/templates/accounts/edit.html:59
msgid "Connect Discord"
msgstr ""
#: src/accounts/templates/accounts/edit.html:68
msgid "Disconnect 42"
msgstr ""
#: src/accounts/templates/accounts/edit.html:74
#: src/events/templates/events/event_pwd.html:19
msgid "Connect 42"
msgstr ""
#: src/accounts/templates/accounts/edit.html:85
#: src/accounts/templates/accounts/profile.html:46
#: src/ctfs/templates/ctfs/ctf_info.html:65
#: src/ctfs/templates/ctfs/ctfs_list.html:13
#: src/events/templates/events/event_info.html:66
#: src/events/templates/events/event_info.html:89
#: src/events/templates/events/manage_team.html:40
#: src/events/templates/events/team.html:45
#: src/scoreboard/templates/scoreboard/scoreboard.html:16
#: accounts/templates/accounts/edit.html:47
#: accounts/templates/accounts/profile.html:46
#: ctfs/templates/ctfs/ctf_info.html:63 ctfs/templates/ctfs/ctfs_list.html:13
#: events/templates/events/event_info.html:66
#: events/templates/events/event_info.html:89
#: events/templates/events/manage_team.html:40
#: events/templates/events/team.html:45
#: scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Score"
msgstr ""
#: src/accounts/templates/accounts/edit.html:93
#: src/accounts/templates/accounts/profile.html:60
#: accounts/templates/accounts/edit.html:55
#: accounts/templates/accounts/profile.html:60
msgid "Registered since"
msgstr ""
#: src/accounts/templates/accounts/edit.html:99
msgid " Delete my account"
#: accounts/templates/accounts/edit.html:61
msgid "Delete my account"
msgstr ""
#: src/accounts/templates/accounts/login.html:13
#: accounts/templates/accounts/login.html:13
msgid "Please, verify your infos."
msgstr ""
#: src/accounts/templates/accounts/login.html:22
#: accounts/templates/accounts/login.html:22
msgid "Reset password"
msgstr ""
#: src/accounts/templates/accounts/login.html:31
#: src/accounts/templates/accounts/register.html:37 src/templates/base.html:97
#: src/templates/registration/password_reset_complete.html:18
#: src/templates/registration/password_reset_confirm.html:38
#: src/templates/registration/password_reset_done.html:18
#: src/templates/registration/password_reset_form.html:26
#: accounts/templates/accounts/login.html:31
#: accounts/templates/accounts/register.html:38 templates/base.html:97
#: templates/registration/password_reset_complete.html:18
#: templates/registration/password_reset_confirm.html:38
#: templates/registration/password_reset_done.html:18
#: templates/registration/password_reset_form.html:26
msgid "Login"
msgstr ""
#: src/accounts/templates/accounts/login.html:32
#: src/accounts/templates/accounts/register.html:36
#: src/templates/registration/password_reset_complete.html:19
#: src/templates/registration/password_reset_confirm.html:39
#: src/templates/registration/password_reset_done.html:19
#: src/templates/registration/password_reset_form.html:27
#: accounts/templates/accounts/login.html:32
#: accounts/templates/accounts/register.html:37
#: templates/registration/password_reset_complete.html:19
#: templates/registration/password_reset_confirm.html:39
#: templates/registration/password_reset_done.html:19
#: templates/registration/password_reset_form.html:27
msgid "Sign up"
msgstr ""
#: src/accounts/templates/accounts/profile.html:10
#: accounts/templates/accounts/profile.html:10
msgid "Challenges Solved by"
msgstr ""
#: src/accounts/templates/accounts/profile.html:21
#: src/events/templates/events/team.html:20
#: accounts/templates/accounts/profile.html:21
#: events/templates/events/team.html:20
msgid "Challenge Name"
msgstr ""
#: src/accounts/templates/accounts/profile.html:22
#: src/events/templates/events/team.html:21
#: accounts/templates/accounts/profile.html:22
#: events/templates/events/team.html:21
msgid "Category"
msgstr ""
#: src/accounts/templates/accounts/profile.html:23
#: src/events/templates/events/team.html:22
#: accounts/templates/accounts/profile.html:23
#: events/templates/events/team.html:22
msgid "Points"
msgstr ""
#: src/accounts/templates/accounts/profile.html:24
#: src/ctfs/templates/ctfs/ctf_info.html:66
#: src/events/templates/events/ctf_info.html:67
#: src/events/templates/events/team.html:23
#: accounts/templates/accounts/profile.html:24
#: ctfs/templates/ctfs/ctf_info.html:64
#: events/templates/events/ctf_info.html:67
#: events/templates/events/team.html:23
msgid "Date"
msgstr ""
#: src/accounts/templates/accounts/profile.html:39
#: accounts/templates/accounts/profile.html:39
msgid "It seems that this user has not solved any challenge yet..."
msgstr ""
#: src/accounts/templates/accounts/profile.html:47
#: src/events/templates/events/event_info.html:63
#: src/events/templates/events/event_info.html:87
#: src/events/templates/events/manage_team.html:41
#: src/events/templates/events/team.html:46
#: src/scoreboard/templates/scoreboard/scoreboard.html:12
#: accounts/templates/accounts/profile.html:47
#: events/templates/events/event_info.html:63
#: events/templates/events/event_info.html:87
#: events/templates/events/manage_team.html:41
#: events/templates/events/team.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:12
msgid "Rank"
msgstr ""
#: src/accounts/templates/accounts/profile.html:56
msgid "Member"
#: accounts/templates/accounts/profile.html:56
msgid "Status: Member"
msgstr ""
#: src/accounts/templates/accounts/profile.html:58
msgid " Visitor"
#: accounts/templates/accounts/profile.html:58
msgid "Status: Visitor"
msgstr ""
#: src/accounts/templates/accounts/profile.html:64
#: src/events/templates/events/team.html:57
#: accounts/templates/accounts/profile.html:64
#: events/templates/events/team.html:57
msgid "Categories stats"
msgstr ""
#: src/accounts/templates/accounts/profile.html:81
msgid "Challenges created"
msgstr ""
#: src/accounts/templates/accounts/profile.html:87
msgid "It seems that this user has not created any challenge yet..."
msgstr ""
#: src/accounts/templates/accounts/register.html:13
#: accounts/templates/accounts/register.html:13
msgid "Welcome !"
msgstr ""
#: src/accounts/templates/accounts/register.html:14
#: accounts/templates/accounts/register.html:14
msgid "Your account has been created."
msgstr ""
#: src/accounts/templates/accounts/register.html:25
#: accounts/templates/accounts/register.html:25
msgid "Personal website"
msgstr ""
#: src/accounts/templates/accounts/register.html:26
#: src/events/templates/events/event_info.html:119
#: accounts/templates/accounts/register.html:26
#: events/templates/events/event_info.html:119
msgid "Register"
msgstr ""
#: src/accounts/views/views.py:33
#: accounts/views/views.py:33
msgid "Your account was inactive."
msgstr ""
#: src/accounts/views/views.py:57
msgid "The password must be at least 8 characters long."
msgstr ""
#: src/accounts/views/views.py:67
#: accounts/views/views.py:52
msgid ""
"The password must contain at least one letter and at least one digit or "
"punctuation character."
msgstr ""
#: src/accounts/views/views.py:77
#: accounts/views/views.py:54
msgid "A user with that email already exists."
msgstr ""
#: src/accounts/views/views.py:99
#: accounts/views/views.py:67
msgid "A user with that username already exists."
msgstr ""
#: src/accounts/views/views.py:132
#: accounts/views/views.py:95
msgid "Email already taken."
msgstr ""
#: src/accounts/views/views.py:138
#: accounts/views/views.py:101
msgid "Username already taken."
msgstr ""
#: src/accounts/views/views.py:142 src/events/views/teams.py:124
#: accounts/views/views.py:105 events/views/teams.py:124
msgid "Updated."
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:12
#: src/events/templates/events/ctf_info.html:12
#: ctfs/templates/ctfs/ctf_info.html:10
#: events/templates/events/ctf_info.html:12
msgid "Published date"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:16
#: ctfs/templates/ctfs/ctf_info.html:14
msgid "Challenge is not yet available."
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:29
#: src/events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:31
#: src/events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:33
#: src/ctfs/templates/ctfs/ctf_info.html:42
#: src/events/templates/events/ctf_info.html:36
#: src/events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:35
#: src/ctfs/templates/ctfs/ctf_info.html:44
#: src/events/templates/events/ctf_info.html:38
#: src/events/templates/events/ctf_info.html:47
msgid "Download"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:39
#: src/events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:58
#: src/events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:82
#: src/events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:89
#: src/events/templates/events/ctf_info.html:97
msgid "Author"
msgstr ""
#: src/ctfs/templates/ctfs/ctf_info.html:90
#: src/events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr ""
#: src/ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr ""
#: src/ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr ""
#: src/ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr ""
#: src/ctfs/templates/ctfs/ctfs_list.html:48 src/templates/base.html:56
msgid "No category available."
msgstr ""
#: src/events/templates/events/create_team.html:10
#: src/events/templates/events/join_team.html:10
msgid "This event starts at"
msgstr ""
#: src/events/templates/events/create_team.html:17
#: src/events/templates/events/join_team.html:17
msgid "You need to be registered to the event."
msgstr ""
#: src/events/templates/events/create_team.html:20
#: src/events/views/teams.py:120
msgid "Name already taken."
msgstr ""
#: src/events/templates/events/create_team.html:26
#: src/events/templates/events/join_team.html:31
#: src/events/templates/events/manage_team.html:22
msgid "Team name"
msgstr ""
#: src/events/templates/events/create_team.html:28
#: src/events/templates/events/create_team.html:49
#: src/events/templates/events/join_team.html:54
msgid "Create Team"
msgstr ""
#: src/events/templates/events/create_team.html:33
#: src/events/templates/events/event_pwd.html:44
#: src/events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr ""
#: src/events/templates/events/create_team.html:42
#: src/events/templates/events/event_info.html:113
#: src/events/templates/events/event_pwd.html:52
#: src/events/templates/events/join_team.html:47
msgid "Starts at"
msgstr ""
#: src/events/templates/events/create_team.html:43
#: src/events/templates/events/event_info.html:114
#: src/events/templates/events/event_pwd.html:53
#: src/events/templates/events/join_team.html:48
msgid "Ends at"
msgstr ""
#: src/events/templates/events/create_team.html:47
#: src/events/templates/events/event_info.html:129
#: src/events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr ""
#: src/events/templates/events/create_team.html:48
#: src/events/templates/events/join_team.html:33
#: src/events/templates/events/join_team.html:53
msgid "Join Team"
msgstr ""
#: src/events/templates/events/create_team.html:53
#: src/events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr ""
#: src/events/templates/events/create_team.html:57
#: src/events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr ""
#: src/events/templates/events/ctf_info.html:10
msgid "Event"
msgstr ""
#: src/events/templates/events/ctf_info.html:18
#: ctfs/templates/ctfs/ctf_info.html:21
#: events/templates/events/ctf_info.html:18
msgid ""
"No translation available. Please try another language (English or French)."
msgstr ""
#: src/events/templates/events/ctf_info.html:28
#: src/events/templates/events/event_info.html:18
#: ctfs/templates/ctfs/ctf_info.html:27
#: events/templates/events/ctf_info.html:24
msgid "Congratulation !"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:29
#: events/templates/events/ctf_info.html:26
msgid "Already flagged"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:31 ctfs/templates/ctfs/ctf_info.html:40
#: events/templates/events/ctf_info.html:36
#: events/templates/events/ctf_info.html:45
msgid "Start the challenge"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:33 ctfs/templates/ctfs/ctf_info.html:42
#: events/templates/events/ctf_info.html:38
#: events/templates/events/ctf_info.html:47
msgid "Download"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:37
#: events/templates/events/ctf_info.html:42
msgid "Wrong flag ! You can do it !"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:56
#: events/templates/events/ctf_info.html:60
msgid "Solved by"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:80
#: events/templates/events/ctf_info.html:90
msgid "Nobody has solved this challenge yet."
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:87
#: events/templates/events/ctf_info.html:97
msgid "Author"
msgstr ""
#: ctfs/templates/ctfs/ctf_info.html:88
#: events/templates/events/ctf_info.html:98
msgid "Point reward"
msgstr ""
#: ctfs/templates/ctfs/ctfs_list.html:14
msgid "Solved"
msgstr ""
#: ctfs/templates/ctfs/ctfs_list.html:37
msgid "No ctf available for this category."
msgstr ""
#: ctfs/templates/ctfs/ctfs_list.html:42
msgid "Categories"
msgstr ""
#: ctfs/templates/ctfs/ctfs_list.html:48 templates/base.html:54
msgid "No category available."
msgstr ""
#: events/templates/events/create_team.html:10
#: events/templates/events/join_team.html:10
msgid "This event starts at"
msgstr ""
#: events/templates/events/create_team.html:17
#: events/templates/events/join_team.html:17
msgid "You need to be registered to the event."
msgstr ""
#: events/templates/events/create_team.html:20 events/views/teams.py:120
msgid "Name already taken."
msgstr ""
#: events/templates/events/create_team.html:26
#: events/templates/events/join_team.html:31
#: events/templates/events/manage_team.html:22
msgid "Team name"
msgstr ""
#: events/templates/events/create_team.html:28
#: events/templates/events/create_team.html:49
#: events/templates/events/join_team.html:54
msgid "Create Team"
msgstr ""
#: events/templates/events/create_team.html:33
#: events/templates/events/event_pwd.html:28
#: events/templates/events/join_team.html:38
msgid "You need to be logged to access this event."
msgstr ""
#: events/templates/events/create_team.html:42
#: events/templates/events/event_info.html:113
#: events/templates/events/event_pwd.html:36
#: events/templates/events/join_team.html:47
msgid "Starts at"
msgstr ""
#: events/templates/events/create_team.html:43
#: events/templates/events/event_info.html:114
#: events/templates/events/event_pwd.html:37
#: events/templates/events/join_team.html:48
msgid "Ends at"
msgstr ""
#: events/templates/events/create_team.html:47
#: events/templates/events/event_info.html:129
#: events/templates/events/join_team.html:52
msgid "Manage my team"
msgstr ""
#: events/templates/events/create_team.html:48
#: events/templates/events/join_team.html:33
#: events/templates/events/join_team.html:53
msgid "Join Team"
msgstr ""
#: events/templates/events/create_team.html:53
#: events/templates/events/join_team.html:58
msgid "Auto-matching"
msgstr ""
#: events/templates/events/create_team.html:57
#: events/templates/events/join_team.html:62
msgid "Find me a team !"
msgstr ""
#: events/templates/events/ctf_info.html:10
msgid "Event"
msgstr ""
#: events/templates/events/ctf_info.html:28
#: events/templates/events/event_info.html:18
msgid "This event is over."
msgstr ""
#: src/events/templates/events/ctf_info.html:30
#: events/templates/events/ctf_info.html:30
msgid "Error while processing your request. (Invalid Form)"
msgstr ""
#: src/events/templates/events/ctf_info.html:32
#: events/templates/events/ctf_info.html:32
msgid "You must register to the event before submitting flags."
msgstr ""
#: src/events/templates/events/ctf_info.html:34
#: events/templates/events/ctf_info.html:34
msgid ""
"This is a team event, please create or join a team before submitting flags."
msgstr ""
#: src/events/templates/events/event_info.html:9
#: events/templates/events/event_info.html:9
msgid "Subscriptions is over."
msgstr ""
#: src/events/templates/events/event_info.html:12
#: src/events/templates/events/event_pwd.html:33
#: events/templates/events/event_info.html:12
#: events/templates/events/event_pwd.html:18
msgid "You're already registered to this event."
msgstr ""
#: src/events/templates/events/event_info.html:20
#: src/events/templates/events/event_pwd.html:9
#: events/templates/events/event_info.html:20
#: events/templates/events/event_pwd.html:9
msgid "This event start at"
msgstr ""
#: src/events/templates/events/event_info.html:30
#: events/templates/events/event_info.html:30
msgid "Challenges"
msgstr ""
#: src/events/templates/events/event_info.html:47
#: events/templates/events/event_info.html:47
msgid "No challenges available."
msgstr ""
#: src/events/templates/events/event_info.html:51
#: events/templates/events/event_info.html:51
msgid "The event has not started yet."
msgstr ""
#: src/events/templates/events/event_info.html:57
#: events/templates/events/event_info.html:57
msgid "ScoreBoard"
msgstr ""
#: src/events/templates/events/event_info.html:88
#: events/templates/events/event_info.html:88
msgid "Team"
msgstr ""
#: src/events/templates/events/event_info.html:106
#: events/templates/events/event_info.html:106
msgid "No one have earn point yet, you gonna be the first ?"
msgstr ""
#: src/events/templates/events/event_pwd.html:16
msgid ""
"This event is reserved for one or more 42 campuses. If you have not "
"connected your intranet to 42CTF, you can do so with this button: "
msgstr ""
#: src/events/templates/events/event_pwd.html:25
msgid ""
"This event is reserved for one or more 42 campuses. And unfortunately your "
"campus can't participate. Do not hesitate to contact us to organize an event "
"on your campus!"
msgstr ""
#: src/events/templates/events/event_pwd.html:30
#: src/events/templates/events/join_team.html:22
#: events/templates/events/event_pwd.html:15
#: events/templates/events/join_team.html:22
msgid "Wrong password submited."
msgstr ""
#: src/events/templates/events/event_pwd.html:35
#: events/templates/events/event_pwd.html:20
msgid "This event is password protected"
msgstr ""
#: src/events/templates/events/event_pwd.html:36
#: events/templates/events/event_pwd.html:21
msgid "You need to submit the event password to gain access to this event."
msgstr ""
#: src/events/templates/events/events_list.html:6 src/templates/base.html:65
#: events/templates/events/events_list.html:6 templates/base.html:61
msgid "Events"
msgstr ""
#: src/events/templates/events/events_list.html:38
#: events/templates/events/events_list.html:38
msgid "See more"
msgstr ""
#: src/events/templates/events/events_list.html:44
#: events/templates/events/events_list.html:44
msgid "No events available."
msgstr ""
#: src/events/templates/events/join_team.html:20
#: events/templates/events/join_team.html:20
msgid "Team does not exist."
msgstr ""
#: src/events/templates/events/join_team.html:24
#: events/templates/events/join_team.html:24
msgid "Maximum size reached."
msgstr ""
#: src/events/templates/events/manage_team.html:26
#: events/templates/events/manage_team.html:26
msgid "Team password"
msgstr ""
#: src/events/templates/events/manage_team.html:29
msgid "Apply"
msgstr ""
#: src/events/templates/events/manage_team.html:44
#: src/events/templates/events/team.html:49
#: events/templates/events/manage_team.html:44
#: events/templates/events/team.html:49
msgid "Members"
msgstr ""
#: src/events/templates/events/manage_team.html:52
#: events/templates/events/manage_team.html:52
msgid "Leave Team"
msgstr ""
#: src/events/templates/events/manage_team.html:59
#: events/templates/events/manage_team.html:59
msgid "Open to automatching"
msgstr ""
#: src/events/templates/events/manage_team.html:66
#: events/templates/events/manage_team.html:66
msgid "Close to automatching"
msgstr ""
#: src/events/templates/events/team.html:38
#: events/templates/events/team.html:38
msgid "It seems that this team has not solved any challenge yet..."
msgstr ""
#: src/home/templates/home/home.html:21
#: home/templates/home/home.html:21
msgid "Weekly Top 5"
msgstr ""
#: src/home/templates/home/home.html:48
#: home/templates/home/home.html:48
msgid "No article available."
msgstr ""
#: src/home/templates/home/home.html:53
#: home/templates/home/home.html:53
msgid "Latest challenges added"
msgstr ""
#: src/home/templates/home/home.html:58
#: home/templates/home/home.html:58
msgid "points"
msgstr ""
#: src/home/templates/home/home.html:62
#: home/templates/home/home.html:62
msgid "No ctf available."
msgstr ""
#: src/home/templates/home/home.html:66
#: home/templates/home/home.html:66
msgid "Latest Flags"
msgstr ""
#: src/home/templates/home/home.html:80
#: home/templates/home/home.html:80
msgid "Flags"
msgstr ""
#: src/home/templates/home/home.html:86
#: home/templates/home/home.html:86
msgid "Users"
msgstr ""
#: src/project/settings.py:116
#: project/settings.py:115
msgid "English"
msgstr ""
#: src/project/settings.py:117
#: project/settings.py:116
msgid "German"
msgstr ""
#: src/project/settings.py:118
#: project/settings.py:117
msgid "French"
msgstr ""
#: src/project/settings.py:119
#: project/settings.py:118
msgid "Russian"
msgstr ""
#: src/project/settings.py:120
#: project/settings.py:119
msgid "Japanese"
msgstr ""
#: src/project/settings.py:121
#: project/settings.py:120
msgid "Spanish"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:15
msgid "Campus"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:46
#: scoreboard/templates/scoreboard/scoreboard.html:38
msgid "First"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:47
#: scoreboard/templates/scoreboard/scoreboard.html:39
msgid "Previous"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:51
#: scoreboard/templates/scoreboard/scoreboard.html:43
msgid "Page "
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:55
#: scoreboard/templates/scoreboard/scoreboard.html:47
msgid "Next"
msgstr ""
#: src/scoreboard/templates/scoreboard/scoreboard.html:56
#: scoreboard/templates/scoreboard/scoreboard.html:48
msgid "Last"
msgstr ""
#: src/templates/base.html:62
#: templates/base.html:59
msgid "Scoreboard"
msgstr ""
#: src/templates/base.html:83
msgid "Become a member"
#: templates/base.html:64
msgid "Resources"
msgstr ""
#: src/templates/base.html:93
#: templates/base.html:93
msgid "Logout"
msgstr ""
#: src/templates/base.html:100
#: templates/base.html:100
msgid "Sign Up"
msgstr ""
#: src/templates/registration/password_reset_complete.html:11
#: templates/base.html:135
msgid "Become a Patron!"
msgstr ""
#: templates/registration/password_reset_complete.html:11
msgid "Your new password has been set."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:20
#: templates/registration/password_reset_confirm.html:20
msgid "Your password cant be too similar to your other personal information."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:21
#: templates/registration/password_reset_confirm.html:21
msgid "Your password must contain at least 8 characters."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:22
#: templates/registration/password_reset_confirm.html:22
msgid "Your password cant be a commonly used password."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:23
#: templates/registration/password_reset_confirm.html:23
msgid "Your password cant be entirely numeric."
msgstr ""
#: src/templates/registration/password_reset_confirm.html:26
#: templates/registration/password_reset_confirm.html:26
msgid "Confirm"
msgstr ""
#: src/templates/registration/password_reset_confirm.html:28
#: templates/registration/password_reset_confirm.html:28
msgid "Submit"
msgstr ""
#: src/templates/registration/password_reset_done.html:11
#: templates/registration/password_reset_done.html:11
msgid ""
"We've emailed you instructions for setting your password. You should receive "
"the email shortly!"
msgstr ""
#: src/templates/registration/password_reset_form.html:16
#: templates/registration/password_reset_form.html:16
msgid "Reset"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -38,8 +38,6 @@ INSTALLED_APPS = [
'scoreboard.apps.ScoreboardConfig',
'resources.apps.ResourcesConfig',
'django.contrib.sites',
'api.apps.ApiConfig',
'django.contrib.sitemaps',
]
MIDDLEWARE = [
@ -152,10 +150,7 @@ TEMPLATES[0]['OPTIONS']['context_processors'].append("ctfs.context_processors.ca
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
LOGIN_URL = '/accounts/signin/'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'mail.42ctf.local'
EMAIL_BACKEND = 'django_mailjet.backends.MailjetBackend'
EMAIL_HOST = 'in-v3.mailjet.com'
EMAIL_PORT = 587
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>'
DEFAULT_FROM_EMAIL = '42ctf <no-reply@42ctf.org>'

View File

@ -24,7 +24,6 @@ urlpatterns = [
path('', include('home.urls')),
path('set_lang/<str:lang_code>', home.views.set_language, name="set_language"),
path('dashboard/secret/admin', admin.site.urls),
path('api/', include('api.urls'))
]
urlpatterns += i18n_patterns(

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: 2022-02-10 19:27+0100\n"
"Last-Translator: Clément Hamada <clementhamada@pm.me>\n"
"Language-Team: \n"
@ -17,15 +17,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/resources/templates/resources/about.html:11
#: resources/templates/resources/42ctf.html:7
msgid "What is 42CTF ?"
msgstr "Was ist 42CTF?"
#: src/resources/templates/resources/about.html:14
#: resources/templates/resources/42ctf.html:10
msgid "A short introduction to CTF"
msgstr "Eine kurze Einführung zu CTF"
#: src/resources/templates/resources/about.html:15
#: resources/templates/resources/42ctf.html:11
msgid ""
"CTF stands for Capture The Flag. It is a cybersecurity competition, where "
"participants have to solve challenges of various categories to gain points "
@ -35,40 +35,38 @@ msgstr ""
"indem Teilnehmer Herausforderungen verschiedener Kategorien lösen müssen um "
"die meisten Punkte zu verdienen."
#: src/resources/templates/resources/about.html:16
msgid ""
"The challenges require participants to find sort of passwords called \"flags"
"\" and to submit them on the platform."
#: resources/templates/resources/42ctf.html:12
msgid "The challenges require participants to find sort of passwords called \\"
msgstr ""
"Die Herausforderungen bestehen darin eine Art Passwort zu finden: sogenannte "
"\\"
#: src/resources/templates/resources/about.html:19
#: resources/templates/resources/42ctf.html:15
msgid "Functionment of 42CTF"
msgstr "Funktionsweise von 42CTF"
#: src/resources/templates/resources/about.html:20
#: resources/templates/resources/42ctf.html:16
msgid "42CTF is what we call a permanent CTF."
msgstr "42CTF ist ein sogenanntes Dauer-CTF."
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "Except from the"
msgstr "Außer bei"
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "events"
msgstr "Ereignissen"
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "challenges are available on the platform without time limitations."
msgstr "sind Herausforderungen auf der Plattform unbegrenzt zugänglich."
#: src/resources/templates/resources/about.html:22
#: resources/templates/resources/42ctf.html:18
msgid "The registration on 42CTF is open to everyone, 42 students or not."
msgstr ""
"Die Registrierung bei 42CTF ist für jeden offen, ob 42-Student oder nicht."
#: src/resources/templates/resources/about.html:23
#: resources/templates/resources/42ctf.html:19
msgid ""
"Events may or may not be open. If you would like to organize an event on "
"42CTF, feel free to contact us."
@ -76,26 +74,26 @@ msgstr ""
"Ereignisse können öffentlich oder privat sein. Wenn Sie ein Ereignis bei "
"42CTF organisieren möchten, kontaktieren Sie uns."
#: src/resources/templates/resources/about.html:26
#: resources/templates/resources/42ctf.html:22
msgid "42CTF Team"
msgstr "das 42CTF Team"
#: src/resources/templates/resources/about.html:27
#: resources/templates/resources/42ctf.html:23
msgid "42CTF is managed by 42 students."
msgstr "42CTF wird von 42-Studenten verwaltet."
#: src/resources/templates/resources/about.html:28
#: resources/templates/resources/42ctf.html:24
msgid "You can meet the team on"
msgstr "Treffen können Sie das Team auf"
#: src/resources/templates/resources/about.html:29
#: resources/templates/resources/42ctf.html:25
msgid ""
"Challenges are created by various contributors, not necessarily 42 students."
msgstr ""
"Herausforderungen werden von verschiedenen Mitwirkende beigetragen, nicht "
"zwingend 42-Studenten."
#: src/resources/templates/resources/about.html:30
#: resources/templates/resources/42ctf.html:26
msgid ""
"Anyone is welcome to submit their own challenges, either on the permanent "
"CTF or for a specific event."
@ -103,90 +101,23 @@ msgstr ""
"Beiträge sind von jedem willkommen, entweder auf dem Dauer-CTF, oder für ein "
"bestimmtes Ereignis."
#: src/resources/templates/resources/becomeMember.html:8
msgid "Become a 42CTF member"
msgstr "42CTF-Mitglied werden"
#: src/resources/templates/resources/becomeMember.html:13
#, fuzzy
#| msgid "Become a 42CTF member"
msgid "Why should I become a 42CTF member ?"
msgstr "42CTF-Mitglied werden"
#: src/resources/templates/resources/becomeMember.html:18
msgid ""
"\n"
" 42CTF is a non-profit organization with a legal status under "
"the french law (Association loi 1901).<br>\n"
" Running a CTF platform costs money, and we are not currently "
"funded by anyone except you.<br>\n"
" You can become a 42CTF member if you want to support our "
"activity :)\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:27
msgid "I want to be a member !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:30
msgid ""
"You're welcome ! To become a member, all you need to do is to donate us 15 "
"euros and your membership will last for a year."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:36
msgid "If you want to use another payment method, please contact us !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:43
msgid "What do I get ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:45
msgid ""
"\n"
" - A <span class='is-member'>different color</span> for your "
"pseudo in the scoreboard, to let everyone know you're a member.<br>\n"
" - The possibility to play past CTF, with challenges no longer "
"available, in the form of private events with the people of your choice."
"<br>\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:51
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
"Weitere Vorteile können später folgen, und Sie können uns Ihre Ideen "
"mitteilen."
#: src/resources/templates/resources/becomeMember.html:56
msgid "How do I claim it ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:59
msgid ""
"Once you've donated the 15 euros, you just need to contact us on discord or "
"by mail:"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:7
#: resources/templates/resources/create_challenge.html:7
msgid "Create new challenges"
msgstr "Erstelle neue Herausforderungen"
#: src/resources/templates/resources/create_challenge.html:10
#: resources/templates/resources/create_challenge.html:10
msgid "If you want to create new challenges for 42CTF, send us a message on "
msgstr ""
"Falls Sie Herausforderungen für 42CTF erstellen möchten, schicken Sie uns "
"eine Nachricht auf "
#: src/resources/templates/resources/create_challenge.html:11
#: resources/templates/resources/create_challenge.html:11
msgid "If your challenge is offline, then you don't have to ask us in advance."
msgstr ""
"Falls Ihre Herausforderung offline ist, müssen Sie uns nicht im voraus "
"fragen."
#: src/resources/templates/resources/create_challenge.html:12
#: resources/templates/resources/create_challenge.html:12
msgid ""
"If your challenge is online (for example web or pwn), then you should give "
"us a short description of what you want to do."
@ -194,22 +125,105 @@ msgstr ""
"Falls Ihre Herausforderung online ist (z.B. web oder pwn), dann sollten Sie "
"uns eine kurze Beschreibung Ihres Vorhabens geben."
#: src/resources/templates/resources/create_challenge.html:13
#: resources/templates/resources/create_challenge.html:13
msgid ""
"We may be able to help you or to give you resources such as dockerfiles."
msgstr ""
"Wir können Ihnen helfen oder Ressourcen sowie Dockerfiles zur Verfügung "
"stellen."
#: src/resources/templates/resources/create_challenge.html:14
#: resources/templates/resources/create_challenge.html:14
msgid "We plan to make those resources publicly available in a near future."
msgstr "Wir haben vor diese Ressourcen in naher Zukunft zu veröffentlichen."
#: src/resources/templates/resources/donate.html:7
#: resources/templates/resources/donate.html:7
msgid "Donate"
msgstr "Spenden"
#: src/resources/templates/resources/donate.html:14
#: resources/templates/resources/donate.html:10
msgid "Become a 42CTF member"
msgstr "42CTF-Mitglied werden"
#: resources/templates/resources/donate.html:11
msgid ""
"42CTF is a non-profit organization with a legal status under the french law "
"(Association loi 1901)."
msgstr ""
"42CTF ist eine gemeinnützige Organisation mit einem Rechtsstatus nach "
"französischem Recht (Association loi 1901)."
#: resources/templates/resources/donate.html:12
msgid "You can support us by becoming a member and paying a fee of 15 euros."
msgstr ""
"Sie können uns unterstützen indem Sie Mitglied werden und 15 Euro zahlen."
#: resources/templates/resources/donate.html:13
msgid "Membership is then granted for 1 year."
msgstr "Die Mitgliedschaft wird dann ein Jahr lang gewährt."
#: resources/templates/resources/donate.html:15
msgid "When you become a member, you gain the following advantages:"
msgstr "Wenn Sie Mitglied werden, bekommen Sie folgende Vorteile:"
#: resources/templates/resources/donate.html:16
msgid ""
"A different color for your pseudo in the scoreboard, to let everyone know "
"you're a member."
msgstr ""
"Eine verschiedene Farbe für Ihren Nutzernamen im Punktestand, sodass jeder "
"weiß dass Sie ein Mitglied sind."
#: resources/templates/resources/donate.html:17
msgid ""
"The possibility to play again past CTF, with challenges no longer available, "
"in the form of private events with the people of your choice."
msgstr ""
"Die Möglichkeit einen vergangenen CTF zu wiederholen, mit Herausforderungen "
"die nicht mehr verfügbar sind, in Form von privaten Ereignissen mit Menschen "
"Ihrer Wahl."
#: resources/templates/resources/donate.html:18
msgid ""
"Ex: you played Welcome CTF 2021, and want to play it again with your friends "
"during one weekend."
msgstr ""
"Z.B.: Sie haben am Welcome CTF 2021 teilgenommen, und wollen es mit Ihren "
"Freunden an einem Wochenende wiederholen."
#: resources/templates/resources/donate.html:19
msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
msgstr ""
"Oder Sie haben nicht am Welcome CTF 2021 teilgenommen weil Sie nicht dazu "
"berechtigt waren."
#: resources/templates/resources/donate.html:22
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
"Weitere Vorteile können später folgen, und Sie können uns Ihre Ideen "
"mitteilen."
#: resources/templates/resources/donate.html:23
msgid ""
"However, we will not organize limited time CTF for members only, as this "
"will be equivalent to organize paid events, and we want 42CTF to remain FREE "
"for all."
msgstr ""
"Trotzdem werden wir keine zeitlich begrenzte CTFs nur für Mitglieder "
"organisieren, da diese Zahlungspflichtige Ereignissen gleichen, und wir "
"42CTF KOSTENLOS für alle zugänglich behalten wollen."
#: resources/templates/resources/donate.html:26
msgid "Donate to 42CTF"
msgstr "An 42CTF spenden"
#: resources/templates/resources/donate.html:27
msgid ""
"You can donate to 42CTF or pay your membership with the following means:"
msgstr ""
"Folgende Zahlungsmethoden sind für eine Spende an 42CTF oder den Kauf einer "
"Mitgliedshaft verfügbar:"
#: resources/templates/resources/donate.html:46
msgid ""
"If you would like us to add another payment method or if you want to pay in "
"cash, send us a message !"
@ -217,31 +231,28 @@ msgstr ""
"Falls Sie möchten, dass wir eine andere Zahlungsmethode hinzufügen oder "
"lieber Bar zahlen möchten, schicken Sie uns eine Nachricht!"
#: src/resources/templates/resources/donate.html:18
msgid "What will we do with your money ?"
msgstr ""
#: src/resources/templates/resources/donate.html:21
#, python-format
#: resources/templates/resources/donate.html:48
msgid ""
"Hosting a website - and especially a CTF platform - costs money: more "
"precisely, it costs us <b>50 euros per month</b>.\n"
" <br><br>\n"
" If we had <b>40 members</b> each year, it would be "
"enough to cover the hosting of 42CTF.\n"
" <br>\n"
" We currently have %(nb_members)s members.\n"
" <br><br>\n"
" 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 this threshold :)"
"If you're paying for your membership, don't forget to send us your first and "
"last name, as well as your 42CTF pseudo."
msgstr ""
"Falls Sie für eine Mitgliedschaft zahlen, vergessen Sie nicht uns Ihren vor "
"und Nachnamen, sowie Ihren 42CTF Nutzernamen mitzuteilen."
#: src/resources/templates/resources/edit.html:7
#: resources/templates/resources/donate.html:49
msgid ""
"We will only use thoe data to keep track of our members and grant you "
"advantages, and we will never communicate them to any third party."
msgstr ""
"Wir verwenden diese Daten nur um den Überblick über unsere Mitglieder zu "
"Behalten und ihnen Vorteile zu bieten, und werden Sie niemals an einem "
"Dritten übermitteln."
#: resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr "Diese Seite bearbeiten"
#: src/resources/templates/resources/edit.html:12
#: resources/templates/resources/edit.html:12
msgid ""
"More information coming soon, but as you can guess it involves making a pull "
"request to your favorite"
@ -249,31 +260,31 @@ msgstr ""
"Weitere Information wird folgen, doch sowie Sie es erraten können benötigt "
"es eine Pull Request auf Ihrer lieblings"
#: src/resources/templates/resources/tools.html:7
#: resources/templates/resources/tools.html:7
msgid "Recommended Tools"
msgstr "Empfohlene Werkzeuge"
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "To get you started, we built a VM that you can simply import in"
msgstr "Zum beginnen haben wir eine VM erstellt die Sie einfach auf"
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "with a bunch of useful tools."
msgstr "importieren können, mit vielen nützlichen Werkzeugen."
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "You can dowload this OVA"
msgstr "Herunterladen können Sie die OVA"
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "here"
msgstr "Hier"
#: src/resources/templates/resources/tools.html:13
#: resources/templates/resources/tools.html:13
msgid "Here are the tools installed on the VM:"
msgstr "Folgende Werkzeuge sind auf der VM vorinstalliert:"
#: src/resources/templates/resources/tools.html:22
#: resources/templates/resources/tools.html:22
msgid ""
"If you want to solve the challenges on your own machine, we recommend you to "
"use a Linux operating system."
@ -281,7 +292,7 @@ msgstr ""
"Falls Sie die Herausforderung auf Ihrer eigenen Maschine lösen möchten, "
"empfehlen wir Ihnen einen Linux Betriebssystem zu verwenden."
#: src/resources/templates/resources/tools.html:23
#: resources/templates/resources/tools.html:23
msgid ""
"Most of the reverse challenges are ELF binaries and won't run on Mac OS or "
"Windows."
@ -289,19 +300,19 @@ msgstr ""
"Die meisten Reverse-Engineering Herausforderungen sind ELF-Binärdateien und "
"können auf macOS oder Windows nicht ausgeführt werden."
#: src/resources/templates/resources/tools.html:25
#: resources/templates/resources/tools.html:25
msgid "Additionnaly, you will need the following languages interpreters:"
msgstr "Zusätzlich, werden Sie folgende Skript-Interpreter benötigen:"
#: src/resources/templates/resources/translate.html:7
#: resources/templates/resources/translate.html:7
msgid "Translate 42CTF"
msgstr "42CTF Übersetzen"
#: src/resources/templates/resources/translate.html:10
#: resources/templates/resources/translate.html:10
msgid "42CTF source code is publicly available on this"
msgstr "42CTF's Quellcode ist öffentlich zugänglich auf"
#: src/resources/templates/resources/translate.html:12
#: resources/templates/resources/translate.html:11
msgid ""
"Translation does not require any programming skill and is a good way to "
"contribute if you want to help us, by making the platform always more "
@ -311,19 +322,28 @@ msgstr ""
"Möglichkeit beizutragen wenn Sie uns helfen möchten, indem Sie diese "
"Plattform immer zugänglicher machen."
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid "We have a"
msgstr "Wir haben einen"
# FIXME: internalization -> internationalization
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid ""
"describing how to translate pages with the Django internalization module."
msgstr ""
"indem beschrieben wird wie man mit dem Django Internationalisierungsmodul "
"Seiten übersetzt."
#: src/resources/templates/resources/translate.html:16
#: resources/templates/resources/translate.html:13
msgid ""
"We invite you to read it to know all the details, but it merely requires you "
"to edit text files, so you see, no programming skills required ;)"
msgstr ""
"Wir laden Sie dazu ein es zu lesen um alle Einzelheiten zur Kenntnis zu "
"nehmen, doch schrecken Sie sich nicht ab, es ist nichts mehr als "
"Textverarbeitung, keine Programmierkenntnisse sind benötigt ;)"
#: resources/templates/resources/translate.html:14
msgid ""
"You will need to fork the git repository, make your changes, push them, and "
"then open a pull request so that we can merge your contributions into our "
@ -333,92 +353,6 @@ msgstr ""
"eine Pull Request eröffnen, sodass wir Ihre Beiträge in unsere Repository "
"mergen können."
#: src/resources/templates/resources/translate.html:17
#: resources/templates/resources/translate.html:15
msgid "Don't hesitate to reach for help on"
msgstr "Zögern Sie nicht, nach Hilfe zu bitten auf"
#~ msgid ""
#~ "42CTF is a non-profit organization with a legal status under the french "
#~ "law (Association loi 1901)."
#~ msgstr ""
#~ "42CTF ist eine gemeinnützige Organisation mit einem Rechtsstatus nach "
#~ "französischem Recht (Association loi 1901)."
#~ msgid ""
#~ "You can support us by becoming a member and paying a fee of 15 euros."
#~ msgstr ""
#~ "Sie können uns unterstützen indem Sie Mitglied werden und 15 Euro zahlen."
#~ msgid "Membership is then granted for 1 year."
#~ msgstr "Die Mitgliedschaft wird dann ein Jahr lang gewährt."
#~ msgid "When you become a member, you gain the following advantages:"
#~ msgstr "Wenn Sie Mitglied werden, bekommen Sie folgende Vorteile:"
#~ msgid ""
#~ "A different color for your pseudo in the scoreboard, to let everyone know "
#~ "you're a member."
#~ msgstr ""
#~ "Eine verschiedene Farbe für Ihren Nutzernamen im Punktestand, sodass "
#~ "jeder weiß dass Sie ein Mitglied sind."
#~ msgid ""
#~ "The possibility to play again past CTF, with challenges no longer "
#~ "available, in the form of private events with the people of your choice."
#~ msgstr ""
#~ "Die Möglichkeit einen vergangenen CTF zu wiederholen, mit "
#~ "Herausforderungen die nicht mehr verfügbar sind, in Form von privaten "
#~ "Ereignissen mit Menschen Ihrer Wahl."
#~ msgid ""
#~ "Ex: you played Welcome CTF 2021, and want to play it again with your "
#~ "friends during one weekend."
#~ msgstr ""
#~ "Z.B.: Sie haben am Welcome CTF 2021 teilgenommen, und wollen es mit Ihren "
#~ "Freunden an einem Wochenende wiederholen."
#~ msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
#~ msgstr ""
#~ "Oder Sie haben nicht am Welcome CTF 2021 teilgenommen weil Sie nicht dazu "
#~ "berechtigt waren."
#~ msgid ""
#~ "However, we will not organize limited time CTF for members only, as this "
#~ "will be equivalent to organize paid events, and we want 42CTF to remain "
#~ "FREE for all."
#~ msgstr ""
#~ "Trotzdem werden wir keine zeitlich begrenzte CTFs nur für Mitglieder "
#~ "organisieren, da diese Zahlungspflichtige Ereignissen gleichen, und wir "
#~ "42CTF KOSTENLOS für alle zugänglich behalten wollen."
#~ msgid "Donate to 42CTF"
#~ msgstr "An 42CTF spenden"
#~ msgid ""
#~ "You can donate to 42CTF or pay your membership with the following means:"
#~ msgstr ""
#~ "Folgende Zahlungsmethoden sind für eine Spende an 42CTF oder den Kauf "
#~ "einer Mitgliedshaft verfügbar:"
#~ msgid ""
#~ "If you're paying for your membership, don't forget to send us your first "
#~ "and last name, as well as your 42CTF pseudo."
#~ msgstr ""
#~ "Falls Sie für eine Mitgliedschaft zahlen, vergessen Sie nicht uns Ihren "
#~ "vor und Nachnamen, sowie Ihren 42CTF Nutzernamen mitzuteilen."
#~ msgid ""
#~ "We will only use thoe data to keep track of our members and grant you "
#~ "advantages, and we will never communicate them to any third party."
#~ msgstr ""
#~ "Wir verwenden diese Daten nur um den Überblick über unsere Mitglieder zu "
#~ "Behalten und ihnen Vorteile zu bieten, und werden Sie niemals an einem "
#~ "Dritten übermitteln."
#~ msgid ""
#~ "We invite you to read it to know all the details, but it merely requires "
#~ "you to edit text files, so you see, no programming skills required ;)"
#~ msgstr ""
#~ "Wir laden Sie dazu ein es zu lesen um alle Einzelheiten zur Kenntnis zu "
#~ "nehmen, doch schrecken Sie sich nicht ab, es ist nichts mehr als "
#~ "Textverarbeitung, keine Programmierkenntnisse sind benötigt ;)"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,281 +18,278 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/resources/templates/resources/about.html:11
#: resources/templates/resources/42ctf.html:7
msgid "What is 42CTF ?"
msgstr ""
#: src/resources/templates/resources/about.html:14
#: resources/templates/resources/42ctf.html:10
msgid "A short introduction to CTF"
msgstr ""
#: src/resources/templates/resources/about.html:15
#: resources/templates/resources/42ctf.html:11
msgid ""
"CTF stands for Capture The Flag. It is a cybersecurity competition, where "
"participants have to solve challenges of various categories to gain points "
"and progress on the scoreboard."
msgstr ""
#: src/resources/templates/resources/about.html:16
msgid ""
"The challenges require participants to find sort of passwords called \"flags"
"\" and to submit them on the platform."
#: resources/templates/resources/42ctf.html:12
msgid "The challenges require participants to find sort of passwords called \\"
msgstr ""
#: src/resources/templates/resources/about.html:19
#: resources/templates/resources/42ctf.html:15
msgid "Functionment of 42CTF"
msgstr ""
#: src/resources/templates/resources/about.html:20
#: resources/templates/resources/42ctf.html:16
msgid "42CTF is what we call a permanent CTF."
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "Except from the"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "events"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "challenges are available on the platform without time limitations."
msgstr ""
#: src/resources/templates/resources/about.html:22
#: resources/templates/resources/42ctf.html:18
msgid "The registration on 42CTF is open to everyone, 42 students or not."
msgstr ""
#: src/resources/templates/resources/about.html:23
#: resources/templates/resources/42ctf.html:19
msgid ""
"Events may or may not be open. If you would like to organize an event on "
"42CTF, feel free to contact us."
msgstr ""
#: src/resources/templates/resources/about.html:26
#: resources/templates/resources/42ctf.html:22
msgid "42CTF Team"
msgstr ""
#: src/resources/templates/resources/about.html:27
#: resources/templates/resources/42ctf.html:23
msgid "42CTF is managed by 42 students."
msgstr ""
#: src/resources/templates/resources/about.html:28
#: resources/templates/resources/42ctf.html:24
msgid "You can meet the team on"
msgstr ""
#: src/resources/templates/resources/about.html:29
#: resources/templates/resources/42ctf.html:25
msgid ""
"Challenges are created by various contributors, not necessarily 42 students."
msgstr ""
#: src/resources/templates/resources/about.html:30
#: resources/templates/resources/42ctf.html:26
msgid ""
"Anyone is welcome to submit their own challenges, either on the permanent "
"CTF or for a specific event."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:8
msgid "Become a 42CTF member"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:13
msgid "Why should I become a 42CTF member ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:18
msgid ""
"\n"
" 42CTF is a non-profit organization with a legal status under "
"the french law (Association loi 1901).<br>\n"
" Running a CTF platform costs money, and we are not currently "
"funded by anyone except you.<br>\n"
" You can become a 42CTF member if you want to support our "
"activity :)\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:27
msgid "I want to be a member !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:30
msgid ""
"You're welcome ! To become a member, all you need to do is to donate us 15 "
"euros and your membership will last for a year."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:36
msgid "If you want to use another payment method, please contact us !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:43
msgid "What do I get ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:45
msgid ""
"\n"
" - A <span class='is-member'>different color</span> for your "
"pseudo in the scoreboard, to let everyone know you're a member.<br>\n"
" - The possibility to play past CTF, with challenges no longer "
"available, in the form of private events with the people of your choice."
"<br>\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:51
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:56
msgid "How do I claim it ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:59
msgid ""
"Once you've donated the 15 euros, you just need to contact us on discord or "
"by mail:"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:7
#: resources/templates/resources/create_challenge.html:7
msgid "Create new challenges"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:10
#: resources/templates/resources/create_challenge.html:10
msgid "If you want to create new challenges for 42CTF, send us a message on "
msgstr ""
#: src/resources/templates/resources/create_challenge.html:11
#: resources/templates/resources/create_challenge.html:11
msgid "If your challenge is offline, then you don't have to ask us in advance."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:12
#: resources/templates/resources/create_challenge.html:12
msgid ""
"If your challenge is online (for example web or pwn), then you should give "
"us a short description of what you want to do."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:13
#: resources/templates/resources/create_challenge.html:13
msgid ""
"We may be able to help you or to give you resources such as dockerfiles."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:14
#: resources/templates/resources/create_challenge.html:14
msgid "We plan to make those resources publicly available in a near future."
msgstr ""
#: src/resources/templates/resources/donate.html:7
#: resources/templates/resources/donate.html:7
msgid "Donate"
msgstr ""
#: src/resources/templates/resources/donate.html:14
#: resources/templates/resources/donate.html:10
msgid "Become a 42CTF member"
msgstr ""
#: resources/templates/resources/donate.html:11
msgid ""
"42CTF is a non-profit organization with a legal status under the french law "
"(Association loi 1901)."
msgstr ""
#: resources/templates/resources/donate.html:12
msgid "You can support us by becoming a member and paying a fee of 15 euros."
msgstr ""
#: resources/templates/resources/donate.html:13
msgid "Membership is then granted for 1 year."
msgstr ""
#: resources/templates/resources/donate.html:15
msgid "When you become a member, you gain the following advantages:"
msgstr ""
#: resources/templates/resources/donate.html:16
msgid ""
"A different color for your pseudo in the scoreboard, to let everyone know "
"you're a member."
msgstr ""
#: resources/templates/resources/donate.html:17
msgid ""
"The possibility to play again past CTF, with challenges no longer available, "
"in the form of private events with the people of your choice."
msgstr ""
#: resources/templates/resources/donate.html:18
msgid ""
"Ex: you played Welcome CTF 2021, and want to play it again with your friends "
"during one weekend."
msgstr ""
#: resources/templates/resources/donate.html:19
msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
msgstr ""
#: resources/templates/resources/donate.html:22
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
#: resources/templates/resources/donate.html:23
msgid ""
"However, we will not organize limited time CTF for members only, as this "
"will be equivalent to organize paid events, and we want 42CTF to remain FREE "
"for all."
msgstr ""
#: resources/templates/resources/donate.html:26
msgid "Donate to 42CTF"
msgstr ""
#: resources/templates/resources/donate.html:27
msgid ""
"You can donate to 42CTF or pay your membership with the following means:"
msgstr ""
#: resources/templates/resources/donate.html:46
msgid ""
"If you would like us to add another payment method or if you want to pay in "
"cash, send us a message !"
msgstr ""
#: src/resources/templates/resources/donate.html:18
msgid "What will we do with your money ?"
msgstr ""
#: src/resources/templates/resources/donate.html:21
#, python-format
#: resources/templates/resources/donate.html:48
msgid ""
"Hosting a website - and especially a CTF platform - costs money: more "
"precisely, it costs us <b>50 euros per month</b>.\n"
" <br><br>\n"
" If we had <b>40 members</b> each year, it would be "
"enough to cover the hosting of 42CTF.\n"
" <br>\n"
" We currently have %(nb_members)s members.\n"
" <br><br>\n"
" 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 this threshold :)"
"If you're paying for your membership, don't forget to send us your first and "
"last name, as well as your 42CTF pseudo."
msgstr ""
#: src/resources/templates/resources/edit.html:7
#: resources/templates/resources/donate.html:49
msgid ""
"We will only use thoe data to keep track of our members and grant you "
"advantages, and we will never communicate them to any third party."
msgstr ""
#: resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr ""
#: src/resources/templates/resources/edit.html:12
#: resources/templates/resources/edit.html:12
msgid ""
"More information coming soon, but as you can guess it involves making a pull "
"request to your favorite"
msgstr ""
#: src/resources/templates/resources/tools.html:7
#: resources/templates/resources/tools.html:7
msgid "Recommended Tools"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "To get you started, we built a VM that you can simply import in"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "with a bunch of useful tools."
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "You can dowload this OVA"
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "here"
msgstr ""
#: src/resources/templates/resources/tools.html:13
#: resources/templates/resources/tools.html:13
msgid "Here are the tools installed on the VM:"
msgstr ""
#: src/resources/templates/resources/tools.html:22
#: resources/templates/resources/tools.html:22
msgid ""
"If you want to solve the challenges on your own machine, we recommend you to "
"use a Linux operating system."
msgstr ""
#: src/resources/templates/resources/tools.html:23
#: resources/templates/resources/tools.html:23
msgid ""
"Most of the reverse challenges are ELF binaries and won't run on Mac OS or "
"Windows."
msgstr ""
#: src/resources/templates/resources/tools.html:25
#: resources/templates/resources/tools.html:25
msgid "Additionnaly, you will need the following languages interpreters:"
msgstr ""
#: src/resources/templates/resources/translate.html:7
#: resources/templates/resources/translate.html:7
msgid "Translate 42CTF"
msgstr ""
#: src/resources/templates/resources/translate.html:10
#: resources/templates/resources/translate.html:10
msgid "42CTF source code is publicly available on this"
msgstr ""
#: src/resources/templates/resources/translate.html:12
#: resources/templates/resources/translate.html:11
msgid ""
"Translation does not require any programming skill and is a good way to "
"contribute if you want to help us, by making the platform always more "
"accessible."
msgstr ""
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid "We have a"
msgstr ""
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid ""
"describing how to translate pages with the Django internalization module."
msgstr ""
#: src/resources/templates/resources/translate.html:16
#: resources/templates/resources/translate.html:13
msgid ""
"We invite you to read it to know all the details, but it merely requires you "
"to edit text files, so you see, no programming skills required ;)"
msgstr ""
#: resources/templates/resources/translate.html:14
msgid ""
"You will need to fork the git repository, make your changes, push them, and "
"then open a pull request so that we can merge your contributions into our "
"repository."
msgstr ""
#: src/resources/templates/resources/translate.html:17
#: resources/templates/resources/translate.html:15
msgid "Don't hesitate to reach for help on"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: 2022-02-09 10:55+0100\n"
"Last-Translator: Javier Uhagón (uhagontorralvojavier@gmail.com)\n"
"Language-Team: \n"
@ -18,15 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/resources/templates/resources/about.html:11
#: resources/templates/resources/42ctf.html:7
msgid "What is 42CTF ?"
msgstr "¿ Qué es 42CTF ?"
#: src/resources/templates/resources/about.html:14
#: resources/templates/resources/42ctf.html:10
msgid "A short introduction to CTF"
msgstr "Una corta introducción a CTF"
#: src/resources/templates/resources/about.html:15
#: resources/templates/resources/42ctf.html:11
msgid ""
"CTF stands for Capture The Flag. It is a cybersecurity competition, where "
"participants have to solve challenges of various categories to gain points "
@ -36,40 +36,38 @@ msgstr ""
"que los participantes tienen que resolver retos de diferentes categorías "
"para ganar puntos y progresar en la Tabla de puntos."
#: src/resources/templates/resources/about.html:16
msgid ""
"The challenges require participants to find sort of passwords called \"flags"
"\" and to submit them on the platform."
#: resources/templates/resources/42ctf.html:12
msgid "The challenges require participants to find sort of passwords called \\"
msgstr ""
"Los retos requieren que los participantes encuentren unas contraseñas "
"llamadas \\"
#: src/resources/templates/resources/about.html:19
#: resources/templates/resources/42ctf.html:15
msgid "Functionment of 42CTF"
msgstr "Funcionamiento de 42CTF"
#: src/resources/templates/resources/about.html:20
#: resources/templates/resources/42ctf.html:16
msgid "42CTF is what we call a permanent CTF."
msgstr "42CTF es lo que llamamos un CTF permanente."
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "Except from the"
msgstr "A excepción de"
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "events"
msgstr "eventos"
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "challenges are available on the platform without time limitations."
msgstr "los retos están disponibles en la plataforma sin limites de tiempo."
#: src/resources/templates/resources/about.html:22
#: resources/templates/resources/42ctf.html:18
msgid "The registration on 42CTF is open to everyone, 42 students or not."
msgstr ""
"El registro a 42CTF está abierto a todo el mundo, estudiantes de 42 o no."
#: src/resources/templates/resources/about.html:23
#: resources/templates/resources/42ctf.html:19
msgid ""
"Events may or may not be open. If you would like to organize an event on "
"42CTF, feel free to contact us."
@ -77,26 +75,26 @@ msgstr ""
"Los eventos pueden o no estar abiertos. Si quieres organizar un evento en "
"42CTF, sientete libre de contactarnos."
#: src/resources/templates/resources/about.html:26
#: resources/templates/resources/42ctf.html:22
msgid "42CTF Team"
msgstr "Equipo de 42CTF"
#: src/resources/templates/resources/about.html:27
#: resources/templates/resources/42ctf.html:23
msgid "42CTF is managed by 42 students."
msgstr "42CTF está gestionado por estudiantes de 42."
#: src/resources/templates/resources/about.html:28
#: resources/templates/resources/42ctf.html:24
msgid "You can meet the team on"
msgstr "Puedes conocer al equipo en"
#: src/resources/templates/resources/about.html:29
#: resources/templates/resources/42ctf.html:25
msgid ""
"Challenges are created by various contributors, not necessarily 42 students."
msgstr ""
"Los retos son creados por varios contribuidores, no necesariamente "
"estudiantes de 42."
#: src/resources/templates/resources/about.html:30
#: resources/templates/resources/42ctf.html:26
msgid ""
"Anyone is welcome to submit their own challenges, either on the permanent "
"CTF or for a specific event."
@ -104,84 +102,19 @@ msgstr ""
"Todo el mundo está bienvenido a publicar sus propios retos, en el CTF "
"permanente o en un evento en específico."
#: src/resources/templates/resources/becomeMember.html:8
msgid "Become a 42CTF member"
msgstr "Convertirse en un miembro de 42CTF"
#: src/resources/templates/resources/becomeMember.html:13
#, fuzzy
#| msgid "Become a 42CTF member"
msgid "Why should I become a 42CTF member ?"
msgstr "Convertirse en un miembro de 42CTF"
#: src/resources/templates/resources/becomeMember.html:18
msgid ""
"\n"
" 42CTF is a non-profit organization with a legal status under "
"the french law (Association loi 1901).<br>\n"
" Running a CTF platform costs money, and we are not currently "
"funded by anyone except you.<br>\n"
" You can become a 42CTF member if you want to support our "
"activity :)\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:27
msgid "I want to be a member !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:30
msgid ""
"You're welcome ! To become a member, all you need to do is to donate us 15 "
"euros and your membership will last for a year."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:36
msgid "If you want to use another payment method, please contact us !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:43
msgid "What do I get ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:45
msgid ""
"\n"
" - A <span class='is-member'>different color</span> for your "
"pseudo in the scoreboard, to let everyone know you're a member.<br>\n"
" - The possibility to play past CTF, with challenges no longer "
"available, in the form of private events with the people of your choice."
"<br>\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:51
msgid "More advantages may come later, and you can submit us your ideas."
msgstr "Más ideas llegarán pronto, y puedes enviarnos ideas."
#: src/resources/templates/resources/becomeMember.html:56
msgid "How do I claim it ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:59
msgid ""
"Once you've donated the 15 euros, you just need to contact us on discord or "
"by mail:"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:7
#: resources/templates/resources/create_challenge.html:7
msgid "Create new challenges"
msgstr "Crear retos nuevos"
#: src/resources/templates/resources/create_challenge.html:10
#: resources/templates/resources/create_challenge.html:10
msgid "If you want to create new challenges for 42CTF, send us a message on "
msgstr "Si quieres crear nuevos retos para 42CTF, mandanos un mensaje en "
#: src/resources/templates/resources/create_challenge.html:11
#: resources/templates/resources/create_challenge.html:11
msgid "If your challenge is offline, then you don't have to ask us in advance."
msgstr "Si tu reto es offline, no nos tienes que avisar por adelantado."
#: src/resources/templates/resources/create_challenge.html:12
#: resources/templates/resources/create_challenge.html:12
msgid ""
"If your challenge is online (for example web or pwn), then you should give "
"us a short description of what you want to do."
@ -189,20 +122,98 @@ msgstr ""
"Si tu evento es online (por ejemplo web o pwn), entonces deberias mandarnos "
"una corta descripción de lo que quieres hacer."
#: src/resources/templates/resources/create_challenge.html:13
#: resources/templates/resources/create_challenge.html:13
msgid ""
"We may be able to help you or to give you resources such as dockerfiles."
msgstr "Podemos ser de ayuda o darte recursos como dockerfiles."
#: src/resources/templates/resources/create_challenge.html:14
#: resources/templates/resources/create_challenge.html:14
msgid "We plan to make those resources publicly available in a near future."
msgstr "Planeamos publicar estos recursos al publico en un futuro cercano."
#: src/resources/templates/resources/donate.html:7
#: resources/templates/resources/donate.html:7
msgid "Donate"
msgstr "Donar"
#: src/resources/templates/resources/donate.html:14
#: resources/templates/resources/donate.html:10
msgid "Become a 42CTF member"
msgstr "Convertirse en un miembro de 42CTF"
#: resources/templates/resources/donate.html:11
msgid ""
"42CTF is a non-profit organization with a legal status under the french law "
"(Association loi 1901)."
msgstr ""
"42CTF es una organización sin ánimo de lucro bajo un estatus legal bajo la "
"ley francesa (loi de asociación 1901)."
#: resources/templates/resources/donate.html:12
msgid "You can support us by becoming a member and paying a fee of 15 euros."
msgstr ""
"Puedes apoyarnos convirtiendote en un miebro y pagandonos una comisión de 15 "
"euros."
#: resources/templates/resources/donate.html:13
msgid "Membership is then granted for 1 year."
msgstr "La membresia dura 1 año."
#: resources/templates/resources/donate.html:15
msgid "When you become a member, you gain the following advantages:"
msgstr "Cuando te conviertes en un miembro, ganas las siguientes ventajas:"
#: resources/templates/resources/donate.html:16
msgid ""
"A different color for your pseudo in the scoreboard, to let everyone know "
"you're a member."
msgstr ""
"Un color diferente para tu pseudo en la tabla de puntuaciones para que todo "
"el mundo sepa que eres un miembro."
#: resources/templates/resources/donate.html:17
msgid ""
"The possibility to play again past CTF, with challenges no longer available, "
"in the form of private events with the people of your choice."
msgstr ""
"La posibilidad e jugar un CTF del pasado, con retos que ya no están "
"disponibles, crear eventos privados con gente de tu elección."
#: resources/templates/resources/donate.html:18
msgid ""
"Ex: you played Welcome CTF 2021, and want to play it again with your friends "
"during one weekend."
msgstr ""
"Ejemplo: Si jugaste CTF 2021, y quieres volverlo a jugar con tus amigos "
"durante un fin de semana."
#: resources/templates/resources/donate.html:19
msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
msgstr "O no jugaste el Welcome CTF 2021 porque no estabas disponible."
#: resources/templates/resources/donate.html:22
msgid "More advantages may come later, and you can submit us your ideas."
msgstr "Más ideas llegarán pronto, y puedes enviarnos ideas."
#: resources/templates/resources/donate.html:23
msgid ""
"However, we will not organize limited time CTF for members only, as this "
"will be equivalent to organize paid events, and we want 42CTF to remain FREE "
"for all."
msgstr ""
"Sin embargo, no organizaremos CTF de tiempo limitado para miembros, ya que "
"esto sería equivalente a organizar eventos de pago, y queremos mantener "
"42CTF GRATIS para todos."
#: resources/templates/resources/donate.html:26
msgid "Donate to 42CTF"
msgstr "Dona a 42CTF"
#: resources/templates/resources/donate.html:27
msgid ""
"You can donate to 42CTF or pay your membership with the following means:"
msgstr ""
"Puedes donar a 42CTF o pagar tu membresía con los siguientes métodos de pago:"
#: resources/templates/resources/donate.html:46
msgid ""
"If you would like us to add another payment method or if you want to pay in "
"cash, send us a message !"
@ -210,31 +221,27 @@ msgstr ""
"Si quieres que añadamos otro metodo de pago o quieres pagarnos en efectivo "
"¡Mandanos un mensaje!"
#: src/resources/templates/resources/donate.html:18
msgid "What will we do with your money ?"
msgstr ""
#: src/resources/templates/resources/donate.html:21
#, python-format
#: resources/templates/resources/donate.html:48
msgid ""
"Hosting a website - and especially a CTF platform - costs money: more "
"precisely, it costs us <b>50 euros per month</b>.\n"
" <br><br>\n"
" If we had <b>40 members</b> each year, it would be "
"enough to cover the hosting of 42CTF.\n"
" <br>\n"
" We currently have %(nb_members)s members.\n"
" <br><br>\n"
" 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 this threshold :)"
"If you're paying for your membership, don't forget to send us your first and "
"last name, as well as your 42CTF pseudo."
msgstr ""
"Si estás pagando por tu membresía, no olvides mandarnos tu nombre y "
"apellido, también tu nombre de usuario en 42CTF"
#: src/resources/templates/resources/edit.html:7
#: resources/templates/resources/donate.html:49
msgid ""
"We will only use thoe data to keep track of our members and grant you "
"advantages, and we will never communicate them to any third party."
msgstr ""
"Solo usarmos los datos para tener control de la lista de miembros y darte "
"las ventajas de miembro, nunca se los daremos a ningún tercero."
#: resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr "Editar esta página"
#: src/resources/templates/resources/edit.html:12
#: resources/templates/resources/edit.html:12
msgid ""
"More information coming soon, but as you can guess it involves making a pull "
"request to your favorite"
@ -242,33 +249,33 @@ msgstr ""
"Más información llegará pronto, pero como puedes imaginar requiere hacer un "
"pull request a tu favorito"
#: src/resources/templates/resources/tools.html:7
#: resources/templates/resources/tools.html:7
msgid "Recommended Tools"
msgstr "Herramientas Recomendadas"
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "To get you started, we built a VM that you can simply import in"
msgstr ""
"Para empezar, hemos creado una Máquina Virtual que simplemente puedes "
"importar."
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "with a bunch of useful tools."
msgstr "con unas cuantas herramientas útiles."
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "You can dowload this OVA"
msgstr "Puedes descargar este OVA"
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "here"
msgstr "aquí"
#: src/resources/templates/resources/tools.html:13
#: resources/templates/resources/tools.html:13
msgid "Here are the tools installed on the VM:"
msgstr "Aquí están las herramientas instaladas en la Máquina Virtual:"
#: src/resources/templates/resources/tools.html:22
#: resources/templates/resources/tools.html:22
msgid ""
"If you want to solve the challenges on your own machine, we recommend you to "
"use a Linux operating system."
@ -276,7 +283,7 @@ msgstr ""
"Si quieres resolver los retos en tu propia máquina, te recomendamos usar "
"Linux como sistema operativo."
#: src/resources/templates/resources/tools.html:23
#: resources/templates/resources/tools.html:23
msgid ""
"Most of the reverse challenges are ELF binaries and won't run on Mac OS or "
"Windows."
@ -284,19 +291,19 @@ msgstr ""
"La mayoría de retos de ingeniería inversa usan binarios ELF y no funcionarán "
"en Mac OS o Windows."
#: src/resources/templates/resources/tools.html:25
#: resources/templates/resources/tools.html:25
msgid "Additionnaly, you will need the following languages interpreters:"
msgstr "Además, necesitarás tender los siguientes interpretes de lenguaje:"
#: src/resources/templates/resources/translate.html:7
#: resources/templates/resources/translate.html:7
msgid "Translate 42CTF"
msgstr "Traducir 42CTF"
#: src/resources/templates/resources/translate.html:10
#: resources/templates/resources/translate.html:10
msgid "42CTF source code is publicly available on this"
msgstr "El código de 42CTF está disponible al público aquí"
#: src/resources/templates/resources/translate.html:12
#: resources/templates/resources/translate.html:11
msgid ""
"Translation does not require any programming skill and is a good way to "
"contribute if you want to help us, by making the platform always more "
@ -306,18 +313,27 @@ msgstr ""
"contribuir si quieres ayudarnos, haciendo la plataforma siempre más "
"accesible."
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid "We have a"
msgstr "Tenemos un"
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid ""
"describing how to translate pages with the Django internalization module."
msgstr ""
"Describiendo como traducir las páginas con el modulo de internacionalización "
"Django."
#: src/resources/templates/resources/translate.html:16
#: resources/templates/resources/translate.html:13
msgid ""
"We invite you to read it to know all the details, but it merely requires you "
"to edit text files, so you see, no programming skills required ;)"
msgstr ""
"Te invitamos a leerlo para conocer todos los detalles, pero simplemente "
"rquiere que edites archivos de texto, asi que como ves, no hace falta saber "
"programar ;)"
#: resources/templates/resources/translate.html:14
msgid ""
"You will need to fork the git repository, make your changes, push them, and "
"then open a pull request so that we can merge your contributions into our "
@ -327,89 +343,6 @@ msgstr ""
"hacer un push y entonces abrir un Pull request para que podamos hacer merge "
"de tus cambios a nuestro repositorio."
#: src/resources/templates/resources/translate.html:17
#: resources/templates/resources/translate.html:15
msgid "Don't hesitate to reach for help on"
msgstr "No dudes en pedirnos ayuda"
#~ msgid ""
#~ "42CTF is a non-profit organization with a legal status under the french "
#~ "law (Association loi 1901)."
#~ msgstr ""
#~ "42CTF es una organización sin ánimo de lucro bajo un estatus legal bajo "
#~ "la ley francesa (loi de asociación 1901)."
#~ msgid ""
#~ "You can support us by becoming a member and paying a fee of 15 euros."
#~ msgstr ""
#~ "Puedes apoyarnos convirtiendote en un miebro y pagandonos una comisión de "
#~ "15 euros."
#~ msgid "Membership is then granted for 1 year."
#~ msgstr "La membresia dura 1 año."
#~ msgid "When you become a member, you gain the following advantages:"
#~ msgstr "Cuando te conviertes en un miembro, ganas las siguientes ventajas:"
#~ msgid ""
#~ "A different color for your pseudo in the scoreboard, to let everyone know "
#~ "you're a member."
#~ msgstr ""
#~ "Un color diferente para tu pseudo en la tabla de puntuaciones para que "
#~ "todo el mundo sepa que eres un miembro."
#~ msgid ""
#~ "The possibility to play again past CTF, with challenges no longer "
#~ "available, in the form of private events with the people of your choice."
#~ msgstr ""
#~ "La posibilidad e jugar un CTF del pasado, con retos que ya no están "
#~ "disponibles, crear eventos privados con gente de tu elección."
#~ msgid ""
#~ "Ex: you played Welcome CTF 2021, and want to play it again with your "
#~ "friends during one weekend."
#~ msgstr ""
#~ "Ejemplo: Si jugaste CTF 2021, y quieres volverlo a jugar con tus amigos "
#~ "durante un fin de semana."
#~ msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
#~ msgstr "O no jugaste el Welcome CTF 2021 porque no estabas disponible."
#~ msgid ""
#~ "However, we will not organize limited time CTF for members only, as this "
#~ "will be equivalent to organize paid events, and we want 42CTF to remain "
#~ "FREE for all."
#~ msgstr ""
#~ "Sin embargo, no organizaremos CTF de tiempo limitado para miembros, ya "
#~ "que esto sería equivalente a organizar eventos de pago, y queremos "
#~ "mantener 42CTF GRATIS para todos."
#~ msgid "Donate to 42CTF"
#~ msgstr "Dona a 42CTF"
#~ msgid ""
#~ "You can donate to 42CTF or pay your membership with the following means:"
#~ msgstr ""
#~ "Puedes donar a 42CTF o pagar tu membresía con los siguientes métodos de "
#~ "pago:"
#~ msgid ""
#~ "If you're paying for your membership, don't forget to send us your first "
#~ "and last name, as well as your 42CTF pseudo."
#~ msgstr ""
#~ "Si estás pagando por tu membresía, no olvides mandarnos tu nombre y "
#~ "apellido, también tu nombre de usuario en 42CTF"
#~ msgid ""
#~ "We will only use thoe data to keep track of our members and grant you "
#~ "advantages, and we will never communicate them to any third party."
#~ msgstr ""
#~ "Solo usarmos los datos para tener control de la lista de miembros y darte "
#~ "las ventajas de miembro, nunca se los daremos a ningún tercero."
#~ msgid ""
#~ "We invite you to read it to know all the details, but it merely requires "
#~ "you to edit text files, so you see, no programming skills required ;)"
#~ msgstr ""
#~ "Te invitamos a leerlo para conocer todos los detalles, pero simplemente "
#~ "rquiere que edites archivos de texto, asi que como ves, no hace falta "
#~ "saber programar ;)"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,336 +18,300 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/resources/templates/resources/about.html:11
#: resources/templates/resources/42ctf.html:7
msgid "What is 42CTF ?"
msgstr "Qu'est-ce que 42CTF ?"
msgstr "Qu'est ce que 42CTF ?"
#: src/resources/templates/resources/about.html:14
#: resources/templates/resources/42ctf.html:10
msgid "A short introduction to CTF"
msgstr "Une brève introduction aux CTF"
#: src/resources/templates/resources/about.html:15
#: resources/templates/resources/42ctf.html:11
msgid ""
"CTF stands for Capture The Flag. It is a cybersecurity competition, where "
"participants have to solve challenges of various categories to gain points "
"and progress on the scoreboard."
msgstr ""
"CTF signifie \"Capture The Flag\". C'est une compétition de cybersécurité où "
"les participants doivent résoudre des challenges dans différentes catégories "
"pour gagner des points et progresser dans le classement."
#: src/resources/templates/resources/about.html:16
msgid ""
"The challenges require participants to find sort of passwords called \"flags"
"\" and to submit them on the platform."
#: resources/templates/resources/42ctf.html:12
msgid "The challenges require participants to find sort of passwords called \\"
msgstr ""
"Les challenges demandent aux participants de trouver des sortes de mots de "
"passe appelés \"flags\" et de les soumettre sur la plateforme."
#: src/resources/templates/resources/about.html:19
#: resources/templates/resources/42ctf.html:15
msgid "Functionment of 42CTF"
msgstr "Fonctionnement de 42CTF"
msgstr ""
#: src/resources/templates/resources/about.html:20
#: resources/templates/resources/42ctf.html:16
msgid "42CTF is what we call a permanent CTF."
msgstr "42CTF est ce qu'on appelle un CTF permanent."
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "Except from the"
msgstr "Sauf pour les"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "events"
msgstr "évènements"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "challenges are available on the platform without time limitations."
msgstr ""
"les challenges sont disponnibles sur la plateforme sans limites de temps."
#: src/resources/templates/resources/about.html:22
#: resources/templates/resources/42ctf.html:18
msgid "The registration on 42CTF is open to everyone, 42 students or not."
msgstr "L'inscription à 42CTF est ouverte à tous, étudiant de 42 ou non."
msgstr ""
#: src/resources/templates/resources/about.html:23
#: resources/templates/resources/42ctf.html:19
msgid ""
"Events may or may not be open. If you would like to organize an event on "
"42CTF, feel free to contact us."
msgstr ""
"Les évènements peuvent être publics ou non. Si tu souhaites organiser un "
"évènement sur 42CTF, n'hésite pas à nous contacter."
#: src/resources/templates/resources/about.html:26
#: resources/templates/resources/42ctf.html:22
msgid "42CTF Team"
msgstr "Équipe de 42CTF"
msgstr ""
#: src/resources/templates/resources/about.html:27
#: resources/templates/resources/42ctf.html:23
msgid "42CTF is managed by 42 students."
msgstr "42CTF est géré par des étudiants de 42"
msgstr ""
#: src/resources/templates/resources/about.html:28
#: resources/templates/resources/42ctf.html:24
msgid "You can meet the team on"
msgstr "Tu peux rencontrer l'équipe sur"
msgstr ""
#: src/resources/templates/resources/about.html:29
#: resources/templates/resources/42ctf.html:25
msgid ""
"Challenges are created by various contributors, not necessarily 42 students."
msgstr ""
"Les challenges sont créés par divers contributeurs, pas nécessairement des "
"étudiants de 42."
#: src/resources/templates/resources/about.html:30
#: resources/templates/resources/42ctf.html:26
msgid ""
"Anyone is welcome to submit their own challenges, either on the permanent "
"CTF or for a specific event."
msgstr ""
"Tout le monde est invité à soumettre ses propres défis, que ce soit sur le "
"CTF permanent ou pour un évènement spécifique."
#: src/resources/templates/resources/becomeMember.html:8
msgid "Become a 42CTF member"
msgstr "Adhérer à 42CTF"
#: src/resources/templates/resources/becomeMember.html:13
#, fuzzy
#| msgid "Become a 42CTF member"
msgid "Why should I become a 42CTF member ?"
msgstr "Pourquoi devrais-je adhérer à 42CTF ?"
#: src/resources/templates/resources/becomeMember.html:18
msgid ""
"\n"
" 42CTF is a non-profit organization with a legal status under "
"the french law (Association loi 1901).<br>\n"
" Running a CTF platform costs money, and we are not currently "
"funded by anyone except you.<br>\n"
" You can become a 42CTF member if you want to support our "
"activity :)\n"
" "
msgstr ""
"\n"
" 42CTF est une Association loi 1901 (France).<br>\n"
" Maintenir une plateforme de CTF coûte de l'argent, et nous ne sommes actuellement financés par personne à part toi.<br>\n"
" Tu peux adhérer à 42CTF si tu veux soutenir notre activité :) \n"
" "
#: src/resources/templates/resources/becomeMember.html:27
msgid "I want to be a member !"
msgstr "Je veux adhérer !"
#: src/resources/templates/resources/becomeMember.html:30
msgid ""
"You're welcome ! To become a member, all you need to do is to donate us 15 "
"euros and your membership will last for a year."
msgstr "Bienvenue ! Pour adhérer, il suffit de nous donner 15 euros et ton adhésion sera valable pour une année complète."
#: src/resources/templates/resources/becomeMember.html:36
msgid "If you want to use another payment method, please contact us !"
msgstr "Si tu souhaite utiliser un autre mode de paiment, n'hésite pas à nous contacter !"
#: src/resources/templates/resources/becomeMember.html:43
msgid "What do I get ?"
msgstr "Qu'est ce que j'y gagne ?"
#: src/resources/templates/resources/becomeMember.html:45
msgid ""
"\n"
" - A <span class='is-member'>different color</span> for your "
"pseudo in the scoreboard, to let everyone know you're a member.<br>\n"
" - The possibility to play past CTF, with challenges no longer "
"available, in the form of private events with the people of your choice."
"<br>\n"
" "
msgstr ""
"\n"
" - Une <span class='is-member'>couleur différente</span> pour ton "
"pseudo dans le scoreboard, pour que tout le monde sache que tu as adhéré.<br>\n"
" - La possibilité de (re)jouer les CTFs passés, dont les challenges ne sont plus disponibles, sous la forme d'un évènement privé avec les personnes de ton choix."
"<br>\n"
" "
#: src/resources/templates/resources/becomeMember.html:51
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
"Plus d'avantages pourraient être disponibles plus tard, et tu peux nous "
"soumettre vos idées."
#: src/resources/templates/resources/becomeMember.html:56
msgid "How do I claim it ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:59
msgid ""
"Once you've donated the 15 euros, you just need to contact us on discord or "
"by mail:"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:7
#: resources/templates/resources/create_challenge.html:7
msgid "Create new challenges"
msgstr "Créer de nouveaux challenges"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:10
#: resources/templates/resources/create_challenge.html:10
msgid "If you want to create new challenges for 42CTF, send us a message on "
msgstr ""
"Si tu souhaites créer de nouveaux challenges pour 42CTF, envoie-nous un "
"message sur "
#: src/resources/templates/resources/create_challenge.html:11
#: resources/templates/resources/create_challenge.html:11
msgid "If your challenge is offline, then you don't have to ask us in advance."
msgstr ""
"Si ton challenge est hors ligne, tu n'as pas besoin de nous demander à "
"l'avance."
#: src/resources/templates/resources/create_challenge.html:12
#: resources/templates/resources/create_challenge.html:12
msgid ""
"If your challenge is online (for example web or pwn), then you should give "
"us a short description of what you want to do."
msgstr ""
"Si ton challenge est en ligne (par exemple web or pwn), alors tu devras "
"nous donner une courte description de ce que tu veux faire."
#: src/resources/templates/resources/create_challenge.html:13
#: resources/templates/resources/create_challenge.html:13
msgid ""
"We may be able to help you or to give you resources such as dockerfiles."
msgstr ""
"Nous pouvons être en mesure de t'aider ou de te fournir des ressources "
"comme des dockerfiles."
#: src/resources/templates/resources/create_challenge.html:14
#: resources/templates/resources/create_challenge.html:14
msgid "We plan to make those resources publicly available in a near future."
msgstr ""
"Nous prévoyons de rendre ces ressources accessibles au public dans un avenir "
"proche."
#: src/resources/templates/resources/donate.html:7
#: resources/templates/resources/donate.html:7
msgid "Donate"
msgstr "Donner"
#: src/resources/templates/resources/donate.html:14
#: resources/templates/resources/donate.html:10
msgid "Become a 42CTF member"
msgstr "Devenez membre de 42CTF"
#: resources/templates/resources/donate.html:11
msgid ""
"42CTF is a non-profit organization with a legal status under the french law "
"(Association loi 1901)."
msgstr "42CTF est une association loi 1901 (loi française)."
#: resources/templates/resources/donate.html:12
msgid "You can support us by becoming a member and paying a fee of 15 euros."
msgstr ""
"Vous pouvez nous aider financièrement en devenant membre, au cout de 15 "
"euros."
#: resources/templates/resources/donate.html:13
msgid "Membership is then granted for 1 year."
msgstr "Le status de membre est valable 1 an au paiement de la cotisation."
#: resources/templates/resources/donate.html:15
msgid "When you become a member, you gain the following advantages:"
msgstr "Lorsque vous adherez à 42CTF, vous obtenez les avantages suivants :"
#: resources/templates/resources/donate.html:16
msgid ""
"A different color for your pseudo in the scoreboard, to let everyone know "
"you're a member."
msgstr ""
"Une couleur différente pour votre pseudo sur le scoreboard, pour que tout le "
"monde sache que vous êtes membre."
#: resources/templates/resources/donate.html:17
msgid ""
"The possibility to play again past CTF, with challenges no longer available, "
"in the form of private events with the people of your choice."
msgstr ""
"La possibilité de jouer de nouveau aux CTF passés, avec des challenges qui "
"ne sont plus disponibles, sous la forme d'un événement privé avec les "
"personnes de votre choix."
#: resources/templates/resources/donate.html:18
msgid ""
"Ex: you played Welcome CTF 2021, and want to play it again with your friends "
"during one weekend."
msgstr ""
"Ex: vous avez joué au Welcome CTF 2021, et vous voulez renouveler "
"l'expérience avec vos amis le temps d'un weekend."
#: resources/templates/resources/donate.html:19
msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
msgstr "Ou au contraire vous n'avez pas joué car vous n'étiez pas éligible."
#: resources/templates/resources/donate.html:22
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
"Plus d'avantages pourraient être disponibles plus tard, et vous pouvez nous "
"soumettre vos idées."
#: resources/templates/resources/donate.html:23
msgid ""
"However, we will not organize limited time CTF for members only, as this "
"will be equivalent to organize paid events, and we want 42CTF to remain FREE "
"for all."
msgstr ""
"Cependant, nous n'organiserons pas de CTF en temps limité réservé aux "
"membres, car cela serait équivalent à organiser des événements payants, and "
"nous voulons que 42CTF reste GRATUIT pour tous."
#: resources/templates/resources/donate.html:26
msgid "Donate to 42CTF"
msgstr "Donnez à 42CTF"
#: resources/templates/resources/donate.html:27
msgid ""
"You can donate to 42CTF or pay your membership with the following means:"
msgstr ""
"Vous pouvez donner à 42CTF ou payer votre adhésion avec les moyens suivants :"
#: resources/templates/resources/donate.html:46
msgid ""
"If you would like us to add another payment method or if you want to pay in "
"cash, send us a message !"
msgstr ""
"Si tu aimerais qu'on ajoute un autre moyen de paiement, ou si tu veux "
"payer en liquide, envoie-nous un message !"
"Si vous aimeriez qu'on ajoute un autre moyen de paiement, ou si vous voulez "
"payer en liquide, envoyez nous un message !"
#: src/resources/templates/resources/donate.html:18
msgid "What will we do with your money ?"
msgstr ""
#: src/resources/templates/resources/donate.html:21
#, python-format
#: resources/templates/resources/donate.html:48
msgid ""
"Hosting a website - and especially a CTF platform - costs money: more "
"precisely, it costs us <b>50 euros per month</b>.\n"
" <br><br>\n"
" If we had <b>40 members</b> each year, it would be "
"enough to cover the hosting of 42CTF.\n"
" <br>\n"
" We currently have %(nb_members)s members.\n"
" <br><br>\n"
" 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 this threshold :)"
"If you're paying for your membership, don't forget to send us your first and "
"last name, as well as your 42CTF pseudo."
msgstr ""
"Si vous payez pour l'adhesion, n'oubliez pas de nous envoyer vos noms et "
"prénoms, ainsi que votre pseudo 42CTF."
#: resources/templates/resources/donate.html:49
msgid ""
"We will only use thoe data to keep track of our members and grant you "
"advantages, and we will never communicate them to any third party."
msgstr ""
"Nous utiliserons ces données exclusivement pour tenir compte de nos membres "
"et vous accorder des avantages, nous ne transmettrons jamais ces données à "
"des tierces parties."
#: resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr ""
#: src/resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr "Modifier cette page"
#: src/resources/templates/resources/edit.html:12
#: resources/templates/resources/edit.html:12
msgid ""
"More information coming soon, but as you can guess it involves making a pull "
"request to your favorite"
msgstr ""
"De plus amples informations seront bientôt disponibles, mais comme tu "
"pouvez le deviner, tu peux faire une pull request sur ton bien aimé"
#: src/resources/templates/resources/tools.html:7
#: resources/templates/resources/tools.html:7
msgid "Recommended Tools"
msgstr "Outils recommandés"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "To get you started, we built a VM that you can simply import in"
msgstr ""
"Pour commencer, nous avons construit une VM que tu peux simplement "
"importer dans"
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "with a bunch of useful tools."
msgstr "avec quelques outils utiles"
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "You can dowload this OVA"
msgstr "Tu peux télécharger l'OVA"
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "here"
msgstr "ici"
msgstr ""
#: src/resources/templates/resources/tools.html:13
#: resources/templates/resources/tools.html:13
msgid "Here are the tools installed on the VM:"
msgstr "Voici la liste des outils installés sur la VM:"
msgstr ""
#: src/resources/templates/resources/tools.html:22
#: resources/templates/resources/tools.html:22
msgid ""
"If you want to solve the challenges on your own machine, we recommend you to "
"use a Linux operating system."
msgstr ""
"Si tu veux résoudre les challenges sur ta propre machine, nous "
"recommandons l'utilisation de Linux."
#: src/resources/templates/resources/tools.html:23
#: resources/templates/resources/tools.html:23
msgid ""
"Most of the reverse challenges are ELF binaries and won't run on Mac OS or "
"Windows."
msgstr ""
"La plupart des challenges de reverse sont des binaires ELF et ne "
"fonctionneront pas sur MacOS ou Windows."
#: src/resources/templates/resources/tools.html:25
#: resources/templates/resources/tools.html:25
msgid "Additionnaly, you will need the following languages interpreters:"
msgstr "De plus, tu auras besoin des interpréteurs de langage suivants :"
msgstr ""
#: src/resources/templates/resources/translate.html:7
#: resources/templates/resources/translate.html:7
msgid "Translate 42CTF"
msgstr "Traduire 42CTF"
msgstr ""
#: src/resources/templates/resources/translate.html:10
#: resources/templates/resources/translate.html:10
msgid "42CTF source code is publicly available on this"
msgstr "Le code source de 42CTF est publiquement disponible sur ce"
msgstr ""
#: src/resources/templates/resources/translate.html:12
#: resources/templates/resources/translate.html:11
msgid ""
"Translation does not require any programming skill and is a good way to "
"contribute if you want to help us, by making the platform always more "
"accessible."
msgstr ""
"La traduction ne nécessite aucune compétence en programmation et constitue "
"un bon moyen de contribuer si tu souhaites nous aider, en rendant la "
"plateforme toujours plus accessible."
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid "We have a"
msgstr "Nous avons un"
msgstr ""
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid ""
"describing how to translate pages with the Django internalization module."
msgstr ""
"qui décrit comment traduire des pages avec le module d'internalisation de "
"Django."
#: src/resources/templates/resources/translate.html:16
#: resources/templates/resources/translate.html:13
msgid ""
"We invite you to read it to know all the details, but it merely requires you "
"to edit text files, so you see, no programming skills required ;)"
msgstr ""
#: resources/templates/resources/translate.html:14
msgid ""
"You will need to fork the git repository, make your changes, push them, and "
"then open a pull request so that we can merge your contributions into our "
"repository."
msgstr ""
"Tu devras fork le dépôt git, effectuer tes modifications, les push, puis "
"ouvrir une pull request afin que nous puissions merge tes contributions dans "
"notre repo."
#: src/resources/templates/resources/translate.html:17
#: resources/templates/resources/translate.html:15
msgid "Don't hesitate to reach for help on"
msgstr "N'hésite pas à demander de l'aide sur"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,281 +18,278 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/resources/templates/resources/about.html:11
#: resources/templates/resources/42ctf.html:7
msgid "What is 42CTF ?"
msgstr ""
#: src/resources/templates/resources/about.html:14
#: resources/templates/resources/42ctf.html:10
msgid "A short introduction to CTF"
msgstr ""
#: src/resources/templates/resources/about.html:15
#: resources/templates/resources/42ctf.html:11
msgid ""
"CTF stands for Capture The Flag. It is a cybersecurity competition, where "
"participants have to solve challenges of various categories to gain points "
"and progress on the scoreboard."
msgstr ""
#: src/resources/templates/resources/about.html:16
msgid ""
"The challenges require participants to find sort of passwords called \"flags"
"\" and to submit them on the platform."
#: resources/templates/resources/42ctf.html:12
msgid "The challenges require participants to find sort of passwords called \\"
msgstr ""
#: src/resources/templates/resources/about.html:19
#: resources/templates/resources/42ctf.html:15
msgid "Functionment of 42CTF"
msgstr ""
#: src/resources/templates/resources/about.html:20
#: resources/templates/resources/42ctf.html:16
msgid "42CTF is what we call a permanent CTF."
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "Except from the"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "events"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "challenges are available on the platform without time limitations."
msgstr ""
#: src/resources/templates/resources/about.html:22
#: resources/templates/resources/42ctf.html:18
msgid "The registration on 42CTF is open to everyone, 42 students or not."
msgstr ""
#: src/resources/templates/resources/about.html:23
#: resources/templates/resources/42ctf.html:19
msgid ""
"Events may or may not be open. If you would like to organize an event on "
"42CTF, feel free to contact us."
msgstr ""
#: src/resources/templates/resources/about.html:26
#: resources/templates/resources/42ctf.html:22
msgid "42CTF Team"
msgstr ""
#: src/resources/templates/resources/about.html:27
#: resources/templates/resources/42ctf.html:23
msgid "42CTF is managed by 42 students."
msgstr ""
#: src/resources/templates/resources/about.html:28
#: resources/templates/resources/42ctf.html:24
msgid "You can meet the team on"
msgstr ""
#: src/resources/templates/resources/about.html:29
#: resources/templates/resources/42ctf.html:25
msgid ""
"Challenges are created by various contributors, not necessarily 42 students."
msgstr ""
#: src/resources/templates/resources/about.html:30
#: resources/templates/resources/42ctf.html:26
msgid ""
"Anyone is welcome to submit their own challenges, either on the permanent "
"CTF or for a specific event."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:8
msgid "Become a 42CTF member"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:13
msgid "Why should I become a 42CTF member ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:18
msgid ""
"\n"
" 42CTF is a non-profit organization with a legal status under "
"the french law (Association loi 1901).<br>\n"
" Running a CTF platform costs money, and we are not currently "
"funded by anyone except you.<br>\n"
" You can become a 42CTF member if you want to support our "
"activity :)\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:27
msgid "I want to be a member !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:30
msgid ""
"You're welcome ! To become a member, all you need to do is to donate us 15 "
"euros and your membership will last for a year."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:36
msgid "If you want to use another payment method, please contact us !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:43
msgid "What do I get ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:45
msgid ""
"\n"
" - A <span class='is-member'>different color</span> for your "
"pseudo in the scoreboard, to let everyone know you're a member.<br>\n"
" - The possibility to play past CTF, with challenges no longer "
"available, in the form of private events with the people of your choice."
"<br>\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:51
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:56
msgid "How do I claim it ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:59
msgid ""
"Once you've donated the 15 euros, you just need to contact us on discord or "
"by mail:"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:7
#: resources/templates/resources/create_challenge.html:7
msgid "Create new challenges"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:10
#: resources/templates/resources/create_challenge.html:10
msgid "If you want to create new challenges for 42CTF, send us a message on "
msgstr ""
#: src/resources/templates/resources/create_challenge.html:11
#: resources/templates/resources/create_challenge.html:11
msgid "If your challenge is offline, then you don't have to ask us in advance."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:12
#: resources/templates/resources/create_challenge.html:12
msgid ""
"If your challenge is online (for example web or pwn), then you should give "
"us a short description of what you want to do."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:13
#: resources/templates/resources/create_challenge.html:13
msgid ""
"We may be able to help you or to give you resources such as dockerfiles."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:14
#: resources/templates/resources/create_challenge.html:14
msgid "We plan to make those resources publicly available in a near future."
msgstr ""
#: src/resources/templates/resources/donate.html:7
#: resources/templates/resources/donate.html:7
msgid "Donate"
msgstr ""
#: src/resources/templates/resources/donate.html:14
#: resources/templates/resources/donate.html:10
msgid "Become a 42CTF member"
msgstr ""
#: resources/templates/resources/donate.html:11
msgid ""
"42CTF is a non-profit organization with a legal status under the french law "
"(Association loi 1901)."
msgstr ""
#: resources/templates/resources/donate.html:12
msgid "You can support us by becoming a member and paying a fee of 15 euros."
msgstr ""
#: resources/templates/resources/donate.html:13
msgid "Membership is then granted for 1 year."
msgstr ""
#: resources/templates/resources/donate.html:15
msgid "When you become a member, you gain the following advantages:"
msgstr ""
#: resources/templates/resources/donate.html:16
msgid ""
"A different color for your pseudo in the scoreboard, to let everyone know "
"you're a member."
msgstr ""
#: resources/templates/resources/donate.html:17
msgid ""
"The possibility to play again past CTF, with challenges no longer available, "
"in the form of private events with the people of your choice."
msgstr ""
#: resources/templates/resources/donate.html:18
msgid ""
"Ex: you played Welcome CTF 2021, and want to play it again with your friends "
"during one weekend."
msgstr ""
#: resources/templates/resources/donate.html:19
msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
msgstr ""
#: resources/templates/resources/donate.html:22
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
#: resources/templates/resources/donate.html:23
msgid ""
"However, we will not organize limited time CTF for members only, as this "
"will be equivalent to organize paid events, and we want 42CTF to remain FREE "
"for all."
msgstr ""
#: resources/templates/resources/donate.html:26
msgid "Donate to 42CTF"
msgstr ""
#: resources/templates/resources/donate.html:27
msgid ""
"You can donate to 42CTF or pay your membership with the following means:"
msgstr ""
#: resources/templates/resources/donate.html:46
msgid ""
"If you would like us to add another payment method or if you want to pay in "
"cash, send us a message !"
msgstr ""
#: src/resources/templates/resources/donate.html:18
msgid "What will we do with your money ?"
msgstr ""
#: src/resources/templates/resources/donate.html:21
#, python-format
#: resources/templates/resources/donate.html:48
msgid ""
"Hosting a website - and especially a CTF platform - costs money: more "
"precisely, it costs us <b>50 euros per month</b>.\n"
" <br><br>\n"
" If we had <b>40 members</b> each year, it would be "
"enough to cover the hosting of 42CTF.\n"
" <br>\n"
" We currently have %(nb_members)s members.\n"
" <br><br>\n"
" 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 this threshold :)"
"If you're paying for your membership, don't forget to send us your first and "
"last name, as well as your 42CTF pseudo."
msgstr ""
#: src/resources/templates/resources/edit.html:7
#: resources/templates/resources/donate.html:49
msgid ""
"We will only use thoe data to keep track of our members and grant you "
"advantages, and we will never communicate them to any third party."
msgstr ""
#: resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr ""
#: src/resources/templates/resources/edit.html:12
#: resources/templates/resources/edit.html:12
msgid ""
"More information coming soon, but as you can guess it involves making a pull "
"request to your favorite"
msgstr ""
#: src/resources/templates/resources/tools.html:7
#: resources/templates/resources/tools.html:7
msgid "Recommended Tools"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "To get you started, we built a VM that you can simply import in"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "with a bunch of useful tools."
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "You can dowload this OVA"
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "here"
msgstr ""
#: src/resources/templates/resources/tools.html:13
#: resources/templates/resources/tools.html:13
msgid "Here are the tools installed on the VM:"
msgstr ""
#: src/resources/templates/resources/tools.html:22
#: resources/templates/resources/tools.html:22
msgid ""
"If you want to solve the challenges on your own machine, we recommend you to "
"use a Linux operating system."
msgstr ""
#: src/resources/templates/resources/tools.html:23
#: resources/templates/resources/tools.html:23
msgid ""
"Most of the reverse challenges are ELF binaries and won't run on Mac OS or "
"Windows."
msgstr ""
#: src/resources/templates/resources/tools.html:25
#: resources/templates/resources/tools.html:25
msgid "Additionnaly, you will need the following languages interpreters:"
msgstr ""
#: src/resources/templates/resources/translate.html:7
#: resources/templates/resources/translate.html:7
msgid "Translate 42CTF"
msgstr ""
#: src/resources/templates/resources/translate.html:10
#: resources/templates/resources/translate.html:10
msgid "42CTF source code is publicly available on this"
msgstr ""
#: src/resources/templates/resources/translate.html:12
#: resources/templates/resources/translate.html:11
msgid ""
"Translation does not require any programming skill and is a good way to "
"contribute if you want to help us, by making the platform always more "
"accessible."
msgstr ""
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid "We have a"
msgstr ""
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid ""
"describing how to translate pages with the Django internalization module."
msgstr ""
#: src/resources/templates/resources/translate.html:16
#: resources/templates/resources/translate.html:13
msgid ""
"We invite you to read it to know all the details, but it merely requires you "
"to edit text files, so you see, no programming skills required ;)"
msgstr ""
#: resources/templates/resources/translate.html:14
msgid ""
"You will need to fork the git repository, make your changes, push them, and "
"then open a pull request so that we can merge your contributions into our "
"repository."
msgstr ""
#: src/resources/templates/resources/translate.html:17
#: resources/templates/resources/translate.html:15
msgid "Don't hesitate to reach for help on"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,396 +18,278 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/resources/templates/resources/about.html:11
#: resources/templates/resources/42ctf.html:7
msgid "What is 42CTF ?"
msgstr "42CTFとは"
msgstr ""
#: src/resources/templates/resources/about.html:14
#: resources/templates/resources/42ctf.html:10
msgid "A short introduction to CTF"
msgstr "CTFについての簡単な紹介"
msgstr ""
#: src/resources/templates/resources/about.html:15
#: resources/templates/resources/42ctf.html:11
msgid ""
"CTF stands for Capture The Flag. It is a cybersecurity competition, where "
"participants have to solve challenges of various categories to gain points "
"and progress on the scoreboard."
msgstr ""
"42CTFとは、Capture The Flagの略です。サイバーセキュリティの競技会のことで、参"
"加者は様々なカテゴリーの課題を解決してポイントを獲得し、スコアボードでの順位"
"を上げていきます。"
#: src/resources/templates/resources/about.html:16
msgid ""
"The challenges require participants to find sort of passwords called \"flags"
"\" and to submit them on the platform."
#: resources/templates/resources/42ctf.html:12
msgid "The challenges require participants to find sort of passwords called \\"
msgstr ""
"この課題では、参加者は\"フラグ\"と呼ばれるパスワードを見つけて、プラット"
"フォームに送信することになっています。"
#: src/resources/templates/resources/about.html:19
#: resources/templates/resources/42ctf.html:15
msgid "Functionment of 42CTF"
msgstr "42CTFの機能紹介"
msgstr ""
#: src/resources/templates/resources/about.html:20
#: resources/templates/resources/42ctf.html:16
msgid "42CTF is what we call a permanent CTF."
msgstr "42CTFは、いわゆる永続的CTFです。"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "Except from the"
msgstr "こちらを除き"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "events"
msgstr "(イベント)"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "challenges are available on the platform without time limitations."
msgstr "時間制限なしにプラットフォーム上でチャレンジ可能です。"
msgstr ""
#: src/resources/templates/resources/about.html:22
#: resources/templates/resources/42ctf.html:18
msgid "The registration on 42CTF is open to everyone, 42 students or not."
msgstr "42CTFへの登録は、42の学生であるかどうかに関わらず、誰でも可能です。"
msgstr ""
#: src/resources/templates/resources/about.html:23
#: resources/templates/resources/42ctf.html:19
msgid ""
"Events may or may not be open. If you would like to organize an event on "
"42CTF, feel free to contact us."
msgstr ""
"イベントは開催する場合としない場合があります。42CTFでのイベント開催をご希望の"
"方は、お気軽にお問い合わせください。"
#: src/resources/templates/resources/about.html:26
#: resources/templates/resources/42ctf.html:22
msgid "42CTF Team"
msgstr "42CTFチーム"
msgstr ""
#: src/resources/templates/resources/about.html:27
#: resources/templates/resources/42ctf.html:23
msgid "42CTF is managed by 42 students."
msgstr "42CTFは42の学生によって運営されています。"
msgstr ""
#: src/resources/templates/resources/about.html:28
#: resources/templates/resources/42ctf.html:24
msgid "You can meet the team on"
msgstr "こちらでチームに会えます:"
msgstr ""
#: src/resources/templates/resources/about.html:29
#: resources/templates/resources/42ctf.html:25
msgid ""
"Challenges are created by various contributors, not necessarily 42 students."
msgstr "課題は42の学生だけではなく、様々な協力者によって作られます。"
msgstr ""
#: src/resources/templates/resources/about.html:30
#: resources/templates/resources/42ctf.html:26
msgid ""
"Anyone is welcome to submit their own challenges, either on the permanent "
"CTF or for a specific event."
msgstr ""
"常設のCTFでも、特定のイベントでも、誰でも自身が作成した課題を提出することがで"
"きます。"
#: src/resources/templates/resources/becomeMember.html:8
msgid "Become a 42CTF member"
msgstr "42CTFのメンバーになる"
#: src/resources/templates/resources/becomeMember.html:13
#, fuzzy
#| msgid "Become a 42CTF member"
msgid "Why should I become a 42CTF member ?"
msgstr "42CTFのメンバーになる"
#: src/resources/templates/resources/becomeMember.html:18
msgid ""
"\n"
" 42CTF is a non-profit organization with a legal status under "
"the french law (Association loi 1901).<br>\n"
" Running a CTF platform costs money, and we are not currently "
"funded by anyone except you.<br>\n"
" You can become a 42CTF member if you want to support our "
"activity :)\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:27
msgid "I want to be a member !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:30
msgid ""
"You're welcome ! To become a member, all you need to do is to donate us 15 "
"euros and your membership will last for a year."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:36
msgid "If you want to use another payment method, please contact us !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:43
msgid "What do I get ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:45
msgid ""
"\n"
" - A <span class='is-member'>different color</span> for your "
"pseudo in the scoreboard, to let everyone know you're a member.<br>\n"
" - The possibility to play past CTF, with challenges no longer "
"available, in the form of private events with the people of your choice."
"<br>\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:51
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
"もっと多くの利点があるかもしれませんし、あなたのアイデアを私たちに提供してい"
"ただくことも可能です。"
#: src/resources/templates/resources/becomeMember.html:56
msgid "How do I claim it ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:59
msgid ""
"Once you've donated the 15 euros, you just need to contact us on discord or "
"by mail:"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:7
#: resources/templates/resources/create_challenge.html:7
msgid "Create new challenges"
msgstr "新しい課題を作成する"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:10
#: resources/templates/resources/create_challenge.html:10
msgid "If you want to create new challenges for 42CTF, send us a message on "
msgstr ""
"42CTFの新しい課題を作成したい方は、こちらでメッセージを送ってください"
#: src/resources/templates/resources/create_challenge.html:11
#: resources/templates/resources/create_challenge.html:11
msgid "If your challenge is offline, then you don't have to ask us in advance."
msgstr "オフラインでの課題であれば、事前にご相談いただく必要はありません。"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:12
#: resources/templates/resources/create_challenge.html:12
msgid ""
"If your challenge is online (for example web or pwn), then you should give "
"us a short description of what you want to do."
msgstr ""
"課題がオンラインの場合webやpwn、何をしたいのかを簡単に説明してくださ"
"い。"
#: src/resources/templates/resources/create_challenge.html:13
#: resources/templates/resources/create_challenge.html:13
msgid ""
"We may be able to help you or to give you resources such as dockerfiles."
msgstr ""
"私たちがお手伝いをさせていただいたり、dockerfileなどのリソースを提供させてい"
"ただく場合があります。"
#: src/resources/templates/resources/create_challenge.html:14
#: resources/templates/resources/create_challenge.html:14
msgid "We plan to make those resources publicly available in a near future."
msgstr "近日、これらのリソースを公開する予定です。"
msgstr ""
#: src/resources/templates/resources/donate.html:7
#: resources/templates/resources/donate.html:7
msgid "Donate"
msgstr "寄付"
msgstr ""
#: src/resources/templates/resources/donate.html:14
#: resources/templates/resources/donate.html:10
msgid "Become a 42CTF member"
msgstr ""
#: resources/templates/resources/donate.html:11
msgid ""
"42CTF is a non-profit organization with a legal status under the french law "
"(Association loi 1901)."
msgstr ""
#: resources/templates/resources/donate.html:12
msgid "You can support us by becoming a member and paying a fee of 15 euros."
msgstr ""
#: resources/templates/resources/donate.html:13
msgid "Membership is then granted for 1 year."
msgstr ""
#: resources/templates/resources/donate.html:15
msgid "When you become a member, you gain the following advantages:"
msgstr ""
#: resources/templates/resources/donate.html:16
msgid ""
"A different color for your pseudo in the scoreboard, to let everyone know "
"you're a member."
msgstr ""
#: resources/templates/resources/donate.html:17
msgid ""
"The possibility to play again past CTF, with challenges no longer available, "
"in the form of private events with the people of your choice."
msgstr ""
#: resources/templates/resources/donate.html:18
msgid ""
"Ex: you played Welcome CTF 2021, and want to play it again with your friends "
"during one weekend."
msgstr ""
#: resources/templates/resources/donate.html:19
msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
msgstr ""
#: resources/templates/resources/donate.html:22
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
#: resources/templates/resources/donate.html:23
msgid ""
"However, we will not organize limited time CTF for members only, as this "
"will be equivalent to organize paid events, and we want 42CTF to remain FREE "
"for all."
msgstr ""
#: resources/templates/resources/donate.html:26
msgid "Donate to 42CTF"
msgstr ""
#: resources/templates/resources/donate.html:27
msgid ""
"You can donate to 42CTF or pay your membership with the following means:"
msgstr ""
#: resources/templates/resources/donate.html:46
msgid ""
"If you would like us to add another payment method or if you want to pay in "
"cash, send us a message !"
msgstr ""
"他のお支払い方法や現金でのお支払いをご希望の場合は、メッセージをお送りくださ"
"い。"
#: src/resources/templates/resources/donate.html:18
msgid "What will we do with your money ?"
msgstr ""
#: src/resources/templates/resources/donate.html:21
#, python-format
#: resources/templates/resources/donate.html:48
msgid ""
"Hosting a website - and especially a CTF platform - costs money: more "
"precisely, it costs us <b>50 euros per month</b>.\n"
" <br><br>\n"
" If we had <b>40 members</b> each year, it would be "
"enough to cover the hosting of 42CTF.\n"
" <br>\n"
" We currently have %(nb_members)s members.\n"
" <br><br>\n"
" 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 this threshold :)"
"If you're paying for your membership, don't forget to send us your first and "
"last name, as well as your 42CTF pseudo."
msgstr ""
#: src/resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr "このページの編集"
#: resources/templates/resources/donate.html:49
msgid ""
"We will only use thoe data to keep track of our members and grant you "
"advantages, and we will never communicate them to any third party."
msgstr ""
#: src/resources/templates/resources/edit.html:12
#: resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr ""
#: resources/templates/resources/edit.html:12
msgid ""
"More information coming soon, but as you can guess it involves making a pull "
"request to your favorite"
msgstr ""
"詳細は近日中にお知らせしますが、お察しの通り、以下にプルリクエストをすること"
"になります:"
#: src/resources/templates/resources/tools.html:7
#: resources/templates/resources/tools.html:7
msgid "Recommended Tools"
msgstr "おすすめのツール"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "To get you started, we built a VM that you can simply import in"
msgstr "手始めに、Virtual BoxでインストールするだけのVMを構築しました"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "with a bunch of useful tools."
msgstr "便利なツールを使用しました。"
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "You can dowload this OVA"
msgstr "このOVAはこちらからダウンロードできます"
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "here"
msgstr "こちら"
msgstr ""
#: src/resources/templates/resources/tools.html:13
#: resources/templates/resources/tools.html:13
msgid "Here are the tools installed on the VM:"
msgstr "以下に、VMにインストールされたツールを紹介します"
msgstr ""
#: src/resources/templates/resources/tools.html:22
#: resources/templates/resources/tools.html:22
msgid ""
"If you want to solve the challenges on your own machine, we recommend you to "
"use a Linux operating system."
msgstr ""
"自分のマシンで課題にチャレンジしたい場合は、Linux OSを使用することをお勧めし"
"ます。"
#: src/resources/templates/resources/tools.html:23
#: resources/templates/resources/tools.html:23
msgid ""
"Most of the reverse challenges are ELF binaries and won't run on Mac OS or "
"Windows."
msgstr "ReversingのほとんどはELFバイナリで、Mac OSやWindowsでは動作しません。"
msgstr ""
#: src/resources/templates/resources/tools.html:25
#: resources/templates/resources/tools.html:25
msgid "Additionnaly, you will need the following languages interpreters:"
msgstr "さらに、以下の言語のインタプリタが必要です。"
msgstr ""
#: src/resources/templates/resources/translate.html:7
#: resources/templates/resources/translate.html:7
msgid "Translate 42CTF"
msgstr "42CTFを翻訳"
msgstr ""
#: src/resources/templates/resources/translate.html:10
#: resources/templates/resources/translate.html:10
msgid "42CTF source code is publicly available on this"
msgstr "42CTFのソースコードはこのサイトで公開されています。"
msgstr ""
#: src/resources/templates/resources/translate.html:12
#: resources/templates/resources/translate.html:11
msgid ""
"Translation does not require any programming skill and is a good way to "
"contribute if you want to help us, by making the platform always more "
"accessible."
msgstr ""
"翻訳にはプログラミングのスキルは必要ありません。プラットフォームをより使いや"
"すくすることで、私たちに貢献したいとお考えの方には良い方法です。"
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid "We have a"
msgstr "こちらがあります。:"
msgstr ""
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid ""
"describing how to translate pages with the Django internalization module."
msgstr ""
"djangoのinternalizationモジュールを使ってページを翻訳する方法を説明したもので"
"す。"
#: src/resources/templates/resources/translate.html:16
#: resources/templates/resources/translate.html:13
msgid ""
"We invite you to read it to know all the details, but it merely requires you "
"to edit text files, so you see, no programming skills required ;)"
msgstr ""
#: resources/templates/resources/translate.html:14
msgid ""
"You will need to fork the git repository, make your changes, push them, and "
"then open a pull request so that we can merge your contributions into our "
"repository."
msgstr ""
"gitリポジトリをフォークしていただき、変更を加えてプッシュし、プルリクエストを"
"作成していただくことで、皆さんの貢献を私たちのリポジトリにマージすることがで"
"きます。"
#: src/resources/templates/resources/translate.html:17
#: resources/templates/resources/translate.html:15
msgid "Don't hesitate to reach for help on"
msgstr "躊躇せずに、こちらで助けを求めてください。:"
#~ msgid ""
#~ "42CTF is a non-profit organization with a legal status under the french "
#~ "law (Association loi 1901)."
#~ msgstr ""
#~ "42CTFは、フランスの法律Association loi 1901に基づく法的地位を有する非"
#~ "営利団体です。"
#~ msgid ""
#~ "You can support us by becoming a member and paying a fee of 15 euros."
#~ msgstr ""
#~ "メンバーになって、15ユーロの会費を払うことで、私たちをサポートすることがで"
#~ "きます。"
#~ msgid "Membership is then granted for 1 year."
#~ msgstr "その後、1年間のメンバーシップが付与されます。"
#~ msgid "When you become a member, you gain the following advantages:"
#~ msgstr "会員になると、以下のようなメリットがあります:"
#~ msgid ""
#~ "A different color for your pseudo in the scoreboard, to let everyone know "
#~ "you're a member."
#~ msgstr ""
#~ "スコアボードに表示されるアカウント名の色が変わり、メンバーであることが誰に"
#~ "でもわかるように。"
#~ msgid ""
#~ "The possibility to play again past CTF, with challenges no longer "
#~ "available, in the form of private events with the people of your choice."
#~ msgstr ""
#~ "チャレンジができなくなった過去のCTFを、好きな人とプライベートイベントの形"
#~ "で再びチャレンジできる可能性。"
#~ msgid ""
#~ "Ex: you played Welcome CTF 2021, and want to play it again with your "
#~ "friends during one weekend."
#~ msgstr ""
#~ "例Welcome CTF 2021 に一度チャレンジして、週末に友達ともう一度チャレンジ"
#~ "したいと思っている方。"
#~ msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
#~ msgstr ""
#~ "または、Welcome CTF 2021 への参加資格がなかったため、チャレンジできなかっ"
#~ "た方。"
#~ msgid ""
#~ "However, we will not organize limited time CTF for members only, as this "
#~ "will be equivalent to organize paid events, and we want 42CTF to remain "
#~ "FREE for all."
#~ msgstr ""
#~ "しかし、メンバーのみ参加できる期間限定CTFを開催することはありません。これ"
#~ "は、有料のイベントを開催することと同義であり、私たちは42CTFがすべての人に"
#~ "とって無料であることを望んでいます。"
#~ msgid "Donate to 42CTF"
#~ msgstr "42CTFに寄付する"
#~ msgid ""
#~ "You can donate to 42CTF or pay your membership with the following means:"
#~ msgstr ""
#~ "42CTFへのご寄付やメンバーシップのお支払いは、以下の手段で行うことができま"
#~ "す:"
#~ msgid ""
#~ "If you're paying for your membership, don't forget to send us your first "
#~ "and last name, as well as your 42CTF pseudo."
#~ msgstr ""
#~ "メンバーシップをお支払いになる場合は、氏名と42CTFのアカウント名を忘れずに"
#~ "お送りください。"
#~ msgid ""
#~ "We will only use thoe data to keep track of our members and grant you "
#~ "advantages, and we will never communicate them to any third party."
#~ msgstr ""
#~ "これらのデータは、メンバーの管理と特典の付与のためにのみ使用し、第三者に提"
#~ "供することはありません。"
#~ msgid ""
#~ "We invite you to read it to know all the details, but it merely requires "
#~ "you to edit text files, so you see, no programming skills required ;)"
#~ msgstr ""
#~ "詳細はぜひ読んでいただきたいのですが、単にテキストファイルを編集するだけな"
#~ "ので、プログラミングのスキルは必要ありません ;)"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-16 19:28+0200\n"
"POT-Creation-Date: 2022-02-14 19:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -20,281 +20,278 @@ msgstr ""
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
"%100>=11 && n%100<=14)? 2 : 3);\n"
#: src/resources/templates/resources/about.html:11
#: resources/templates/resources/42ctf.html:7
msgid "What is 42CTF ?"
msgstr ""
#: src/resources/templates/resources/about.html:14
#: resources/templates/resources/42ctf.html:10
msgid "A short introduction to CTF"
msgstr ""
#: src/resources/templates/resources/about.html:15
#: resources/templates/resources/42ctf.html:11
msgid ""
"CTF stands for Capture The Flag. It is a cybersecurity competition, where "
"participants have to solve challenges of various categories to gain points "
"and progress on the scoreboard."
msgstr ""
#: src/resources/templates/resources/about.html:16
msgid ""
"The challenges require participants to find sort of passwords called \"flags"
"\" and to submit them on the platform."
#: resources/templates/resources/42ctf.html:12
msgid "The challenges require participants to find sort of passwords called \\"
msgstr ""
#: src/resources/templates/resources/about.html:19
#: resources/templates/resources/42ctf.html:15
msgid "Functionment of 42CTF"
msgstr ""
#: src/resources/templates/resources/about.html:20
#: resources/templates/resources/42ctf.html:16
msgid "42CTF is what we call a permanent CTF."
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "Except from the"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "events"
msgstr ""
#: src/resources/templates/resources/about.html:21
#: resources/templates/resources/42ctf.html:17
msgid "challenges are available on the platform without time limitations."
msgstr ""
#: src/resources/templates/resources/about.html:22
#: resources/templates/resources/42ctf.html:18
msgid "The registration on 42CTF is open to everyone, 42 students or not."
msgstr ""
#: src/resources/templates/resources/about.html:23
#: resources/templates/resources/42ctf.html:19
msgid ""
"Events may or may not be open. If you would like to organize an event on "
"42CTF, feel free to contact us."
msgstr ""
#: src/resources/templates/resources/about.html:26
#: resources/templates/resources/42ctf.html:22
msgid "42CTF Team"
msgstr ""
#: src/resources/templates/resources/about.html:27
#: resources/templates/resources/42ctf.html:23
msgid "42CTF is managed by 42 students."
msgstr ""
#: src/resources/templates/resources/about.html:28
#: resources/templates/resources/42ctf.html:24
msgid "You can meet the team on"
msgstr ""
#: src/resources/templates/resources/about.html:29
#: resources/templates/resources/42ctf.html:25
msgid ""
"Challenges are created by various contributors, not necessarily 42 students."
msgstr ""
#: src/resources/templates/resources/about.html:30
#: resources/templates/resources/42ctf.html:26
msgid ""
"Anyone is welcome to submit their own challenges, either on the permanent "
"CTF or for a specific event."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:8
msgid "Become a 42CTF member"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:13
msgid "Why should I become a 42CTF member ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:18
msgid ""
"\n"
" 42CTF is a non-profit organization with a legal status under "
"the french law (Association loi 1901).<br>\n"
" Running a CTF platform costs money, and we are not currently "
"funded by anyone except you.<br>\n"
" You can become a 42CTF member if you want to support our "
"activity :)\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:27
msgid "I want to be a member !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:30
msgid ""
"You're welcome ! To become a member, all you need to do is to donate us 15 "
"euros and your membership will last for a year."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:36
msgid "If you want to use another payment method, please contact us !"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:43
msgid "What do I get ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:45
msgid ""
"\n"
" - A <span class='is-member'>different color</span> for your "
"pseudo in the scoreboard, to let everyone know you're a member.<br>\n"
" - The possibility to play past CTF, with challenges no longer "
"available, in the form of private events with the people of your choice."
"<br>\n"
" "
msgstr ""
#: src/resources/templates/resources/becomeMember.html:51
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
#: src/resources/templates/resources/becomeMember.html:56
msgid "How do I claim it ?"
msgstr ""
#: src/resources/templates/resources/becomeMember.html:59
msgid ""
"Once you've donated the 15 euros, you just need to contact us on discord or "
"by mail:"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:7
#: resources/templates/resources/create_challenge.html:7
msgid "Create new challenges"
msgstr ""
#: src/resources/templates/resources/create_challenge.html:10
#: resources/templates/resources/create_challenge.html:10
msgid "If you want to create new challenges for 42CTF, send us a message on "
msgstr ""
#: src/resources/templates/resources/create_challenge.html:11
#: resources/templates/resources/create_challenge.html:11
msgid "If your challenge is offline, then you don't have to ask us in advance."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:12
#: resources/templates/resources/create_challenge.html:12
msgid ""
"If your challenge is online (for example web or pwn), then you should give "
"us a short description of what you want to do."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:13
#: resources/templates/resources/create_challenge.html:13
msgid ""
"We may be able to help you or to give you resources such as dockerfiles."
msgstr ""
#: src/resources/templates/resources/create_challenge.html:14
#: resources/templates/resources/create_challenge.html:14
msgid "We plan to make those resources publicly available in a near future."
msgstr ""
#: src/resources/templates/resources/donate.html:7
#: resources/templates/resources/donate.html:7
msgid "Donate"
msgstr ""
#: src/resources/templates/resources/donate.html:14
#: resources/templates/resources/donate.html:10
msgid "Become a 42CTF member"
msgstr ""
#: resources/templates/resources/donate.html:11
msgid ""
"42CTF is a non-profit organization with a legal status under the french law "
"(Association loi 1901)."
msgstr ""
#: resources/templates/resources/donate.html:12
msgid "You can support us by becoming a member and paying a fee of 15 euros."
msgstr ""
#: resources/templates/resources/donate.html:13
msgid "Membership is then granted for 1 year."
msgstr ""
#: resources/templates/resources/donate.html:15
msgid "When you become a member, you gain the following advantages:"
msgstr ""
#: resources/templates/resources/donate.html:16
msgid ""
"A different color for your pseudo in the scoreboard, to let everyone know "
"you're a member."
msgstr ""
#: resources/templates/resources/donate.html:17
msgid ""
"The possibility to play again past CTF, with challenges no longer available, "
"in the form of private events with the people of your choice."
msgstr ""
#: resources/templates/resources/donate.html:18
msgid ""
"Ex: you played Welcome CTF 2021, and want to play it again with your friends "
"during one weekend."
msgstr ""
#: resources/templates/resources/donate.html:19
msgid "Or you didn't play Welcome CTF 2021 because you were not eligible."
msgstr ""
#: resources/templates/resources/donate.html:22
msgid "More advantages may come later, and you can submit us your ideas."
msgstr ""
#: resources/templates/resources/donate.html:23
msgid ""
"However, we will not organize limited time CTF for members only, as this "
"will be equivalent to organize paid events, and we want 42CTF to remain FREE "
"for all."
msgstr ""
#: resources/templates/resources/donate.html:26
msgid "Donate to 42CTF"
msgstr ""
#: resources/templates/resources/donate.html:27
msgid ""
"You can donate to 42CTF or pay your membership with the following means:"
msgstr ""
#: resources/templates/resources/donate.html:46
msgid ""
"If you would like us to add another payment method or if you want to pay in "
"cash, send us a message !"
msgstr ""
#: src/resources/templates/resources/donate.html:18
msgid "What will we do with your money ?"
msgstr ""
#: src/resources/templates/resources/donate.html:21
#, python-format
#: resources/templates/resources/donate.html:48
msgid ""
"Hosting a website - and especially a CTF platform - costs money: more "
"precisely, it costs us <b>50 euros per month</b>.\n"
" <br><br>\n"
" If we had <b>40 members</b> each year, it would be "
"enough to cover the hosting of 42CTF.\n"
" <br>\n"
" We currently have %(nb_members)s members.\n"
" <br><br>\n"
" 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 this threshold :)"
"If you're paying for your membership, don't forget to send us your first and "
"last name, as well as your 42CTF pseudo."
msgstr ""
#: src/resources/templates/resources/edit.html:7
#: resources/templates/resources/donate.html:49
msgid ""
"We will only use thoe data to keep track of our members and grant you "
"advantages, and we will never communicate them to any third party."
msgstr ""
#: resources/templates/resources/edit.html:7
msgid "Edit this page"
msgstr ""
#: src/resources/templates/resources/edit.html:12
#: resources/templates/resources/edit.html:12
msgid ""
"More information coming soon, but as you can guess it involves making a pull "
"request to your favorite"
msgstr ""
#: src/resources/templates/resources/tools.html:7
#: resources/templates/resources/tools.html:7
msgid "Recommended Tools"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "To get you started, we built a VM that you can simply import in"
msgstr ""
#: src/resources/templates/resources/tools.html:10
#: resources/templates/resources/tools.html:10
msgid "with a bunch of useful tools."
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "You can dowload this OVA"
msgstr ""
#: src/resources/templates/resources/tools.html:11
#: resources/templates/resources/tools.html:11
msgid "here"
msgstr ""
#: src/resources/templates/resources/tools.html:13
#: resources/templates/resources/tools.html:13
msgid "Here are the tools installed on the VM:"
msgstr ""
#: src/resources/templates/resources/tools.html:22
#: resources/templates/resources/tools.html:22
msgid ""
"If you want to solve the challenges on your own machine, we recommend you to "
"use a Linux operating system."
msgstr ""
#: src/resources/templates/resources/tools.html:23
#: resources/templates/resources/tools.html:23
msgid ""
"Most of the reverse challenges are ELF binaries and won't run on Mac OS or "
"Windows."
msgstr ""
#: src/resources/templates/resources/tools.html:25
#: resources/templates/resources/tools.html:25
msgid "Additionnaly, you will need the following languages interpreters:"
msgstr ""
#: src/resources/templates/resources/translate.html:7
#: resources/templates/resources/translate.html:7
msgid "Translate 42CTF"
msgstr ""
#: src/resources/templates/resources/translate.html:10
#: resources/templates/resources/translate.html:10
msgid "42CTF source code is publicly available on this"
msgstr ""
#: src/resources/templates/resources/translate.html:12
#: resources/templates/resources/translate.html:11
msgid ""
"Translation does not require any programming skill and is a good way to "
"contribute if you want to help us, by making the platform always more "
"accessible."
msgstr ""
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid "We have a"
msgstr ""
#: src/resources/templates/resources/translate.html:14
#: resources/templates/resources/translate.html:12
msgid ""
"describing how to translate pages with the Django internalization module."
msgstr ""
#: src/resources/templates/resources/translate.html:16
#: resources/templates/resources/translate.html:13
msgid ""
"We invite you to read it to know all the details, but it merely requires you "
"to edit text files, so you see, no programming skills required ;)"
msgstr ""
#: resources/templates/resources/translate.html:14
msgid ""
"You will need to fork the git repository, make your changes, push them, and "
"then open a pull request so that we can merge your contributions into our "
"repository."
msgstr ""
#: src/resources/templates/resources/translate.html:17
#: resources/templates/resources/translate.html:15
msgid "Don't hesitate to reach for help on"
msgstr ""

View File

@ -1,12 +0,0 @@
from django.contrib import sitemaps
from django.urls import reverse
class StaticViewSitemap(sitemaps.Sitemap):
priority = 0.5
changefreq = 'monthly'
i18n = True
def items(self):
return ['resources:about', 'resources:howToStart', 'resources:contribute', 'resources:becomeMember']
def location(self, item):
return reverse(item)

View File

@ -1,20 +1,15 @@
{% extends 'base.html' %}
{% block content %}
{% load i18n %}
{% get_current_language as lang %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "About 42ctf" %}</h1>
</div>
<div class="col-sm-12">
<div class="col-sm-12 col-md-6">
<div class="ctf-block">
<div class="ctf-head text-center">
<h1>{% trans "What is 42CTF ?" %}</h1>
<div class="ctf-head">
<center><h3>{% trans "What is 42CTF ?" %}</h3></center>
</div>
<div class="ctf-body">
<h4>{% trans "A short introduction to CTF" %}</h4>
{% trans "CTF stands for Capture The Flag. It is a cybersecurity competition, where participants have to solve challenges of various categories to gain points and progress on the scoreboard." %}
{% blocktranslate %}The challenges require participants to find sort of passwords called "flags" and to submit them on the platform.{% endblocktranslate %}
{% trans "The challenges require participants to find sort of passwords called \"flags\" and to submit them on the platform."%}
<br><br>
<h4>{% trans "Functionment of 42CTF" %}</h4>
@ -32,5 +27,5 @@
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,73 +0,0 @@
{% extends 'base.html' %}
{% load static %}
{% block content %}
{% load i18n %}
{% get_current_language as lang %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "Become a 42CTF member" %}</h1>
</div>
<div class="col-sm-6">
<div class="ctf-block text-center">
<div class="ctf-head text-center">
<h4>{% trans "Why should I become a 42CTF member ?" %}</h4>
</div>
<div class="ctf-body">
<img src="{% static "img/42ctf_logo_big_no_bg_full_white.svg" %}" width="200px" alt="42ctf logo"/>
<br><br>
{% blocktranslate %}
42CTF is a non-profit organization with a legal status under the french law (Association loi 1901).<br>
Running a CTF platform costs money, and we are not currently funded by anyone except you.<br>
You can become a 42CTF member if you want to support our activity :)
{% endblocktranslate %}
</div>
</div>
<div class="ctf-block text-center">
<div class="ctf-head text-center">
<h4>{% trans "I want to be a member !" %}</h4>
</div>
<div>
<br/>
{% trans "You're welcome ! To become a member, all you need to do is to donate us 15 euros and your membership will last for a year." %}
<br>
<a href="https://www.paypal.com/donate/?hosted_button_id=M6YBYZ63MQGAY" target="_blank">
<img src="/static/img/paypal.png" width="200">
</a>
<br>
{% trans "If you want to use another payment method, please contact us !" %}
</div>
</div>
</div>
<div class="col-sm-6">
<div class="ctf-block">
<div class="ctf-head text-center">
<h4>{% trans "What do I get ?" %}</h4>
</div>
<br><br>
{% blocktranslate %}
- A <span class='is-member'>different color</span> for your pseudo in the scoreboard, to let everyone know you're a member.<br>
- The possibility to play past CTF, with challenges no longer available, in the form of private events with the people of your choice.<br>
{% endblocktranslate %}
<br>
<p class="text-center">
{% trans "More advantages may come later, and you can submit us your ideas." %}
</p>
</div>
<div class="ctf-block text-center">
<div class="ctf-head text-center">
<h4>{% trans "How do I claim it ?" %}</h4>
</div>
<div class="ctf-body">
{% trans "Once you've donated the 15 euros, you just need to contact us on discord or by mail:" %}
<br>
<br>
<a href="https://discord.gg/DwZqPpA">
<img width="250px" src="https://discordapp.com/api/guilds/606162827274616845/widget.png?style=banner2" style="margin-bottom:5px" alt="42ctf discord server banner">
</a>
<br>
42ctf@protonmail.com
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -3,14 +3,14 @@
{% get_current_language as lang %}
<div class="col-sm-12 col-md-6">
<div class="ctf-block">
<div class="ctf-head text-center">
<h3>{% trans "Create new challenges" %}</h3>
<div class="ctf-head">
<center><h3>{% trans "Create new challenges" %}</h3></center>
</div>
<div class="ctf-body">
{% trans "If you want to create new challenges for 42CTF, 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> !<br><br>
{% trans "If your challenge is offline, then you don't have to ask us in advance." %}<br>
{% trans "If your challenge is online (for example web or pwn), then you should give us a short description of what you want to do." %}<br>
{% trans "We may be able to help you or to give you resources such as dockerfiles." %}<br><br>
{% trans "If your challenge is online (for example web or pwn), then you should give us a short description of what you want to do." %}
{% trans "We may be able to help you or to give you resources such as dockerfiles." %}
{% trans "We plan to make those resources publicly available in a near future." %}
</div>
</div>

View File

@ -2,29 +2,52 @@
{% load i18n %}
{% get_current_language as lang %}
<div class="col-sm-12">
<div class="ctf-block text-center">
<div class="ctf-block">
<div class="ctf-head">
<h3>{% trans "Donate" %}</h3>
</div>
<div class="ctf-body">
<a href="https://www.paypal.com/donate/?hosted_button_id=M6YBYZ63MQGAY" target="_blank">
<img src="/static/img/paypal.png" width="200" style="margin-top:-30px;">
</a><br>
<p class="small">
{% trans "If you would like us to add another payment method or if you want to pay in cash, send us a message !" %}<br><br>
</p>
</div>
<div class="ctf-head">
<h3>{% trans "What will we do with your money ?" %}</h3>
<center><h3>{% trans "Donate" %}</h3></center>
</div>
<div class="ctf-body">
{% blocktranslate %}Hosting a website - and especially a CTF platform - costs money: more precisely, it costs us <b>50 euros per month</b>.
<br><br>
If we had <b>40 members</b> each year, it would be enough to cover the hosting of 42CTF.
<br>
We currently have {{nb_members}} members.
<br><br>
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 this threshold :){% endblocktranslate %}
<h4>{% trans "Become a 42CTF member" %}</h4>
{% trans "42CTF is a non-profit organization with a legal status under the french law (Association loi 1901)." %}<br>
{% trans "You can support us by becoming a member and paying a fee of 15 euros." %}<br>
{% trans "Membership is then granted for 1 year." %}<br><br>
{% trans "When you become a member, you gain the following advantages:" %}<br>
- {% trans "A different color for your pseudo in the scoreboard, to let everyone know you're a member." %}<br>
- {% trans "The possibility to play again past CTF, with challenges no longer available, in the form of private events with the people of your choice." %}<br>
{% trans "Ex: you played Welcome CTF 2021, and want to play it again with your friends during one weekend." %}
{% trans "Or you didn't play Welcome CTF 2021 because you were not eligible." %}
<br><br>
{% trans "More advantages may come later, and you can submit us your ideas." %}<br>
{% trans "However, we will not organize limited time CTF for members only, as this will be equivalent to organize paid events, and we want 42CTF to remain FREE for all." %}<br>
<br><br>
<center><h4>{% trans "Donate to 42CTF" %}</h4>
{% trans "You can donate to 42CTF or pay your membership with the following means:" %}<br>
<a href="https://www.patreon.com/42ctf" target="_blank" class="patreon li-patreon">
<!-- <div class="patreon-content"> -->
<span class="svg-box">
<svg viewBox="0 0 569 546" xmlns="http://www.w3.org/2000/svg"><g><circle cx="362.589996" cy="204.589996" data-fill="1" id="Oval" r="204.589996"></circle><rect data-fill="2" height="545.799988" id="Rectangle" width="100" x="0" y="0"></rect></g></svg>
</span>
<span class="patreon-text">
Patreon
</span>
<!-- </div> -->
</a>
<a href="https://www.paypal.com/donate/?hosted_button_id=M6YBYZ63MQGAY" target="_blank">
<img src="/static/img/paypal.png" width="200" style="margin-top: -10px;">
</a>
<a href="https://www.helloasso.com/associations/42ctf/adhesions/adhesion" target="_blank">
<img src="/static/img/hello_asso.png" width="180" style="margin-top: -10px;">
</a>
</center>
<br>
{% trans "If you would like us to add another payment method or if you want to pay in cash, send us a message !" %}<br><br>
{% trans "If you're paying for your membership, don't forget to send us your first and last name, as well as your 42CTF pseudo." %}
{% trans "We will only use thoe data to keep track of our members and grant you advantages, and we will never communicate them to any third party." %}
</div>
</div>
</div>

View File

@ -1,15 +1,15 @@
{% block content %}
{% load i18n %}
{% get_current_language as lang %}
<div class="col-sm-12">
<div class="col-sm-12 col-md-6">
<div class="ctf-block">
<div class="ctf-head text-center">
<h3>{% trans "Edit this page" %}</h3>
<div class="ctf-head">
<center><h3>{% trans "Edit this page" %}</h3></center>
</div>
<div class="ctf-body">
<br>
<br>
{% trans "More information coming soon, but as you can guess it involves making a pull request to your favorite" %} <a href="https://gitea.42ctf.org/42CTF/website">repository</a> ;)
{% trans "More information coming soon, but as you can guess it involves making a pull request to your favorite" %} <a href="https://github.com/Danhia/42CTF/">repository</a> ;)
<br>
<br>
<br>

View File

@ -1,14 +0,0 @@
{% extends 'base.html' %}
{% block content %}
{% load i18n %}
{% get_current_language as lang %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "Beginner guide" %}</h1>
</div>
{% block tools %}
{% include "./tools.html" %}
{% endblock %}
</div>
{% endblock %}

View File

@ -3,11 +3,11 @@
{% load i18n %}
{% get_current_language as lang %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "Contribute to 42ctf" %}</h1>
</div>
{% block donate %}
{% include "./donate.html" %}
{% block 42ctf %}
{% include "./42ctf.html" %}
{% endblock %}
{% block tools %}
{% include "./tools.html" %}
{% endblock %}
{% block translate %}
{% include "./translate.html" %}
@ -15,5 +15,11 @@
{% block create_challenge %}
{% include "./create_challenge.html" %}
{% endblock %}
{% block edit %}
{% include "./edit.html" %}
{% endblock %}
{% block donate %}
{% include "./donate.html" %}
{% endblock %}
</div>
{% endblock %}

View File

@ -1,10 +1,10 @@
{% block content %}
{% load i18n %}
{% get_current_language as lang %}
<div class="col-12">
<div class="col-sm-12 col-md-6">
<div class="ctf-block">
<div class="ctf-head">
<h3>{% trans "Recommended Tools" %}</h3>
<center><h3>{% trans "Recommended Tools" %}</h3></center>
</div>
<div class="ctf-body">
{% trans "To get you started, we built a VM that you can simply import in" %} <a href="https://www.virtualbox.org/wiki/Downloads">Virtual Box</a> {% trans "with a bunch of useful tools." %}<br>
@ -16,7 +16,7 @@
- <a href="https://cutter.re">cutter</a></br>
- <a href="https://github.com/ReFirmLabs/binwalk">binwalk</a></br>
- <a href="https://rada.re">r2</a></br>
- <a href="https://hugsy.github.io/gef/">gdb/gef</a></br>
- <a href="https://gef.readthedocs.io/en/master/">gdb/gef</a></br>
- qemu-user</br>
<br>
{% trans "If you want to solve the challenges on your own machine, we recommend you to use a Linux operating system."%}
@ -31,4 +31,4 @@
</div>
</div>
{% endblock %}
{% endblock %}

View File

@ -1,19 +1,17 @@
{% block content %}
{% load i18n %}
{% get_current_language as lang %}
<div class="col-sm-12 col-md-6">
<div class="col-sm-12">
<div class="ctf-block">
<div class="ctf-head">
<center><h3>{% trans "Translate 42CTF" %}</h3></center>
</div>
<div class="ctf-body">
{% trans "42CTF source code is publicly available on this"%} <a href="https://gitea.42ctf.org/42CTF/website">git</a>.
<br>
{% trans "Translation does not require any programming skill and is a good way to contribute if you want to help us, by making the platform always more accessible." %}
<br><br>
{% trans "We have a" %} <a href="https://gitea.42ctf.org/42CTF/website/wiki/Internationalization">wiki</a> {% trans "describing how to translate pages with the Django internalization module." %}
<br><br>
<!-- {% trans "You will need to fork the git repository, make your changes, push them, and then open a pull request so that we can merge your contributions into our repository." %}<br><br> -->
{% trans "42CTF source code is publicly available on this"%} <a href="https://github.com/Danhia/42CTF/">github</a>.<br>
{% trans "Translation does not require any programming skill and is a good way to contribute if you want to help us, by making the platform always more accessible." %}<br><br>
{% trans "We have a" %} <a href="https://github.com/Danhia/42CTF/wiki/Internationalization">wiki</a> {% trans "describing how to translate pages with the Django internalization module." %}<br>
{% trans "We invite you to read it to know all the details, but it merely requires you to edit text files, so you see, no programming skills required ;)" %}
{% trans "You will need to fork the git repository, make your changes, push them, and then open a pull request so that we can merge your contributions into our repository." %}<br><br>
{% trans "Don't hesitate to reach for help on" %} <a class="footer_imgs" href="https://discord.gg/DwZqPpA" target="_blank"><img src="/static/img/discord.png" width="30"></a>
</div>
</div>

View File

@ -1,16 +1,14 @@
from django.contrib.sitemaps.views import sitemap
from django.urls import path
from . import views
from .sitemaps import StaticViewSitemap
app_name = "resources"
sitemaps = {
'static': StaticViewSitemap(),
}
urlpatterns = [
path('about', views.about, name='about'),
path('how-to-start', views.howToStart, name='howToStart'),
path('contribute', views.contribute, name='contribute'),
path('become-member', views.becomeMember, name='becomeMember'),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
path('', views.resources, name='resources'),
path('42ctf', views.ctf42, name='42ctf'),
path('tools', views.tools, name='tools'),
path('create_challenge', views.create_challenge, name='create_challenge'),
path('translate', views.translate, name='translate'),
path('edit', views.edit, name='edit'),
path('donate', views.donate, name='donate'),
]

View File

@ -1,18 +1,26 @@
from django.shortcuts import render
from django.core.paginator import Paginator
from accounts.models import UserProfileInfo
from django.contrib.auth.models import timezone
# Create your views here.
def contribute(request):
nb_members = UserProfileInfo.objects.filter(member=True, member_until__gt=timezone.now()).count()
return render(request, 'resources/contribute.html', {'nb_members':nb_members})
def resources(request):
return render(request, 'resources/resources.html')
def about(request):
return render(request, 'resources/about.html')
def ctf42(request):
return render(request, 'resources/42ctf.html')
def howToStart(request):
return render(request, 'resources/howToStart.html')
def tools(request):
return render(request, 'resources/tools.html')
def becomeMember(request):
return render(request, 'resources/becomeMember.html')
def create_challenge(request):
return render(request, 'resources/create_challenge.html')
def translate(request):
return render(request, 'resources/translate.html')
def edit(request):
return render(request, 'resources/edit.html')
def donate(request):
return render(request, 'resources/donate.html')

View File

@ -1,62 +0,0 @@
{% extends 'base.html' %}
{% load i18n %}
{% block content %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "42Network Scoreboard" %}</h1>
</div>
<div class="col-12">
<div class="row justify-content-md-center justify-content-sm-center">
<div class="col-4 col-sm-3 col-md-2 podium podium-two text-center">
<img src="{{ top3.1.0.logo }}" alt="{{ top3.1.0 }}"/>
<h3>#2 :</h3>
<p>
Score : {{ top3.1.1 }}
<br>
<a href="{% url 'scoreboard:campus' campus=top3.1.0 %}">{{ top3.1.0 }}</a>
</p>
</div>
<div class="col-4 col-sm-3 col-md-2 podium podium-one text-center">
<img src="{{ top3.0.0.logo }}" alt="{{ top3.0.0 }}"/>
<h3>#1 : </h3>
<p>
Score : {{ top3.0.1 }}
<br>
<a href="{% url 'scoreboard:campus' campus=top3.0.0 %}">{{ top3.0.0 }}</a>
</p>
</div>
<div class="col-4 col-sm-3 col-md-2 podium podium-three text-center">
<img src="{{ top3.2.0.logo }}" alt="{{ top3.2.0 }}"/>
<h3>#3 : </h3>
<p>
Score : {{ top3.2.1 }}
<br>
<a href="{% url 'scoreboard:campus' campus=top3.2.0 %}">{{ top3.2.0 }}</a>
</p>
</div>
</div>
</div>
<div class="col-12">
<table class="table table-dark">
<thead>
<tr>
<th scope="col">{% trans "Rank" %}</th>
<th scope="col">{% trans "Campus" %}</th>
<th scope="col">{% trans "Score" %}</th>
</tr>
</thead>
<tbody>
{% for name, score in scores.items %}
{% if forloop.counter0 > 2 %}
<tr>
<th scope="row"># {{ forloop.counter0|add:1 }}</th>
<th><a href="{% url 'scoreboard:campus' campus=name %}"> {{ name }}</a></th>
<td>{{ score}}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View File

@ -3,63 +3,53 @@
{% block content %}
{% load is_member %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "Global Scoreboard" %}</h1>
</div>
<table class="table table-dark">
<thead>
<tr>
<th scope="col">{% trans "Rank" %}</th>
<th scope="col">{% trans "Username" %}</th>
<th scope="col">{% trans "Website" %}</th>
<th scope="col">{% trans "Campus" %}</th>
<th scope="col">{% trans "Score" %}</th>
</tr>
</thead>
<tbody>
{% for s in scores %}
{% ismember s.user.userprofileinfo as is_member %}
<tr>
<th scope="row"># {{ forloop.counter0|add:scores.start_index }}</th>
<th><a class="profile_link {{is_member}}" href="{% url 'accounts:profile' user_name=s.user.username %}"> {{ s.user.username }}</a></th>
<td>
{% if s.user.userprofileinfo.portfolio_site %}
<a href="{{ s.user.userprofileinfo.portfolio_site }}" target="_blank">{{ s.user.userprofileinfo.portfolio_site }}</a>
{% endif %}
</td>
<td>
{% if s.user.userprofileinfo.campus %}
<a href="{% url 'scoreboard:campus' campus=s.user.userprofileinfo.campus %}">
{{ s.user.userprofileinfo.campus }}
</a>
{% endif %}
</td>
<td>{{ s.user.userprofileinfo.score }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="col-12">
<div>
<h4>Scoreboard</h4>
<table class="table table-dark">
<thead>
<tr>
<th scope="col">{% trans "Rank" %}</th>
<th scope="col">{% trans "Username" %}</th>
<th scope="col">{% trans "Website" %}</th>
<th scope="col">{% trans "Score" %}</th>
</tr>
</thead>
<tbody>
{% for s in scores %}
{% ismember s.user.userprofileinfo as is_member %}
<tr>
<th scope="row"># {{ forloop.counter0|add:scores.start_index }}</th>
<th><a class="profile_link {{is_member}}" href="{% url 'accounts:profile' user_name=s.user.username %}"> {{ s.user.username }}</a></th>
<td>
{% if s.user.userprofileinfo.portfolio_site %}
<a href="{{ s.user.userprofileinfo.portfolio_site }}" target="_blank">{{ s.user.userprofileinfo.portfolio_site }}</a>
{% endif %}
</td>
<td>{{ s.user.userprofileinfo.score }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="pagination">
<span class="step-links">
{% if scores.has_previous %}
<a href="?page=1">&laquo; {% trans "First" %}</a>
<a href="?page={{ scores.previous_page_number }}">{% trans "Previous" %}</a>
{% endif %}
<span class="current">
{% trans "Page "%} {{ scores.number }} / {{ scores.paginator.num_pages }}.
</span>
{% if scores.has_next %}
<a href="?page={{ scores.next_page_number }}">{% trans "Next" %}</a>
<a href="?page={{ scores.paginator.num_pages }}">{% trans "Last" %}&raquo;</a>
{% endif %}
</span>
</div>
</div>
</div>
</div>

View File

@ -4,7 +4,5 @@ from . import views
app_name = "scoreboard"
urlpatterns = [
path('', views.scoreboard, name='main'),
path('campus/<str:campus>', views.campus, name='campus'),
path('network/', views.network, name='network')
path('', views.scoreboard, name='scoreboard')
]

View File

@ -1,7 +1,6 @@
from django.shortcuts import render
from django.core.paginator import Paginator
from accounts.models import UserProfileInfo, Campus
import itertools
from accounts.models import UserProfileInfo
def scoreboard(request):
scores = UserProfileInfo.objects.filter(score__gt=0).select_related().order_by('-score', 'last_submission_date', 'user__username')
@ -9,23 +8,5 @@ def scoreboard(request):
page = request.GET.get('page')
scores_p = paginator.get_page(page)
return render(request, 'scoreboard/scoreboard.html', {'scores':scores_p})
def campus(request, campus):
scores = UserProfileInfo.objects.filter(score__gt=0, campus__name__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})
def network(request):
campuses = Campus.objects.all()
scores = {}
for campus in campuses:
users = UserProfileInfo.objects.filter(score__gt=0, campus__name__exact=campus).select_related().order_by('-score', 'last_submission_date', 'user__username')[:10]
scores[campus] = sum([u.score for u in users])
sorted_scores = {k: v for k, v in sorted(scores.items(), key=lambda item: item[1], reverse=True)}
top3 = list(itertools.islice(sorted_scores.items(), 3))
return render(request, 'scoreboard/network.html', {'scores':sorted_scores, 'top3': top3})
# Create your views here.

View File

@ -4,7 +4,6 @@ body {
}
.card-body {
background-color: #1d1d1d;
padding:30px;
}
a {
color: #4375aa;
@ -14,10 +13,10 @@ a:hover {
text-decoration: none;
}
.main-div {
margin-top: 30px;
margin-top: 40px;
}
.news-card {
margin-bottom: 30px;
margin-bottom: 20px;
border: none;
}
.news-card .card-header {
@ -69,12 +68,6 @@ pre {
padding-right: 15px;
padding-left: 15px;
}
.nav-distinguish{
border: 1.8px solid #333;
border-radius: 1.5px;
color: #fff;
text-transform: uppercase;
}
.flag_img {
margin-top: 10px;
width: 28px;
@ -88,22 +81,17 @@ pre {
border: none;
}
.ctf-head h1 {
text-transform: uppercase;
font-size: 2em;
}
.ctf-block {
background-color: #1d1d1d;
min-height: 35vh;
padding: 30px;
margin-bottom: 30px;
min-height: 235px;
padding: 15px;
margin-bottom: 20px;
}
.ctf-body {
margin-top: 30px;
margin-top: 50px;
}
.bloc-body {
margin-top: 30px;
margin-top: 25px;
}
.ctf-footer {
margin-top: 15px;
@ -115,8 +103,8 @@ pre {
margin-bottom: 20px;
}
.event-body {
padding: 30px;
margin-top: 30px;
padding: 15px;
margin-top: 50px;
}
.event-footer {
margin-top: 15px;
@ -132,7 +120,6 @@ input[type="url"] {
background-color: #2d2d2d;
padding: 3px;
border-radius: 4px;
color: #d9d9d9;
}
input[type="submit"] {
padding: 0;
@ -283,9 +270,93 @@ footer {
visibility: visible;
padding-top: 5px;
}
.patreon {
width: 250px;
height: 59px;
background-color: #ff6363;
font-family: America, "GT America", Lato, "Helvetica Neue", Helvetica, Arial,
sans-serif;
text-rendering: optimizeLegibility;
-moz-box-align: center;
backface-visibility: hidden;
box-sizing: border-box;
cursor: pointer;
display: inline-flex;
font-size: 0.875rem !important;
font-weight: 500;
-moz-box-pack: center;
justify-content: center;
padding: 0.46875rem 1rem;
position: relative;
pointer-events: unset;
text-align: center;
text-decoration: none;
text-transform: none;
transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1) 0s;
user-select: none;
white-space: unset;
align-items: center;
color: #fff;
}
.li-patreon {
width: 120px;
height: 37px;
background-color: #ff6363;
font-family: America, "GT America", Lato, "Helvetica Neue", Helvetica, Arial,
sans-serif;
text-rendering: optimizeLegibility;
-moz-box-align: center;
backface-visibility: hidden;
box-sizing: border-box;
cursor: pointer;
font-size: 0.875rem !important;
font-weight: 500;
-moz-box-pack: center;
justify-content: center;
padding: 0.46875rem 1rem;
text-align: center;
text-decoration: none;
text-transform: none;
transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1) 0s;
user-select: none;
align-items: center;
color: #fff;
margin-top: 4px;
margin-right: 13px;
}
.patreon:hover {
background-color: #ff4a4a;
color: #fff;
}
.patreon-text {
padding-left: 1em;
}
.patreon svg {
height: 1.3rem;
width: 1.3rem;
fill: #fff;
}
.patreon-content {
-moz-box-align: center;
align-items: center;
display: flex;
-moz-box-pack: center;
justify-content: center;
visibility: visible;
}
.svg-box {
align-self: center;
-moz-box-align: center;
align-items: center;
display: inline-flex;
filter: none;
vertical-align: unset;
height: unset;
width: unset;
cursor: unset;
}
.is-member {
color: #26fcef;
color: #2b908f;
}
@media only screen and (min-width : 1200px) {
@ -313,20 +384,3 @@ footer {
color: #a9a9a9;
text-decoration: none;
}
.podium{
margin-top:80px;
margin-bottom:30px;
vertical-align: bottom;
}
.podium h3 {margin-top:-5%;}
.podium img{position:relative;top: -55px; max-height: 50px; max-width: 100%;}
.podium-one{
background-color: #313131;
height: 25vh;}
.podium-two{
background-color: #252525;
height: 20vh;margin-top:auto;}
.podium-three{
background-color: #1a1a1a;
height: 15vh;margin-top:auto;}

BIN
src/statics/img/42ctf_logo.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,130 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 KiB

View File

@ -1,173 +1,153 @@
{% load static %}
{% load is_member %}
{% load i18n %}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<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 -->
<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" %}">
<!-- Primary Meta Tags -->
<title>42CTF</title>
<meta name="title" content="42CTF">
<meta name="description" content="42CTF is a cybersecurity challenges platform created by School 42 students.">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.42ctf.org/">
<meta property="og:title" content="42CTF">
<meta property="og:description" content="42CTF is a cybersecurity challenges platform created by School 42 students.">
<meta property="og:image" content="{% static "img/42ctf_logo.png" %}">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://www.42ctf.org/">
<meta property="twitter:title" content="42CTF">
<meta property="twitter:description" content="42CTF is a cybersecurity challenges platform created by School 42 students.">
<meta property="twitter:image" content="{% static "img/42ctf_logo.png" %}">
<link rel="canonical" href="https://www.42ctf.org/{{ request.path }}">
<meta name="Description" content="42CTF is a cybersecurity challenges platform created by School 42 students.">
<meta name="keywords" content="42, cybersécurité, cybersecurity, hack, hacking, challenge, solution, exercice, hacking challenge, hack challenge, exercice hack, exercice hacking, capture the flag, CTF, security, sécurité, Documentation,Applicatif,Cryptologie,Challenges,Outils,R&#233;seaux,CrackinWebW Client,Programmation,Cryptanaly,Application,Pr&#233;sentation,R&#233;seau,St&#233;ganographie,Web Serveur,Cracking,Classement,Challenges, Informatique,Capture The Flag,Forensic,Web," />
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 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="{% static "css/style.css" %}">
<!-- Primary Meta Tags -->
<title>42CTF</title>
<meta name="title" content="42CTF">
<meta name="description" content="42CTF is a cybersecurity challenges platform created by School 42 students.">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.42ctf.org/">
<meta property="og:title" content="42CTF">
<meta property="og:description" content="42CTF is a cybersecurity challenges platform created by School 42 students.">
<meta property="og:image" content="{% static "img/42ctf_logo.png" %}">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://www.42ctf.org/">
<meta property="twitter:title" content="42CTF">
<meta property="twitter:description" content="42CTF is a cybersecurity challenges platform created by School 42 students.">
<meta property="twitter:image" content="{% static "img/42ctf_logo.png" %}">
<meta name="Description" content="42CTF is a cybersecurity challenges platform created by School 42 students.">
<meta name="keywords" content="42, cybersécurité, cybersecurity, hack, hacking, challenge, solution, exercice, hacking challenge, hack challenge, exercice hack, exercice hacking, capture the flag, CTF, security, sécurité, Documentation,Applicatif,Cryptologie,Challenges,Outils,R&#233;seaux,CrackinWebW Client,Programmation,Cryptanaly,Application,Pr&#233;sentation,R&#233;seau,St&#233;ganographie,Web Serveur,Cracking,Classement,Challenges, Informatique,Capture The Flag,Forensic,Web," />
</head>
<body>
<header>
<!-- As a link -->
<nav class="navbar navbar-expand-lg navbar-dark">
<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">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
CTFs
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
{% if cats %}
{% for c in cats %}
<a class="dropdown-item" href="{% url 'category' cat_slug=c.slug %}">{{ c.name }}</a>
{% endfor %}
{% else %}
<a class="dropdown-item">{% translate "No category available." %}</a>
{% endif %}
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% trans "Scoreboard" %}
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{% url 'scoreboard:main' %}">{% trans "Global" %}</a>
<a class="dropdown-item" href="{% url 'scoreboard:network' %}">{% trans "42 Network" %}</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'events:events' %}">{% translate "Events" %}</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% trans "Resources" %}
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{% url 'resources:about' %}">{% trans "About"%}</a>
<a class="dropdown-item" href="{% url 'resources:howToStart' %}">{% trans "How To Start" %}</a>
<a class="dropdown-item" href="{% url 'resources:contribute' %}">{% trans "Contribute" %}</a>
</div>
</li>
</ul>
<ul class="navbar-nav ">
{% if request.user.is_authenticated %}
{% ismember request.user.userprofileinfo as is_member %}
{% if not is_member %}
<li class="nav-item">
<a class="nav-link nav-distinguish text-center" href="{% url 'resources:becomeMember' %}">{% translate "Become a member" %}</a>
</li>
{% endif %}
<li class="nav-item dropdown">
<a href="{% url 'accounts:edit' %}" class="nav-link">{{ request.user.username }}</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link" href="{% url 'accounts:profile' user %}">{{ request.user.userprofileinfo.score }}</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link" href="{% url 'accounts:out' %}">{% translate "Logout" %}</a>
</li>
{% else %}
<li class="nav-item dropdown">
<a class="nav-link" href="{% url 'accounts:signin' %}">{% translate "Login" %}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'accounts:signup' %}">{% translate "Sign Up" %}</a>
</li>
{% endif %}
<li class="nav-item dropdown">
{% get_current_language as LANGUAGE_CODE %}
<a class="nav-link" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img class="flag_img" src="{% static "img/"|add:LANGUAGE_CODE|add:".svg" %}" alt="flag {{ LANGUAGE_CODE }}" style="margin-top: -5px;"/>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
{% get_available_languages as languages %}
{% for lang_code, lang_name in languages %}
<a class="dropdown-item" href="{% url 'set_language' lang_code %}?next={{request.path|slice:"3:"}}">
<img class="flag_img" src="{% static "img/"|add:lang_code|add:".svg" %}" alt="flag {{ lang_name }}"/>
</a>
{% endfor %}
</div>
</li>
</ul>
</div>
</nav>
</header>
<div class="container main-div">
{% block content %}
{% endblock %}
</div>
<footer class="container">
<div class="row">
<div class="col-lg-4 col-12">
<a href="https://discord.gg/DwZqPpA">
<img width="250px" src="https://discordapp.com/api/guilds/606162827274616845/widget.png?style=banner2" style="margin-bottom:5px" alt="42ctf discord server banner">
</a>
</div>
<div class="col-lg-1 col-6">
<a href="https://twitter.com/42ctf">
<img width="50px" src="{% static "img/twitter.png" %}" alt="Twitter logo">
</a>
</div>
<div class="col-lg-1 col-6 middle-md">
<a href="https://fr.linkedin.com/company/42ctf">
<img width="50px" src="{% static "img/linkedin.png" %}" style="margin-bottom:5px" alt="Linkedin logo">
</a>
</div>
<div class="col-lg-4 col-12 bottom-md">
<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;" alt="'Donate with Paypal' banner">
</a>
</div>
<div class="col-lg-2 footer-text col-sm-12">
<p>42ctf@protonmail.com <br>Made with <img src="{% static "img/smoke.png" %}" width="20px" style="margin-top:-5px"> by <a href="https://ix-56h.github.io/">ix-56h</a> - <a href="{% url "cgu" %}">CGU</a></p>
</div>
</div>
</footer>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>
<header>
<!-- As a link -->
<nav class="navbar navbar-expand-lg navbar-dark">
<a class="navbar-brand" href="{% url "home" %}"><img src="{% static "img/cover.png" %}" width="110px"/></a>
<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>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
CTFs
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
{% if cats %}
{% for c in cats %}
<a class="dropdown-item" href="{% url 'category' cat_slug=c.slug %}">{{ c.name }}</a>
{% endfor %}
{% else %}
<a class="dropdown-item">{% translate "No category available." %}</a>
{% endif %}
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'scoreboard:scoreboard' %}">{% translate "Scoreboard" %}</a>
<li class="nav-item">
<a class="nav-link" href="{% url 'events:events' %}">{% translate "Events" %}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'resources:resources' %}">{% translate "Resources" %}</a>
</li>
</ul>
<ul class="navbar-nav ">
<li class="nav-item dropdown">
{% get_current_language as LANGUAGE_CODE %}
<a class="nav-link" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img class="flag_img" src="{% static "img/"|add:LANGUAGE_CODE|add:".svg" %}" alt="flag {{ LANGUAGE_CODE }}" style="margin-top: -5px;"/>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
{% get_available_languages as languages %}
{% for lang_code, lang_name in languages %}
<a class="dropdown-item" href="{% url 'set_language' lang_code %}?next={{request.path|slice:"3:"}}">
<img class="flag_img" src="{% static "img/"|add:lang_code|add:".svg" %}" alt="flag {{ lang_name }}"/>
</a>
{% endfor %}
</div>
</li>
{% if request.user.is_authenticated %}
<li class="nav-item dropdown">
<a href="{% url 'accounts:edit' %}" class="nav-link">{{ request.user.username }}</a>
</li>
<li class="nav-item dropdown">
<span class="nav-link">{{ request.user.userprofileinfo.score }}</span>
</li>
<li class="nav-item dropdown">
<a class="nav-link" href="{% url 'accounts:out' %}">{% translate "Logout" %}</a>
</li>
{% else %}
<li class="nav-item dropdown">
<a class="nav-link" href="{% url 'accounts:signin' %}">{% translate "Login" %}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'accounts:signup' %}">{% translate "Sign Up" %}</a>
</li>
{% endif %}
</ul>
</div>
</nav>
</header>
<div class="container main-div">
{% block content %}
{% endblock %}
</div>
<footer class="container">
<div class="row">
<div class="col-lg-4 col-12">
<a href="https://discord.gg/DwZqPpA">
<img width="250px" src="https://discordapp.com/api/guilds/606162827274616845/widget.png?style=banner2" style="margin-bottom:5px">
</a>
</div>
<div class="col-lg-1 col-6">
<a href="https://twitter.com/42ctf">
<img width="50px" src="{% static "img/twitter.png" %}">
</a>
</div>
<div class="col-lg-1 col-6 middle-md">
<a href="https://fr.linkedin.com/company/42ctf">
<img width="50px" src="{% static "img/linkedin.png" %}" style="margin-bottom:5px">
</a>
</div>
<div class="col-lg-4 col-12 bottom-md">
<a href="https://www.patreon.com/42ctf" target="_blank" class="patreon">
<div class="patreon-content">
<span class="svg-box">
<svg viewBox="0 0 569 546" xmlns="http://www.w3.org/2000/svg"><g><circle cx="362.589996" cy="204.589996" data-fill="1" id="Oval" r="204.589996"></circle><rect data-fill="2" height="545.799988" id="Rectangle" width="100" x="0" y="0"></rect></g></svg>
</span>
<span class="patreon-text">
{% trans "Become a Patron!" %}
</span>
</div>
</a>
</div>
<div class="col-lg-2 footer-text col-sm-12">
<p>42ctf@protonmail.com <br>Made with <img src="{% static "img/smoke.png" %}" width="20px" style="margin-top:-5px"> by <a href="https://ix-56h.github.io/">ix-56h</a> - <a href="{% url "cgu" %}">CGU</a></p>
</div>
</div>
</footer>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -2,31 +2,31 @@
{% block content %}
{% load i18n %}
<div class="row">
<div class="col-sm-12 col-md-9">
<div class="ctf-block">
<div class="ctf-head">
<h3>Reset password</h3>
</div>
<div class="ctf-body">
<div class="col-sm-8 col-md-6 mx-auto">
<form method="post">
{% csrf_token %}
<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="submit" value='{% trans "Reset" %}'>
</div>
</form>
</div>
</div>
</div>
<div class="col-sm-12 col-md-9">
<div class="ctf-block">
<div class="ctf-head">
<h3>Reset password</h3>
</div>
<div class="ctf-body">
<div class="col-sm-8 col-md-6 mx-auto">
<form method="post">
{% csrf_token %}
<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="submit" value="{% trans "Reset" %}">
</div>
</form>
</div>
</div>
</div>
</div>
<div class="col-sm-12 col-md-3 right-sidebar">
<ul class="list-group">
<a href="/accounts/signin" class="list-group-item">{% trans "Login" %}</a>
<a href="/accounts/signup" class="list-group-item">{% trans "Sign up" %}</a>
</ul>
</div>
</div>
<div class="col-sm-12 col-md-3 right-sidebar">
<ul class="list-group">
<a href="/accounts/signin" class="list-group-item">{% trans "Login" %}</a>
<a href="/accounts/signup" class="list-group-item"{% trans "Sign up" %}</a>
</ul>
</div>
</div>
{% endblock %}