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.urls import path
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
from jabberfr.views import get_root_index, hebergement
|
from jabberfr.views import get_root_index, hebergement, inscription
|
||||||
|
|
||||||
|
|
||||||
PAGES = [
|
PAGES = [
|
||||||
@ -28,6 +28,7 @@ PAGES = [
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', get_root_index),
|
path('', get_root_index),
|
||||||
path('hébergement', hebergement),
|
path('hébergement', hebergement),
|
||||||
|
path('inscription', inscription),
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns += [
|
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 aiodns import DNSResolver
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.utils.safestring import mark_safe
|
||||||
from django.core.validators import RegexValidator, URLValidator
|
from django.core.validators import RegexValidator, URLValidator
|
||||||
|
from jabberfr.validators import validate_jid_userpart
|
||||||
|
|
||||||
BASE_MUC_URL = 'http://[::1]:5280/muc_list/?'
|
BASE_MUC_URL = 'http://[::1]:5280/muc_list/?'
|
||||||
|
|
||||||
@ -14,6 +16,34 @@ TABLE_END = """
|
|||||||
</table>
|
</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:
|
async def get_chatrooms(*, limit: int = 25, order: str = 'users') -> str:
|
||||||
params = {
|
params = {
|
||||||
@ -176,3 +206,56 @@ async def hebergement(request):
|
|||||||
form = HebergForm()
|
form = HebergForm()
|
||||||
context['form'] = form
|
context['form'] = form
|
||||||
return render(request, 'hebergement.html', context=context)
|
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