diff --git a/jabberfr/templates/inscription.html b/jabberfr/templates/inscription.html
new file mode 100644
index 0000000..6fa9399
--- /dev/null
+++ b/jabberfr/templates/inscription.html
@@ -0,0 +1,28 @@
+{% extends "page_model.html" %}
+
+{% block content %}
+
+Inscription à un serveur Jabber par JabberFR
+Cet outil va vous permettre de vous créer un compte Jabber.
+
+
+
+
+
+
+{% endblock %}
diff --git a/jabberfr/urls.py b/jabberfr/urls.py
index b6bbc56..ceb2745 100644
--- a/jabberfr/urls.py
+++ b/jabberfr/urls.py
@@ -16,7 +16,7 @@ Including another URLconf
from django.urls import path
from django.views.generic import TemplateView
-from jabberfr.views import get_root_index, hebergement
+from jabberfr.views import get_root_index, hebergement, inscription
PAGES = [
@@ -28,6 +28,7 @@ PAGES = [
urlpatterns = [
path('', get_root_index),
path('hébergement', hebergement),
+ path('inscription', inscription),
]
urlpatterns += [
diff --git a/jabberfr/validators.py b/jabberfr/validators.py
new file mode 100644
index 0000000..e295752
--- /dev/null
+++ b/jabberfr/validators.py
@@ -0,0 +1,15 @@
+from django.core.exceptions import ValidationError
+from slixmpp import JID, InvalidJID
+
+
+def validate_jid_userpart(value):
+ if len(value.encode('utf-8')) > 1023:
+ raise ValidationError(
+ f'"{value[:50]}…" est trop long pour être un nom d’utilisateur valide.'
+ )
+ try:
+ JID(f'{value}@example.com')
+ except InvalidJID:
+ raise ValidationError(
+ f'"{value}" n’est pas un nom d’utilisateur valide.'
+ )
diff --git a/jabberfr/views.py b/jabberfr/views.py
index 9605b6e..de6dfe2 100644
--- a/jabberfr/views.py
+++ b/jabberfr/views.py
@@ -3,7 +3,9 @@ from aiohttp import ClientSession, ClientError, ClientTimeout
from aiodns import DNSResolver
from django.shortcuts import render
from django import forms
+from django.utils.safestring import mark_safe
from django.core.validators import RegexValidator, URLValidator
+from jabberfr.validators import validate_jid_userpart
BASE_MUC_URL = 'http://[::1]:5280/muc_list/?'
@@ -14,6 +16,34 @@ TABLE_END = """
"""
+USERNAME_HELP = """
+
+ - Ceci est le nom d'utilisateur que vous utiliserez pour vous identifier sur votre compte.
+ - Le nom d'utilisateur est insensible à la casse, votrenom est idententique à VotreNom.
+ - Un nom d'utilisateur ne peut contenir aucun de ces caractères : @ : ' " < > &
+ - Certains serveurs limitent la taille du nom d'utilisateur à 16 caractères.
+
+"""
+
+SERVER_HELP = """
+
+ - Vous pouvez utiliser certains services de serveurs autres que celui sur lequel vous êtes inscrit, comme par exemple les salons de discussions.
+ - Les serveurs proposés ici sont des serveurs faisant partis de la fédération JabberFR, JabberFR n'étant pas un serveur Jabber, mais un regroupement de serveurs autour des services comme le forum et le wiki.
+
+"""
+
+
+PASSWORD_HELP = """
+
+ - Ce mot de passe protège votre compte. Ne le divulguez à personne.
+ Personne d'autre que vous n'a besoin de votre mot de passe.
+ - Vous pouvez toujours utiliser votre client Jabber pour changer votre mot de passe.
+ - Vous pouvez prendre soin d'indiquer votre adresse e-mail dans les informations personnelles de votre compte afin de pouvoir vous faire envoyer votre mot de passe à l'aide du formulaire, autrement il vous sera impossible de récupérer le mot de passe en cas d'oubli.
+
+"""
+
+
+
async def get_chatrooms(*, limit: int = 25, order: str = 'users') -> str:
params = {
@@ -176,3 +206,56 @@ async def hebergement(request):
form = HebergForm()
context['form'] = form
return render(request, 'hebergement.html', context=context)
+
+
+class InscriptionForm(forms.Form):
+ username = forms.CharField(
+ help_text=mark_safe(USERNAME_HELP),
+ label='Nom d’utilisateur',
+ validators=[validate_jid_userpart],
+ required=True,
+ )
+ server = forms.CharField(
+ label='Serveur Jabber',
+ required=True,
+ help_text=mark_safe(SERVER_HELP),
+ validators=[
+ RegexValidator(
+ regex=URLValidator.host_re,
+ message='Ce nom de domaine n’est pas valide'
+ )
+ ],
+ )
+ password = forms.CharField(
+ widget=forms.PasswordInput,
+ label='Mot de passe',
+ required=True,
+ )
+ confirm_password = forms.CharField(
+ widget=forms.PasswordInput,
+ label='Vérification du mot de passe',
+ required=True,
+ help_text=mark_safe(PASSWORD_HELP),
+ )
+
+
+def check_passwords(form):
+ if form.cleaned_data['password'] != form.cleaned_data['confirm_password']:
+ form.add_error(
+ 'confirm_password', 'Les mots de passe ne correspondent pas'
+ )
+ return False
+ return True
+
+
+async def inscription(request):
+ context = {}
+ if request.method == 'POST':
+ form = InscriptionForm(request.POST)
+ context['form'] = form
+ if form.is_valid() and check_passwords(form):
+ pass
+ else:
+ form = InscriptionForm()
+ context['form'] = form
+ return render(request, 'inscription.html', context=context)