Correction on signup

This commit is contained in:
John Doe 2024-03-31 01:37:25 +01:00
parent f5901a2ed4
commit 5ccf91701f
8 changed files with 70 additions and 97 deletions

View File

@ -9,8 +9,8 @@ function animation() {
x[0].style.animation = "disparition 0.2s 1"; x[0].style.animation = "disparition 0.2s 1";
} }
window.setTimeout(divhider, 2200); window.setTimeout(divhider, 8800);
window.setTimeout(animation, 2000); window.setTimeout(animation, 8000);
let darkBoxVisible = false; let darkBoxVisible = false;

View File

@ -28,7 +28,9 @@
<br/> <br/>
<strong> Site en construction permanente. </strong></p> <strong> Site en construction permanente. </strong></p>
<br> <br>
<p class="lead">
{% include '_flash_msgs.html' %}
<p class="lead">
<form method="POST" action="{{ url_for('loginlogout.login') }}"> <form method="POST" action="{{ url_for('loginlogout.login') }}">
<input type="text" name="user" id="user" placeholder="Utilisateur" class="form-control" width="200px"><br /> <input type="text" name="user" id="user" placeholder="Utilisateur" class="form-control" width="200px"><br />
<input type="password" name="passwd" id="passwd" placeholder="Mot de passe" class="form-control"><br /> <input type="password" name="passwd" id="passwd" placeholder="Mot de passe" class="form-control"><br />
@ -38,24 +40,12 @@
</p> </p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{# on affiche les messages d'erreur puis les messages de succes #}
{% for categorie in ['error', 'succes'] %}
{% with msgs = get_flashed_messages(category_filter=[categorie]) %}
{% if msgs %}
<div class="flashed {{ categorie }}">
{% for m in msgs %}
<p>{{ m|safe }}</p>
{% endfor %}
</div>
{% endif %}
{% endwith %}
{% endfor %}
{% endblock %} {% endblock %}

View File

@ -25,26 +25,24 @@
<div class="inner cover"> <div class="inner cover">
<h1 class="cover-heading">Inscription</h1> <h1 class="cover-heading">Inscription</h1>
<br> <br>
{% include '_flash_msgs.html' %}
{% if signin_enable %} {% if signin_enable %}
<form method="POST" class="form-horizontal" action="{{ url_inscription }}"> <form method="POST" class="form-horizontal" action="{{ url_inscription }}">
<h4> Choisissez votre nom d'utilisateur pour vous connecter sur le portail pywallter </h4> <h4> Choisissez votre nom d'utilisateur pour vous connecter sur le portail pywallter </h4>
<input type="text" name="user" id="user" placeholder="Pseudo" class="form-control"><br /> <input type="text" name="user" id="user" placeholder="Pseudo" class="form-control"><br />
{% if MAIL_SERVER or XMPP_SERVER %} {% if MAIL_SERVER or XMPP_SERVER %}
<h4> Choisissez votre adresse sur ce serveur (Entrez juste le nom pas besoin de préciser le domaine) </h4>
<p> Par exemple vous voulez toto@{{hostname}}; vous entrez juste toto :) </p> <p>
<div class="form-group"> Votre nom d'utilisateur vous servira à vous connecter à votre compte Mail et de messagerie instantanné (XMPP)
<div class="col-sm-7"> Par exemple vous souhaitez l'adresse toto@{{hostname}}; vous entrez le nom d'utilisateur toto :)
<input type="text" name="mail" id="mail" placeholder="Adresse mail" class="form-control"> </p>
</div> {% endif %}
<label class="control-label col-sm-2" for="pwd">@{{ hostname }}</label>
</div>
{% endif %}
<input type="password" name="passwd" id="passwd" placeholder="Mot de passe" class="form-control"><br /> <input type="password" name="passwd" id="passwd" placeholder="Mot de passe" class="form-control"><br />
<input type="password" name="passwdconfirm" id="passwdconfirm" placeholder="Confirmation du mot de passe" class="form-control"><br /> <input type="password" name="passwdconfirm" id="passwdconfirm" placeholder="Confirmation du mot de passe" class="form-control"><br />
<br> <br>
<button id="tada" class="btn btn-default btn-primary" type="submit">Envoyer</button> <button id="tada" class="btn btn-default btn-primary" type="submit">Créer mon compte</button>
</form> </form>
{% else %} {% else %}
<p class="lead"> <p class="lead">
@ -56,20 +54,6 @@
{% endfor %} {% endfor %}
</div> </div>
<div class="msginfo">
{# On affiche les messages d'erreur puis les messages de succés #}
{% for categorie in ['error', 'succes'] %}
{% with msgs = get_flashed_messages(category_filter=[categorie]) %}
{% if msgs %}
<div class="flashed {{ categorie }}">
{% for m in msgs %}
<p>{{ m|safe }}</p>
{% endfor %}
</div>
{% endif %}
{% endwith %}
{% endfor %}
</div>
<div class="mastfoot"> <div class="mastfoot">
<div class="inner"> <div class="inner">

View File

@ -9,9 +9,11 @@
<div class="col-sm-3"></div> <div class="col-sm-3"></div>
<div class="col-sm-6"> <div class="col-sm-6">
<br /> <br />
<div class="well">Ici, vous pouvez envoyer des fichiers afin de les sauvegarder ou de les rendre accessibles à quelqu'un d'autre. Ils seront par la suite disponibles en téléchargement dans notre rubrique <a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a>. Les images envoyées, quand à elles se retrouveront directement dans la <a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a>.<br>Ayez bien conscience que ce site est une expérience est qu'il est indispensable d'avoir une sauvegarde de tous vos fichiers. Nous ne pourrons, en aucun cas, être tenu responsable de la perte de vos données. Merci de votre compréhension.</div> <div class="well">Ici, vous pouvez envoyer des fichiers afin de les sauvegarder ou de les rendre accessibles à quelqu'un d'autre. Ils seront par la suite disponibles en téléchargement dans notre rubrique <a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a>. Les images envoyées, quand à elles se retrouveront directement dans la <a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a>.<br>Ayez bien conscience que ce site est une expérience est qu'il est indispensable d'avoir une sauvegarde de tous vos fichiers. Nous ne pourrons, en aucun cas, être tenu responsable de la perte de vos données. Merci de votre compréhension.
<br /> </div>
<div class="panel panel-primary"> <br />
<div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Choisissez un ou plusieurs fichiers à uploader</h3> <h3 class="panel-title">Choisissez un ou plusieurs fichiers à uploader</h3>
</div> </div>
@ -39,13 +41,11 @@
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!--<script src="https://en.lichess.org/training/embed?theme=blue3&bg=auto"></script>
<script src="https://en.lichess.org/tv/embed?theme=blue2&bg=dark"></script>-->

View File

@ -23,6 +23,17 @@ def append_to_log(log_line, user):
log.close() log.close()
def valid_username(username):
valid=True
# Caractères non autorisés dans la RFC #822
invalid_char = { '(', ')', '<', '>', ',', ';', ':', '"', '[', ']', '|', 'ç', '%', '&', ' ' }
for character in invalid_char:
if character in username:
valid=False
return valid
def email_disp(email): def email_disp(email):
disp = True disp = True
@ -31,13 +42,6 @@ def email_disp(email):
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
cursor = conn.cursor() # Création de l'objet "curseur" cursor = conn.cursor() # Création de l'objet "curseur"
# Caractères non autorisés dans la RFC #822
invalid_char = { '(', ')', '<', '>', ',', ';', ':', '"', '[', ']', '|', 'ç', '%', '&' }
for character in invalid_char:
if character in email:
disp=False
cursor.execute("""SELECT mail FROM users WHERE mail=?""", (email,)) cursor.execute("""SELECT mail FROM users WHERE mail=?""", (email,))
testmail = cursor.fetchall() testmail = cursor.fetchall()
if testmail and disp: if testmail and disp:

View File

@ -3,7 +3,7 @@ from flask_bcrypt import Bcrypt
import sqlite3 import sqlite3
import glob, os, sys, time import glob, os, sys, time
from tools.utils import email_disp, valid_token_register, valid_passwd from tools.utils import email_disp, valid_token_register, valid_passwd, valid_username
from socket import gethostname from socket import gethostname
app = Flask( 'pywallter' ) app = Flask( 'pywallter' )
@ -30,7 +30,7 @@ inscription = Blueprint('inscription', __name__, template_folder='templates')
@inscription.route( '/inscription/<token>', methods=['GET','POST'] ) @inscription.route( '/inscription/<token>', methods=['GET','POST'] )
def signin(token) : def signin(token) :
hostname = gethostname() hostname = gethostname()
url_inscription = BASE_URL+'inscription/'+token url_inscription = url_for('loginlogout.index', _external=True)+'inscription/'+token
resp = None resp = None
if valid_token_register(token): if valid_token_register(token):
if 'username' in session : if 'username' in session :
@ -48,32 +48,20 @@ def signin(token) :
if request.method == 'POST': if request.method == 'POST':
#On test si aucun champs du formulaire n'est vide. #On test si aucun champs du formulaire n'est vide.
if MAIL_SERVER: if len(request.form['user']) == 0 or \
if len(request.form['user']) == 0 or \ len(request.form['passwd']) == 0 or \
len(request.form['passwd']) == 0 or \ len(request.form['passwdconfirm']) == 0:
len(request.form['passwdconfirm']) == 0 or \
len(request.form['mail']) == 0 :
flash(u'Il faut remplir le formulaire en entier, les champs ne peuvent pas etre vide ', 'error')
return render_template('inscription.html',
signin_enable=app.config['SIGNIN_ENABLE'],
token=token, hostname=hostname,
url_inscription=url_inscription,
MAIL_SERVER=MAIL_SERVER, XMPP_SEVER=XMPP_SERVER)
else:
if len(request.form['user']) == 0 or \
len(request.form['passwd']) == 0 or \
len(request.form['passwdconfirm']) == 0:
flash(u'Il faut remplir le formulaire en entier, les champs ne peuvent pas etre vide ', 'error') flash(u'Il faut remplir le formulaire en entier, les champs ne peuvent pas etre vide ', 'error')
return render_template('inscription.html', return render_template('inscription.html',
signin_enable=app.config['SIGNIN_ENABLE'], signin_enable=app.config['SIGNIN_ENABLE'],
token=token, hostname=hostname, token=token, hostname=hostname,
url_inscription=url_inscription, url_inscription=url_inscription,
MAIL_SERVER=MAIL_SERVER, XMPP_SERVER=XMPP_SERVER) MAIL_SERVER=MAIL_SERVER, XMPP_SERVER=XMPP_SERVER)
user = request.form['user'] user = request.form['user']
passwd = request.form['passwd'] passwd = request.form['passwd']
mail = user+'@'+hostname
passwdconfirm = request.form['passwdconfirm'] passwdconfirm = request.form['passwdconfirm']
bcrypt_passwd = bcrypt.generate_password_hash(request.form['passwd']) bcrypt_passwd = bcrypt.generate_password_hash(request.form['passwd'])
mail_passwd_change = 0 mail_passwd_change = 0
@ -88,8 +76,9 @@ def signin(token) :
testuser = cursor.fetchone() testuser = cursor.fetchone()
conn.close() conn.close()
if testuser: if testuser and valid_username(user):
flash(u'Non d\'utilisateur déjà utilisé, merci d\'en choisir un autre', 'error') flash(u'Non d\'utilisateur déjà utilisé ou contient des caractères invalides, merci d\'en choisir un autre', 'error')
flash(u'Les caractères espaces et \' ( ) < > , ; : " [ ] | ç % & ne sont pas autorisés', 'error')
not_error = False not_error = False
if not(password_valid): if not(password_valid):
@ -97,9 +86,9 @@ def signin(token) :
not_error = False not_error = False
if MAIL_SERVER: if MAIL_SERVER:
mail = request.form['mail'].lower()+'@'+hostname mail = user.lower()+'@'+hostname
if not(email_disp(mail)) : if not(email_disp(mail)) :
flash(u'Adresse email déjà utilisé ou invalide, merci d\'en choisir une autre', 'error') flash(u'Cette Adresse email est déjà utilisée , merci d\'en choisir une autre', 'error')
not_error = False not_error = False
if not_error: if not_error:

View File

@ -42,12 +42,12 @@ def login() :
conn.close() conn.close()
password = request.form['passwd'] password = request.form['passwd']
for user in users: for user in users:
print (user[0])
passwd = str(user[1] ) passwd = str(user[1] )
print ( passwd[2:(len(passwd)-1 )] )
if user[0] == request.form['user'] and bcrypt.check_password_hash(user[1], password) is True: if user[0] == request.form['user'] and bcrypt.check_password_hash(user[1], password) is True:
session['username'] = request.form['user'] session['username'] = request.form['user']
resp = redirect(url_for('profil.profile', _external=True)) resp = redirect(url_for('profil.profile', _external=True))
else:
flash(u'Mauvais nom d\'utilisateur ou mot de passe', 'error')
else: else:
resp = render_template('accueil.html', signin_enable=app.config['SIGNIN_ENABLE']) resp = render_template('accueil.html', signin_enable=app.config['SIGNIN_ENABLE'])
return resp return resp

View File

@ -327,36 +327,42 @@ def delete_account():
cursor = conn.cursor() # Création de l'objet "curseur" cursor = conn.cursor() # Création de l'objet "curseur"
cursor.execute("""SELECT passwd FROM users WHERE name=?""", (UTILISATEUR,)) cursor.execute("""SELECT passwd FROM users WHERE name=?""", (UTILISATEUR,))
passwd = cursor.fetchone()[0] passwd = cursor.fetchone()[0]
cursor.execute("""SELECT mail FROM users WHERE name=?""", (UTILISATEUR,))
mail = cursor.fetchone()[0]
conn.close() conn.close()
password = request.form['passwd'] password = request.form['passwd']
if bcrypt.check_password_hash(passwd, password) is True: if bcrypt.check_password_hash(passwd, password) is True:
not_error = True not_error = True
try:
cmd = 'rm -r ' + DATAS_USER + '/' + UTILISATEUR
if system(cmd) != 0:
raise TypeError("Remove directory error")
except:
not_error = False
flash(u'Erreur lors de la suppression de votre dossier utilisateur.', 'error')
if MAIL_SERVER: if MAIL_SERVER:
try: try:
cmd = SETUID + ' set_mail_passwd del' + '"'+mail+'"' cmd = SETUID + ' set_mail_passwd del ' + '"'+mail+'"'
system(cmd) print(cmd)
os.system(cmd)
except: except:
not_error = False not_error = False
flash(u'Erreur lors de la suppression de votre compte Mail.', 'error') flash(u'Erreur lors de la suppression de votre compte Mail.', 'error')
if XMPP_SERVER: if XMPP_SERVER:
try: try:
tmp = mail.split('@') tmp = mail.split('@')
cmd = SETUID+ ' prosodyctl deluser ' "'"+tmp[0]+"' " + "'"+tmp[1]+"'" cmd = SETUID+ ' prosodyctl deluser ' "'"+tmp[0]+"' " + "'"+tmp[1]+"'"
system(cmd) os.system(cmd)
except: except:
not_error = False not_error = False
flash(u'Erreur lors de la suppression de votre compte XMPP.', 'error') flash(u'Erreur lors de la suppression de votre compte XMPP.', 'error')
if not_error: if not_error:
try:
cmd = 'rm -r ' + DATAS_USER + '/' + UTILISATEUR
if os.system(cmd) != 0:
raise TypeError("Remove directory error")
except:
flash(u'Erreur lors de la suppression de votre dossier utilisateur.', 'error')
try: try:
conn = sqlite3.connect(DATABASE) conn = sqlite3.connect(DATABASE)
cursor = conn.cursor() cursor = conn.cursor()