remove os.system from inscription

This commit is contained in:
Charlie Root 2025-12-21 18:32:39 +01:00
parent 76e3cfb870
commit 66eff29692
2 changed files with 80 additions and 84 deletions

View File

@ -2,69 +2,46 @@
{% block main %} {% block main %}
<div class="site-wrapper">
<div class="site-wrapper-inner"> <h1>Inscription</h1>
<br>
{% include '_flash_msgs.html' %}
<div class="cover-container"> {% if signin_enable %}
<form method="POST" action="{{ url_inscription }}">
<h4> Choisissez votre nom d'utilisateur pour vous connecter sur le portail pywallter </h4>
<div class="masthead clearfix"> {% if MAIL_SERVER or XMPP_SERVER %}
<div class="inner"> <fieldset role="group">
<h3 class="masthead-brand">Pywallter</h3> <input type="text" name="user" id="user" placeholder="Votre pseudo">
<ul class="nav masthead-nav"> <button class="outline">
<li><a href="/login/">Login</a></li> @{{ hostname }}
</button>
{% if signin_enable %} </fieldset>
<li class="active"><a href="/inscription/">Inscription</a></li>
{% endif %} <p>
<li><a href="#">Contact</a></li> Votre pseudo vous servira à vous connecter à votre compte Mail et de messagerie instantanné (XMPP)
</ul> Par exemple vous souhaitez l'adresse toto@{{hostname}}; vous entrez le pseudo toto :)
</div> </p>
</div>
{% else %}
<div class="inner cover"> <input type="text" name="user" id="user" placeholder="Votre Pseudo"><br />
<h1 class="cover-heading">Inscription</h1> {% endif %}
<br>
{% include '_flash_msgs.html' %} <input type="password" name="passwd" id="passwd" placeholder="Mot de passe"><br />
<input type="password" name="passwdconfirm" id="passwdconfirm" placeholder="Confirmation du mot de passe"><br />
{% if signin_enable %} <br>
<form method="POST" class="form-horizontal" action="{{ url_inscription }}"> <button type="submit">Créer mon compte</button>
<h4> Choisissez votre nom d'utilisateur pour vous connecter sur le portail pywallter </h4> </form>
<input type="text" name="user" id="user" placeholder="Pseudo" class="form-control"><br /> {% else %}
{% if MAIL_SERVER or XMPP_SERVER %} <p class="lead">
Désolé les inscriptions ne sont pas activés sur le serveur
<p> </p>
Votre nom d'utilisateur vous servira à vous connecter à votre compte Mail et de messagerie instantanné (XMPP) {%endif%}
Par exemple vous souhaitez l'adresse toto@{{hostname}}; vous entrez le nom d'utilisateur toto :) {% for i in users %}
</p> <p>{{i}}</p>
{% endif %} {% endfor %}
<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 />
<br>
<button id="tada" class="btn btn-default btn-primary" type="submit">Créer mon compte</button>
</form>
{% else %}
<p class="lead">
Désolé les inscriptions ne sont pas activés sur le serveur
</p>
{%endif%}
{% for i in users %}
<p>{{i}}</p>
{% endfor %}
</div>
<div class="mastfoot">
<div class="inner">
<p>Cover template for <a href="http://getbootstrap.com">Bootstrap</a>, by <a href="https://twitter.com/mdo">@mdo</a>.</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -1,10 +1,13 @@
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file
from flask_bcrypt import Bcrypt from flask_bcrypt import Bcrypt
import time
from markupsafe import escape
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, valid_username from tools.utils import email_disp, valid_token_register, valid_passwd, valid_username
from socket import gethostname from socket import gethostname
import subprocess
from tools.filesutils import check_and_create
app = Flask( 'pywallter' ) app = Flask( 'pywallter' )
app.config.from_pyfile('config.py') app.config.from_pyfile('config.py')
@ -14,12 +17,14 @@ bcrypt = Bcrypt(app)
DATAS_USER = app.config['DOSSIER_APP'] DATAS_USER = app.config['DOSSIER_APP']
DOSSIER_PERSO = app.config['DOSSIER_APP']
extensionimg = app.config['EXT_IMG'] extensionimg = app.config['EXT_IMG']
DATABASE = app.config['DATABASE'] DATABASE = app.config['DATABASE']
MAIL_SERVER = app.config['MAIL_SERVER'] MAIL_SERVER = app.config['MAIL_SERVER']
XMPP_SERVER = app.config['XMPP_SERVER'] XMPP_SERVER = app.config['XMPP_SERVER']
SETUID = app.config['SETUID'] SETUID = app.config['SETUID']
BASE_URL = app.config['BASE_URL'] 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/<token>', methods=['GET','POST'] ) @inscription.route( '/inscription/<token>', methods=['GET','POST'] )
def signin(token) : def signin(token) :
hostname = gethostname() hostname = MAIL_DOMAIN
url_inscription = url_for('loginlogout.index', _external=True)+'inscription/'+token url_inscription = BASE_URL +'/inscription/'+token
resp = None resp = None
if valid_token_register(token, "Invitation"): if valid_token_register(token, "Invitation"):
if 'username' in session : if 'username' in session :
@ -58,14 +63,13 @@ def signin(token) :
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 = str(request.form['user'])
user = request.form['user'] passwd = str(request.form['passwd'])
passwd = request.form['passwd'] passwdconfirm = str(request.form['passwdconfirm'])
passwdconfirm = request.form['passwdconfirm']
bcrypt_passwd = bcrypt.generate_password_hash(request.form['passwd']) bcrypt_passwd = bcrypt.generate_password_hash(passwd)
mail_passwd_change = 0 mail_passwd_change = 0
password_valid = valid_passwd(passwd)
not_error = True not_error = True
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
@ -75,14 +79,13 @@ def signin(token) :
testuser = cursor.fetchone() testuser = cursor.fetchone()
conn.close() conn.close()
print("user :" +user)
print ("passwd: "+ passwd)
if testuser and valid_username(user): 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') flash(u'Les caractères espaces et \' ( ) < > , ; : " [ ] | ç % & ne sont pas autorisés', 'error')
not_error = False 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 = user.lower()+'@'+hostname mail = user.lower()+'@'+hostname
@ -102,22 +105,32 @@ def signin(token) :
# On change le mot de passe du compte mail # On change le mot de passe du compte mail
if MAIL_SERVER: if MAIL_SERVER:
cmd = SETUID + ' set_mail_passwd ' + '"'+mail+'" ' + '"'+passwd+'"' cmd = subprocess.run([SETUID, 'set_mail_passwd', mail, passwd],stdout=subprocess.PIPE)
mail_passwd_change = os.system(cmd) if cmd.returncode != 0:
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') flash(u'Il y a eu une problème lors du changement de mot passe pour le compte Mail', 'error')
else: 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 # On change le mot de passe du compte XMPP
if XMPP_SERVER: if XMPP_SERVER:
tmp = mail.split('@') jid = mail.split('@')
cmd = SETUID+ ' prosodyctl register ' "'"+tmp[0]+"' " + "'"+tmp[1]+"' " + "'"+passwd+"'" cmd = subprocess.run([SETUID,'prosodyctl', 'register', jid[0],jid[1],passwd],stdout=subprocess.PIPE)
res = os.system(cmd)
if res != 0: if cmd.returncode != 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')
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. # 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,)) 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,)) cursor.execute("""UPDATE users set invitations=?, Token='' where name=?""", (invitations_count, username,))
conn.commit() 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')) 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: else:
resp = redirect(BASE_URL, code=401) resp = redirect(BASE_URL, code=401)
return resp return resp