WIP inscription
This commit is contained in:
parent
19b524964b
commit
1cbcaa7945
28
jabberfr/templates/inscription.html
Normal file
28
jabberfr/templates/inscription.html
Normal file
@ -0,0 +1,28 @@
|
||||
{% extends "page_model.html" %}
|
||||
|
||||
{% block content %}
|
||||
<main>
|
||||
<h2 class="center">Inscription à un serveur Jabber par JabberFR</h2>
|
||||
<p>Cet outil va vous permettre de vous créer un compte <a href="https://wiki.jabberfr.org/Jabber">Jabber</a>.</p>
|
||||
<hr />
|
||||
<blockquote>
|
||||
|
||||
<form method="post" action="">
|
||||
{% csrf_token %}
|
||||
|
||||
{{ form.as_p }}
|
||||
|
||||
<p style="padding-top:30px">
|
||||
En cliquant sur "Créer le compte" vous reconnaissez avoir pris connaissance et
|
||||
être en accord avec les <a href="https://wiki.jabberfr.org/CGU" alt="CGU">
|
||||
Conditions Générales d'Utilisation</a> du service.
|
||||
</p>
|
||||
<p style="padding-top:20px;">
|
||||
<label for="register">Créer le compte : </label>
|
||||
<input type="submit" value="Créer le compte" name="register" id="register"/>
|
||||
</p>
|
||||
|
||||
</form>
|
||||
</blockquote>
|
||||
</main>
|
||||
{% endblock %}
|
@ -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 += [
|
||||
|
15
jabberfr/validators.py
Normal file
15
jabberfr/validators.py
Normal file
@ -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.'
|
||||
)
|
@ -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 = """
|
||||
</table>
|
||||
"""
|
||||
|
||||
USERNAME_HELP = """
|
||||
<ul>
|
||||
<li>Ceci est le <em>nom d'utilisateur</em> que vous utiliserez pour vous identifier sur votre compte.</li>
|
||||
<li>Le nom d'utilisateur est insensible à la casse, <em>votrenom</em> est idententique à <em>VotreNom</em>.</li>
|
||||
<li>Un nom d'utilisateur ne peut contenir <span style="text-decoration: underline;">aucun</span> de ces caractères : @ : ' " < > &</li>
|
||||
<li>Certains serveurs limitent la taille du nom d'utilisateur à 16 caractères.</li>
|
||||
</ul>
|
||||
"""
|
||||
|
||||
SERVER_HELP = """
|
||||
<ul>
|
||||
<li>Vous pouvez utiliser certains services de serveurs autres que celui sur lequel vous êtes inscrit, comme par exemple les salons de discussions.</li>
|
||||
<li>Les serveurs proposés ici sont des serveurs faisant partis de la <a href="https://jabberfr.org/federation">fédération JabberFR</a>, JabberFR n'étant pas un serveur Jabber, mais un regroupement de serveurs autour des services comme le <a href="https://forum.jabberfr.org">forum</a> et le <a href="https://wiki.jabberfr.org">wiki</a>.</li>
|
||||
</ul>
|
||||
"""
|
||||
|
||||
|
||||
PASSWORD_HELP = """
|
||||
<ul>
|
||||
<li>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.</li>
|
||||
<li>Vous pouvez toujours utiliser votre client Jabber pour changer votre mot de passe.</li>
|
||||
<li>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 <a href="https://im.apinc.org/outils/password.php">formulaire</a>, autrement il vous sera impossible de récupérer le mot de passe en cas d'oubli.</li>
|
||||
</ul>
|
||||
"""
|
||||
|
||||
|
||||
|
||||
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user