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 %}
<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">
<div class="inner">
<h3 class="masthead-brand">Pywallter</h3>
<ul class="nav masthead-nav">
<li><a href="/login/">Login</a></li>
{% if signin_enable %}
<li class="active"><a href="/inscription/">Inscription</a></li>
{% endif %}
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
<div class="inner cover">
<h1 class="cover-heading">Inscription</h1>
<br>
{% include '_flash_msgs.html' %}
{% if signin_enable %}
<form method="POST" class="form-horizontal" action="{{ url_inscription }}">
<h4> Choisissez votre nom d'utilisateur pour vous connecter sur le portail pywallter </h4>
<input type="text" name="user" id="user" placeholder="Pseudo" class="form-control"><br />
{% if MAIL_SERVER or XMPP_SERVER %}
<p>
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 :)
</p>
{% endif %}
<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>
{% if MAIL_SERVER or XMPP_SERVER %}
<fieldset role="group">
<input type="text" name="user" id="user" placeholder="Votre pseudo">
<button class="outline">
@{{ hostname }}
</button>
</fieldset>
<p>
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 :)
</p>
{% else %}
<input type="text" name="user" id="user" placeholder="Votre Pseudo"><br />
{% endif %}
<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 />
<br>
<button 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 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 %}

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_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/<token>', 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