diff --git a/base.db.old b/base.db.old
new file mode 100644
index 0000000..9a2091a
Binary files /dev/null and b/base.db.old differ
diff --git a/templates/invitation.html b/templates/invitation.html
index 92e12ff..3936dbc 100644
--- a/templates/invitation.html
+++ b/templates/invitation.html
@@ -7,10 +7,9 @@
Si vous voulez vous pouvez inviter une personne à se crée un compte sur ce serveur
- pour cela vous devez crée un lien d'inscription. Ce lien restera valable tant
- que la personne ne s'est pas inscrite ou tant que vous ne créez pas un autre lien.
- Les invitations se font une par une et sont limité à 20 personnes pour ne pas surcharger notre petit serveur :).
- Une fois que la personne s'est incrite votre nombre d'invitations sera mis à jour
+ pour cela vous devez crée un lien d'inscription. Ce lien restera valable tant que vous ne créez pas un autre lien.
+ Les invitations sont limité à 20 personnes pour ne pas surcharger notre petit serveur :).
+ Une fois que la personne s'est inscrite votre nombre d'invitations sera mis à jour
@@ -20,8 +19,15 @@
Votre lien d'inscription en cours:
- {{ url_invitation }}
-
+ {{ url_invitation }}
+ Copier le lien
+
+
+ ou faîtes scanner ce qrcode :)
+
+
+
+
{% else %}
Pas d'invitation en attente
{% endif %}
diff --git a/tools/utils.py b/tools/utils.py
index 2816952..9c6cab3 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -43,11 +43,24 @@ 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
+ conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
+ cursor = conn.cursor() # Création de l'objet "curseur"
+
+ cursor.execute("""SELECT name FROM users WHERE name=?""", (username,))
+ tmp = cursor.fetchone()
+ conn.close()
+
+ if tmp:
+ valid = True
+ else:
+ valid = False
+
+
return valid
def set_mail_domain():
@@ -109,7 +122,7 @@ def valid_token_register(token, token_type):
cursor.execute("""SELECT name FROM users where token=?""", (token,))
tmp = cursor.fetchone()
conn.close()
- print (tmp)
+
if tmp:
valid = True
else:
@@ -121,7 +134,6 @@ def valid_token_register(token, token_type):
def get_user_by_token(token, token_type):
-
if len(token) != 30 and len(token) != 64:
user = "Invalid Token"
diff --git a/views/inscription.py b/views/inscription.py
index f7ce23e..d921fa9 100644
--- a/views/inscription.py
+++ b/views/inscription.py
@@ -35,13 +35,12 @@ def signin(token) :
mail_domain = set_mail_domain()
- url_inscription = BASE_URL +'/inscription/'+token
+ url_inscription = BASE_URL +'/'+'inscription/'+token
resp = None
if valid_token_register(token, "Invitation"):
if 'username' in session :
resp = redirect(url_for('profil.profile', _external=True))
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'],
@@ -52,6 +51,16 @@ def signin(token) :
if request.method == 'POST':
+ # Une fois que tout c'est bien passé pour l'inscription on détruit le jeton.
+ conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
+ cursor = conn.cursor() # Création de l'objet "curseur"
+
+ cursor.execute("""SELECT name, invitations FROM users where Token=?""", (token,))
+ tmp = cursor.fetchone()
+ user_invite = tmp[0]
+ invitations_count=tmp[1]
+ conn.close()
+
#On test si aucun champs du formulaire n'est vide.
if len(request.form['user']) == 0 or \
len(request.form['passwd']) == 0 or \
@@ -60,7 +69,7 @@ def signin(token) :
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,
+ token=token, hostname=mail_domain,
url_inscription=url_inscription,
MAIL_SERVER=MAIL_SERVER, XMPP_SERVER=XMPP_SERVER)
@@ -73,16 +82,11 @@ def signin(token) :
not_error = True
- conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
- cursor = conn.cursor() # Création de l'objet "curseur"
-
- cursor.execute("""SELECT name FROM users WHERE name=?""", (user,))
- testuser = cursor.fetchone()
- conn.close()
-
- print("user :" +user)
- print ("passwd: "+ passwd)
- if testuser and valid_username(user):
+ if invitations_count < 1 :
+ flash(u'Votre lien d\'inscription est invalide', 'error')
+ not_error=False
+
+ if not_error and valid_username(user):
flash(u'Le Nom 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
@@ -131,17 +135,16 @@ def signin(token) :
with open(log_file, 'x') as file:
file.write(log)
except FileExistsError:
- print('The file '+log_file +' already exists')
+ print('The file '+log_file +' already exists')
- # Une fois que tout c'est bien passé pour l'inscription on détruit le jeton.
- cursor.execute("""SELECT name, invitations FROM users where Token=?""", (token,))
- tmp = cursor.fetchone()
- username = tmp[0]
- invitations_count=tmp[1] - 1
- if username == "pywallter":
- cursor.execute("""DELETE from users where name = ?""", (username,))
+
+ if user_invite == "pywallter":
+ cursor.execute("""DELETE from users where name = ?""", (user_invite,))
+ elif invitations_count > 0:
+ invitations_count= invitations_count - 1
+ cursor.execute("""UPDATE users set invitations=? where name=?""", (invitations_count, user_invite,))
else:
- cursor.execute("""UPDATE users set invitations=?, Token='' where name=?""", (invitations_count, username,))
+ cursor.execute("""UPDATE users set invitations=?, Token='' where name=?""", (invitations_count, user_invite,))
conn.commit()
flash(u'Inscription réalisée avec succés !', 'success')
@@ -149,7 +152,7 @@ def signin(token) :
else:
return render_template('inscription.html',
signin_enable=app.config['SIGNIN_ENABLE'],
- token=token, hostname=hostname,
+ token=token, hostname=mail_domain,
url_inscription=url_inscription,
MAIL_SERVER=MAIL_SERVER, XMPP_SERVER=XMPP_SERVER)
else:
diff --git a/views/loginlogout.py b/views/loginlogout.py
index d81c133..d41eb74 100644
--- a/views/loginlogout.py
+++ b/views/loginlogout.py
@@ -50,7 +50,7 @@ def index():
else :
if token:
hostname = gethostname()
- url_inscription = BASE_URL+'inscription/'+token
+ url_inscription = BASE_URL+'/inscription/'+token
return render_template('inscription.html', signin_enable=app.config['SIGNIN_ENABLE'],
token=token, hostname=hostname,
url_inscription=url_inscription,
diff --git a/views/profil.py b/views/profil.py
index efe90ba..8ff6be4 100644
--- a/views/profil.py
+++ b/views/profil.py
@@ -349,39 +349,51 @@ def deltoken_passwd_lost(token) :
@profil.route('/invitation/', methods=['GET'])
@login_required
def invitation():
- UTILISATEUR='%s' % escape(session['username'])
+ user='%s' % escape(session['username'])
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
cursor = conn.cursor() # Création de l'objet "curseur"
- cursor.execute("""SELECT Token, invitations FROM users WHERE name=?""", (UTILISATEUR,))
+ cursor.execute("""SELECT Token, invitations FROM users WHERE name=?""", (user,))
tmp = cursor.fetchone()
token = tmp[0]
- if token:
- url_invitation = BASE_URL + 'inscription/' + token
+ nb_invitations = tmp[1]
+ if token and nb_invitations > 0:
+ url_invitation = BASE_URL + '/inscription/' + token
+ img = qrcode.make(url_invitation)
+ img.save(os.path.join(DOSSIER_PERSO, user, "invitation.png"))
else:
url_invitation = ""
- invitations_count = tmp[1]
conn.close()
return render_template('invitation.html',
section='Profil',
- nb_invitation=invitations_count,
+ nb_invitation=nb_invitations,
token=token,
url_invitation=url_invitation)
+@profil.route('/invitation.png', methods=['GET'])
+@login_required
+def invitation_qrcode():
+ user='%s' % escape(session['username'])
+ return send_file(
+ os.path.join(DOSSIER_PERSO, user, "invitation.png"))
+
@profil.route('/gen_token/', methods=['GET'])
@login_required
def generate_token():
user='%s' % escape(session['username'])
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
cursor = conn.cursor() # Création de l'objet "curseur"
+ cursor.execute("""SELECT invitations FROM users WHERE name=?""", (user,))
+ tmp = cursor.fetchone()
+ token = tmp[0]
token = gen_token("Invitation")
cursor.execute("UPDATE users SET Token=? WHERE name=?",
(token, user))
conn.commit()
conn.close()
- return redirect(BASE_URL+'invitation/')
+ return redirect(BASE_URL+'/invitation/')
@profil.route( '/delete_me/', methods=['GET','POST'])