Travaux sur la validité des mails et des mots de passes
This commit is contained in:
parent
b8f03b77da
commit
1ac275c415
@ -27,11 +27,12 @@ def append_to_log(log_line, user):
|
|||||||
def email_disp(email):
|
def email_disp(email):
|
||||||
disp = True
|
disp = True
|
||||||
unique_at = len(email.split('@'))
|
unique_at = len(email.split('@'))
|
||||||
print (unique_at)
|
|
||||||
if len(email) < 80 and unique_at == 2:
|
if len(email) < 80 and unique_at == 2:
|
||||||
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 = { '(', ')', '<', '>', ',', ';', ':', '"', '[', ']', '|', 'ç', '%', '&' }
|
||||||
|
|
||||||
cursor.execute("""SELECT mail FROM users WHERE mail=?""", (email,))
|
cursor.execute("""SELECT mail FROM users WHERE mail=?""", (email,))
|
||||||
testmail = cursor.fetchall()
|
testmail = cursor.fetchall()
|
||||||
@ -47,12 +48,25 @@ def email_disp(email):
|
|||||||
if email in alias:
|
if email in alias:
|
||||||
disp=False
|
disp=False
|
||||||
|
|
||||||
|
for character in invalid_char:
|
||||||
|
if(email.find(character)>0):
|
||||||
|
disp=False
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
disp = False
|
disp = False
|
||||||
|
|
||||||
return disp
|
return disp
|
||||||
|
|
||||||
|
|
||||||
|
def valid_passwd(password):
|
||||||
|
if '"' in password or "&" in password:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def valid_token_register(token):
|
def valid_token_register(token):
|
||||||
valid = True
|
valid = True
|
||||||
print(token)
|
print(token)
|
||||||
|
@ -2,7 +2,7 @@ from flask import Blueprint, Flask, request, flash, render_template, url_for, se
|
|||||||
from flask_bcrypt import Bcrypt
|
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
|
from tools.utils import email_disp, valid_token_register, valid_passwd
|
||||||
from socket import gethostname
|
from socket import gethostname
|
||||||
|
|
||||||
app = Flask( 'pywallter' )
|
app = Flask( 'pywallter' )
|
||||||
@ -35,10 +35,23 @@ def signin(token) :
|
|||||||
if 'username' in session :
|
if 'username' in session :
|
||||||
resp = redirect(url_for('profil.profile', _external=True))
|
resp = redirect(url_for('profil.profile', _external=True))
|
||||||
else :
|
else :
|
||||||
|
|
||||||
|
# Réponse si la requete est de type GET ou si la requete POST echoue
|
||||||
|
resp = render_template('inscription.html',
|
||||||
|
signin_enable=app.config['SIGNIN_ENABLE'],
|
||||||
|
token=token, hostname=hostname,
|
||||||
|
url_inscription=url_inscription,
|
||||||
|
MAIL_SERVER=MAIL_SERVER)
|
||||||
|
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
if not(request.form['user']) or not(request.form['passwd']) :
|
|
||||||
|
#On test si aucun champs du formulaire n'est vide.
|
||||||
if MAIL_SERVER:
|
if MAIL_SERVER:
|
||||||
if not(request.form['mail']):
|
if len(request.form['user']) == 0 or \
|
||||||
|
len(request.form['passwd']) == 0 or \
|
||||||
|
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')
|
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'],
|
||||||
@ -46,6 +59,10 @@ def signin(token) :
|
|||||||
url_inscription=url_inscription,
|
url_inscription=url_inscription,
|
||||||
MAIL_SERVER=MAIL_SERVER)
|
MAIL_SERVER=MAIL_SERVER)
|
||||||
else:
|
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'],
|
||||||
@ -60,6 +77,9 @@ def signin(token) :
|
|||||||
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
|
||||||
|
|
||||||
|
password_valid = valid_passwd(passwd)
|
||||||
|
not_error = True
|
||||||
|
|
||||||
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"
|
||||||
|
|
||||||
@ -67,38 +87,39 @@ def signin(token) :
|
|||||||
testuser = cursor.fetchone()
|
testuser = cursor.fetchone()
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
if testuser:
|
||||||
|
flash(u'Non d\'utilisateur déjà utilisé, merci d\'en choisir un autre', 'error')
|
||||||
|
not_error = False
|
||||||
|
|
||||||
|
|
||||||
|
if not(password_valid):
|
||||||
|
flash (u'Les caractère & et " ne sont pas autorisé dans les mots de passe', 'error')
|
||||||
|
not_error = False
|
||||||
|
|
||||||
if MAIL_SERVER:
|
if MAIL_SERVER:
|
||||||
mail = request.form['mail'].lower()+'@'+hostname
|
mail = request.form['mail'].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'Adresse email déjà utilisé ou invalide, merci d\'en choisir une autre', 'error')
|
||||||
resp = render_template('inscription.html',
|
not_error = False
|
||||||
signin_enable=app.config['SIGNIN_ENABLE'],
|
|
||||||
token=token, hostname=hostname,
|
|
||||||
url_inscription=url_inscription,
|
|
||||||
MAIL_SERVER=MAIL_SERVER)
|
|
||||||
else:
|
|
||||||
cmd = SETUID + " set_mail_passwd " + "'"+mail+"' " + "'"+passwd+"'"
|
|
||||||
mail_passwd_change = os.system(cmd)
|
|
||||||
|
|
||||||
|
if not_error:
|
||||||
if testuser or mail_passwd_change != 0 or resp:
|
|
||||||
flash(u'Non d\'utilisateur déjà utilisé, merci d\'en choisir un autre', 'error')
|
|
||||||
resp = render_template('inscription.html',
|
|
||||||
signin_enable=app.config['SIGNIN_ENABLE'],
|
|
||||||
token=token, hostname=hostname,
|
|
||||||
url_inscription=url_inscription,
|
|
||||||
MAIL_SERVER=MAIL_SERVER)
|
|
||||||
|
|
||||||
else:
|
|
||||||
confirmation = bcrypt.check_password_hash(bcrypt_passwd, passwdconfirm)
|
confirmation = bcrypt.check_password_hash(bcrypt_passwd, passwdconfirm)
|
||||||
if confirmation is True:
|
if confirmation is False:
|
||||||
|
flash(u'Les mots de passe ne sont pas identiques !', 'error')
|
||||||
|
else:
|
||||||
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"
|
||||||
cursor.execute("""INSERT INTO users(name, mail, passwd) VALUES(?, ?, ?)""", (user, mail, bcrypt_passwd)) # Insérer des valeurs
|
cursor.execute("""INSERT INTO users(name, mail, passwd) VALUES(?, ?, ?)""", (user, mail, bcrypt_passwd)) # Insérer des valeurs
|
||||||
conn.commit() # Sauvegarder valeurs dans la bdd
|
conn.commit() # Sauvegarder valeurs dans la bdd
|
||||||
|
|
||||||
|
# On change le mot de passe du compte mail
|
||||||
|
if MAIL_SERVER:
|
||||||
|
cmd = SETUID + ' set_mail_passwd ' + '"'+mail+'" ' + '"'+passwd+'"'
|
||||||
|
mail_passwd_change = os.system(cmd)
|
||||||
|
if mail_passwd_change != 0:
|
||||||
|
flash(u'Il y a eu une problème lors du changement de mot passe pour le compte Mail', 'error')
|
||||||
|
|
||||||
|
# On change le mot de passe du compte XMPP
|
||||||
if XMMP_SERVER:
|
if XMMP_SERVER:
|
||||||
tmp = mail.split('@')
|
tmp = mail.split('@')
|
||||||
cmd = SETUID+ ' prosodyctl register ' "'"+tmp[0]+"' " + "'"+tmp[1]+"' " + "'"+passwd+"'"
|
cmd = SETUID+ ' prosodyctl register ' "'"+tmp[0]+"' " + "'"+tmp[1]+"' " + "'"+passwd+"'"
|
||||||
@ -106,12 +127,7 @@ def signin(token) :
|
|||||||
if res != 0:
|
if res != 0:
|
||||||
flash(u'Il y a eu un problème pour la création du compte XMPP !', 'error')
|
flash(u'Il y a eu un problème pour la création du compte XMPP !', 'error')
|
||||||
|
|
||||||
cursor.execute("""SELECT name, mail, passwd FROM users""")
|
# on créé les dossier de l'utilisateur
|
||||||
|
|
||||||
users = cursor.fetchall()
|
|
||||||
for i in users:
|
|
||||||
i = print('{0} - {1} - {2}'.format(i[0], i[1], i[2]))
|
|
||||||
|
|
||||||
userracine = DOSSIER_PERSO + user
|
userracine = DOSSIER_PERSO + user
|
||||||
userfiles = userracine + '/files'
|
userfiles = userracine + '/files'
|
||||||
userimages = userracine + '/images'
|
userimages = userracine + '/images'
|
||||||
@ -141,20 +157,7 @@ def signin(token) :
|
|||||||
|
|
||||||
flash(u'Inscription réalisée avec succés !', 'succes')
|
flash(u'Inscription réalisée avec succés !', 'succes')
|
||||||
resp = redirect(url_for('loginlogout.login'))
|
resp = redirect(url_for('loginlogout.login'))
|
||||||
else:
|
|
||||||
flash(u'Les mots de passe ne sont pas identiques !', 'error')
|
|
||||||
resp = render_template('inscription.html',
|
|
||||||
signin_enable=app.config['SIGNIN_ENABLE'],
|
|
||||||
token=token, hostname=hostname,
|
|
||||||
url_inscription=url_inscription,
|
|
||||||
MAIL_SERVER=MAIL_SERVER)
|
|
||||||
else :
|
|
||||||
|
|
||||||
resp = render_template('inscription.html',
|
|
||||||
signin_enable=app.config['SIGNIN_ENABLE'],
|
|
||||||
token=token, hostname=hostname,
|
|
||||||
url_inscription=url_inscription,
|
|
||||||
MAIL_SERVER=MAIL_SERVER)
|
|
||||||
else:
|
else:
|
||||||
resp = redirect(BASE_URL, code=401)
|
resp = redirect(BASE_URL, code=401)
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import sqlite3
|
|||||||
import os
|
import os
|
||||||
from socket import gethostname
|
from socket import gethostname
|
||||||
from flask_bcrypt import Bcrypt
|
from flask_bcrypt import Bcrypt
|
||||||
from tools.utils import email_disp, append_to_log, gen_token
|
from tools.utils import email_disp, append_to_log, gen_token, valid_passwd
|
||||||
|
|
||||||
profil = Blueprint('profil', __name__, template_folder='templates')
|
profil = Blueprint('profil', __name__, template_folder='templates')
|
||||||
|
|
||||||
@ -122,15 +122,19 @@ def change_passwd() :
|
|||||||
mailbox['alias'] = tmp[1]
|
mailbox['alias'] = tmp[1]
|
||||||
mailbox['xmpp'] = tmp[2]
|
mailbox['xmpp'] = tmp[2]
|
||||||
|
|
||||||
|
|
||||||
if request.method == 'POST' :
|
if request.method == 'POST' :
|
||||||
|
|
||||||
if request.form['password'] == request.form['passwd_confirm']:
|
password = request.form['password']
|
||||||
|
password_confirm = request.form['passwd_confirm']
|
||||||
|
|
||||||
|
if password == password_confirm and valid_passwd(password):
|
||||||
mail_passwd_change = 0
|
mail_passwd_change = 0
|
||||||
xmmp_passwd_change = 0
|
xmmp_passwd_change = 0
|
||||||
passwd = request.form['password']
|
passwd = request.form['password']
|
||||||
mail_passwd_change = 0
|
|
||||||
if MAIL_SERVER:
|
if MAIL_SERVER:
|
||||||
cmd = SETUID+ " set_mail_passwd " + "'"+mailbox['Mail']+"' "+"'"+passwd+"'"
|
cmd = SETUID+ ' set_mail_passwd ' + '"'+mailbox['Mail']+'" '+ '"'+passwd+'"'
|
||||||
mail_passwd_change = os.system(cmd)
|
mail_passwd_change = os.system(cmd)
|
||||||
|
|
||||||
|
|
||||||
@ -154,8 +158,10 @@ def change_passwd() :
|
|||||||
append_to_log(log, UTILISATEUR)
|
append_to_log(log, UTILISATEUR)
|
||||||
flash(u'Votre mot de passe a été changé', 'succes')
|
flash(u'Votre mot de passe a été changé', 'succes')
|
||||||
else:
|
else:
|
||||||
flash(u'Il y eu un problème votre mot de passe n\'a pas été changé', 'error')
|
if not( valid_passwd(password) ):
|
||||||
can_commit=False
|
flash(u'Le mot de passe ne peut pas contenir les caractères " et &', 'error')
|
||||||
|
else:
|
||||||
|
flash(u'Les mot de passes ne sont pas identique :/ ', 'error')
|
||||||
|
|
||||||
conn.close()
|
conn.close()
|
||||||
return render_template('mailbox.html',
|
return render_template('mailbox.html',
|
||||||
@ -247,7 +253,7 @@ def remove_alias(aliasrm):
|
|||||||
aliases = aliases + "," + alias
|
aliases = aliases + "," + alias
|
||||||
else:
|
else:
|
||||||
aliases = alias
|
aliases = alias
|
||||||
cmd = SETUID+ " set_mail_alias " + "'"+mail+"'"+" del "+"'"+alias+"'"
|
cmd = SETUID + " set_mail_alias " + "'"+mail+"'"+" del "+"'"+alias+"'"
|
||||||
res = os.system(cmd)
|
res = os.system(cmd)
|
||||||
if res == 0:
|
if res == 0:
|
||||||
cursor.execute("UPDATE users SET alias=? WHERE name=?",
|
cursor.execute("UPDATE users SET alias=? WHERE name=?",
|
||||||
|
Loading…
Reference in New Issue
Block a user