Rework invitation system and add qrcode

This commit is contained in:
2025-12-27 07:16:39 +01:00
parent 5e54c1d383
commit 51b016aa69
6 changed files with 73 additions and 40 deletions

View File

@@ -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:

View File

@@ -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,

View File

@@ -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'])