From 66eff2969286fc98dba40fe4f752a8e1eea41afe Mon Sep 17 00:00:00 2001 From: Charlie Root Date: Sun, 21 Dec 2025 18:32:39 +0100 Subject: [PATCH] remove os.system from inscription --- templates/inscription.html | 95 +++++++++++++++----------------------- views/inscription.py | 69 +++++++++++++++++---------- 2 files changed, 80 insertions(+), 84 deletions(-) diff --git a/templates/inscription.html b/templates/inscription.html index 49277d8..07c0d36 100644 --- a/templates/inscription.html +++ b/templates/inscription.html @@ -2,69 +2,46 @@ {% block main %} -
-
+

Inscription

+
+{% include '_flash_msgs.html' %} -
+{% if signin_enable %} +
+

Choisissez votre nom d'utilisateur pour vous connecter sur le portail pywallter

-
-
-

Pywallter

- -
-
- -
-

Inscription

-
- {% include '_flash_msgs.html' %} - - {% if signin_enable %} - -

Choisissez votre nom d'utilisateur pour vous connecter sur le portail pywallter

-
- {% if MAIL_SERVER or XMPP_SERVER %} - -

- Votre nom d'utilisateur vous servira à vous connecter à votre compte Mail et de messagerie instantanné (XMPP) - Par exemple vous souhaitez l'adresse toto@{{hostname}}; vous entrez le nom d'utilisateur toto :) -

- {% endif %} - -
-
-
- - - {% else %} -

- Désolé les inscriptions ne sont pas activés sur le serveur -

- {%endif%} - {% for i in users %} -

{{i}}

- {% endfor %} -
+ {% if MAIL_SERVER or XMPP_SERVER %} +
+ + +
+ +

+ Votre pseudo vous servira à vous connecter à votre compte Mail et de messagerie instantanné (XMPP) + Par exemple vous souhaitez l'adresse toto@{{hostname}}; vous entrez le pseudo toto :) +

+ + {% else %} +
+ {% endif %} + +
+
+
+ + +{% else %} +

+ Désolé les inscriptions ne sont pas activés sur le serveur +

+{%endif%} +{% for i in users %} +

{{i}}

+{% endfor %} -
-
-

Cover template for Bootstrap, by @mdo.

-
-
- -
- -
- -
{% endblock %} diff --git a/views/inscription.py b/views/inscription.py index 05fc188..67b36b3 100644 --- a/views/inscription.py +++ b/views/inscription.py @@ -1,10 +1,13 @@ from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file from flask_bcrypt import Bcrypt - +import time +from markupsafe import escape import sqlite3 import glob, os, sys, time from tools.utils import email_disp, valid_token_register, valid_passwd, valid_username from socket import gethostname +import subprocess +from tools.filesutils import check_and_create app = Flask( 'pywallter' ) app.config.from_pyfile('config.py') @@ -14,12 +17,14 @@ bcrypt = Bcrypt(app) DATAS_USER = app.config['DOSSIER_APP'] +DOSSIER_PERSO = app.config['DOSSIER_APP'] extensionimg = app.config['EXT_IMG'] DATABASE = app.config['DATABASE'] MAIL_SERVER = app.config['MAIL_SERVER'] XMPP_SERVER = app.config['XMPP_SERVER'] SETUID = app.config['SETUID'] BASE_URL = app.config['BASE_URL'] +MAIL_DOMAIN = app.config['MAIL_DOMAIN'] ################################################################################################# @@ -28,8 +33,8 @@ inscription = Blueprint('inscription', __name__, template_folder='templates') @inscription.route( '/inscription/', methods=['GET','POST'] ) def signin(token) : - hostname = gethostname() - url_inscription = url_for('loginlogout.index', _external=True)+'inscription/'+token + hostname = MAIL_DOMAIN + url_inscription = BASE_URL +'/inscription/'+token resp = None if valid_token_register(token, "Invitation"): if 'username' in session : @@ -58,14 +63,13 @@ def signin(token) : url_inscription=url_inscription, MAIL_SERVER=MAIL_SERVER, XMPP_SERVER=XMPP_SERVER) - - user = request.form['user'] - passwd = request.form['passwd'] - passwdconfirm = request.form['passwdconfirm'] - bcrypt_passwd = bcrypt.generate_password_hash(request.form['passwd']) + user = str(request.form['user']) + passwd = str(request.form['passwd']) + passwdconfirm = str(request.form['passwdconfirm']) + + bcrypt_passwd = bcrypt.generate_password_hash(passwd) mail_passwd_change = 0 - - password_valid = valid_passwd(passwd) + not_error = True conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée @@ -75,14 +79,13 @@ def signin(token) : testuser = cursor.fetchone() conn.close() + print("user :" +user) + print ("passwd: "+ passwd) if testuser and valid_username(user): - flash(u'Non d\'utilisateur déjà utilisé ou contient des caractères invalides, merci d\'en choisir un autre', 'error') + 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 - 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: mail = user.lower()+'@'+hostname @@ -102,22 +105,32 @@ def signin(token) : # 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: + cmd = subprocess.run([SETUID, 'set_mail_passwd', mail, passwd],stdout=subprocess.PIPE) + if cmd.returncode != 0: flash(u'Il y a eu une problème lors du changement de mot passe pour le compte Mail', 'error') else: - cursor.execute("UPDATE users SET mail=? WHERE name=?", mail, user) + cursor.execute("UPDATE users SET mail=? WHERE name=?", (mail, user)) # On change le mot de passe du compte XMPP if XMPP_SERVER: - tmp = mail.split('@') - cmd = SETUID+ ' prosodyctl register ' "'"+tmp[0]+"' " + "'"+tmp[1]+"' " + "'"+passwd+"'" - res = os.system(cmd) - if res != 0: + jid = mail.split('@') + cmd = subprocess.run([SETUID,'prosodyctl', 'register', jid[0],jid[1],passwd],stdout=subprocess.PIPE) + + if cmd.returncode != 0: flash(u'Il y a eu un problème pour la création du compte XMPP !', 'error') + + check_and_create(DOSSIER_PERSO + user) + time_create_user = time.strftime("%A %d %B %Y %H:%M:%S") + ip_address=request.environ['REMOTE_ADDR'] + client_plateform=request.headers.get('User-Agent') - + log=time_create_user + ' - ' + ip_address + ' - ' + user + ' - ' + client_plateform + '\n' + '---> ' + 'Création du compte \n' + log_file=DOSSIER_PERSO+user+"/log.txt" + try: + with open(log_file, 'x') as file: + file.write(log) + except FileExistsError: + 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,)) @@ -130,10 +143,16 @@ def signin(token) : cursor.execute("""UPDATE users set invitations=?, Token='' where name=?""", (invitations_count, username,)) conn.commit() - flash(u'Inscription réalisée avec succés !', 'succes') + flash(u'Inscription réalisée avec succés !', 'success') resp = redirect(url_for('loginlogout.login')) - + else: + return render_template('inscription.html', + signin_enable=app.config['SIGNIN_ENABLE'], + token=token, hostname=hostname, + url_inscription=url_inscription, + MAIL_SERVER=MAIL_SERVER, XMPP_SERVER=XMPP_SERVER) else: resp = redirect(BASE_URL, code=401) return resp +