Work to flask derrière Nginx

This commit is contained in:
kitoy 2022-08-06 23:49:16 +02:00
parent 083a7147ff
commit b34695a41b
13 changed files with 88 additions and 40 deletions

31
#README.md# Normal file
View File

@ -0,0 +1,31 @@
# Pywallter est un projet de portail communautaire pour les utilisateur d'un serveur.
Demande- juste un identifiant et un mot de passe et voila.
On peut y importer des fichiers que l'on pourra rendre accèssible en public par la suite.
Je voulais tester cette idée de post-it pour que les utilisateur puisse s'échanger des messages
ou que les admins puisse faire des annonces... On verra
on pourrait ajoute de la double authentification mais bon ...
## Pour démarrer le programme
### Sur OpenBSD (7.1)
Il faut installer FLask et quelques dépendances
pkg_add py3-werkzeug py3-jinja2 py3-Pillow py3-wtforms py3-flask-wtf py3-flask \
py3-bcrypt py3-markdown py3-gevent py3-zopeinterface
### Sur Debian (A venir)
apt install python3-flask python3-flask-bcrypt python3-wtforms python3-pil python3-markdown
### Ensuite dans le dossier du projet tu fais :
$ export FLASK_APP=pywallter.py
$ flask run
#### En serveur de production
$ python3 wsgi.py
Et ça devrait démarrer sans soucis.
## Support serveru MAIL et XMPP
Le logiciel a besoin de opensmtpd et prosody pour fonctionner.
Le serveur mail et xmmp se base sur le domain de la machine.
Les scripts dans le dossier scripts sont la à titre d'exemple et peuvent être copié

6
#wsgi.py# Normal file
View File

@ -0,0 +1,6 @@
from gevent.pywsgi import WSGIServer
from pywallter import create_app
app = create_app()
http_server = WSGIServer(("127.0.0.1", 8000), app)
http_server.serve_forever()

View File

@ -1,8 +1,13 @@
# L'adresse de base de votre site.
# example BASE_URL="http://localhost/"
BASE_URL="https://example.con/"
# Essentiels pour les cookies
SECRET_KEY="fksmlfkljklknfzqlknfzqlkezq"
SECRET_KEY="CHANGE ME"
# Dossier où seront stocker les fichiers
DOSSIER_APP = "users/"
DOSSIER_APP = "./users/"
# Fichiers sqlite
DATABASE = "./base.db"

View File

@ -80,6 +80,7 @@ def create_app():
app.register_blueprint(profil)
app.register_blueprint(logs)
app.register_blueprint(loginlogout)
app.register_blueprint(mygallery)
return app

View File

@ -36,8 +36,6 @@
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-comment" aria-hidden="true"></span> Ma Messagerie </a>
<ul class="dropdown-menu" role="menu">
<li><a href="/mymailbox/"> <span class="glyphicon glyphicon-lock" aria-hidden="true"></span>
Changer mon mot de passe </a></li>
<li><a href="/mymailbox/alias"><span class="glyphicon glyphicon-sunglasses" aria-hidden="true"></span>
Gerer mes alias</a></li>
@ -50,11 +48,11 @@
</a>
</li>
<li {% if section == "Profil" %} class="dropdown active" {% else %} class="dropdown" {% endif %}>
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-home" aria-hidden="true"></span> <span id="majuscule">{{ session['username'] }} </span><span class="caret"></span></a>
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-home" aria-hidden="true"></span> <span id="majuscule">{{ session['username'] }} </span><span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="/profil/"><span class="glyphicon glyphicon-user" aria-hidden="true"></span> Profil</a></li>
<li><a href="/parametres/"><span class="glyphicon glyphicon-cog" aria-hidden="true"></span> Paramètres</a></li>
<li class="divider"></li>
<li><a href="/profil/change-password/"> <span class="glyphicon glyphicon-lock" aria-hidden="true"></span>
Changer mon mot de passe </a></li>
<li><a href="/invitation/"><span class="glyphicon glyphicon-cog" aria-hidden="true"></span> Inviter une personne</a></li>
<!--<li class="dropdown-header">Nav header</li>-->
</ul>

View File

@ -27,7 +27,7 @@
<br>
{% if signin_enable %}
<form method="POST" action="{{ base_url }}">
<form method="POST" action="{{ url_inscription }}">
<input type="text" name="user" id="user" placeholder="Pseudo" class="form-control"><br />
<div class="col-sm-7">
<input type="text" name="mail" id="mail" placeholder="Adresse mail" class="form-control" size="2"> <br/>

View File

@ -21,8 +21,8 @@
{% if token %}
<h3> Votre lien d'inscription en cours: </h3>
<a href="{{ base_url }}/{{ token }}">
{{base_url }}/{{ token }}
<a href="{{ url_invitation }}">
{{ url_invitation }}
</a>
{% else %}
<h3> Pas d'invitation en attente </h3>

View File

@ -18,6 +18,8 @@ DOSSIER_PERSO= app.config['DOSSIER_APP']
extensionimg = app.config['EXT_IMG']
DATABASE = app.config['DATABASE']
BASE_URL = app.config['BASE_URL']
##################################################################################################
@ -55,7 +57,7 @@ def racine_blog():
conn.close()
return render_template('blog.html', section='Post-it', posts=posts)
else:
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)
@ -69,7 +71,7 @@ def delete(post):
conn.close()
return redirect(url_for('post-it.racine_blog'))
else:
return redirect(url_for('loginlogout.login', _external=True), code=401) # sinon on redirige vers login
return redirect(BASE_URL, code=401) # sinon on redirige vers login
@postit.route('/edit/<post>', methods=['GET', 'POST'])
def edit(post):
@ -96,7 +98,7 @@ def edit(post):
oldpost=oldpost)
else:
return redirect(url_for('loginlogout.login', _external=True), code=401) # sinon on redirige vers login)
return redirect(BASE_URL, code=401)
@postit.route('/postit/board', methods=['GET'])
def viewsheet():
@ -110,4 +112,4 @@ def viewsheet():
conn.close()
return render_template('board.html', section='Post-it', posts=posts)
else:
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)

View File

@ -21,6 +21,8 @@ DOSSIER_PERSO= app.config['DOSSIER_APP']
extensionimg = app.config['EXT_IMG']
DATABASE = app.config['DATABASE']
BASE_URL= app.config['BASE_URL']
##################################################################################################
@filesupload.route( '/filesupload/', methods=['GET', 'POST'])
@ -81,7 +83,7 @@ def uploadfiles():
resp.set_cookie('username', session['username'])
return resp
else :
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)
@filesupload.route('/view/')
@ -103,9 +105,9 @@ def list():
listeFichiers=listeFichiers)
else :
flash(u'Aucun fichier uploadé ! Redirection vers Upload', 'error')
return redirect(url_for('filesupload.uploadfiles', external=True))
return redirect(url_for('filesupload.uploadfiles'))
else :
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)
@filesupload.route('/myfiles/<filename>')
def myfiles(filename):
@ -114,7 +116,7 @@ def myfiles(filename):
return send_from_directory(
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'files'), filename )
else :
return redirect(url_for('loginlogout.login'), code=401)
return redirect(BASE_URL, code=401)
@filesupload.route('/remove/<nom>')
def remove(nom):
@ -134,4 +136,4 @@ def remove(nom):
return redirect(url_for('filesupload.list', _external=True)) # sinon on redirige vers la liste, avec un message d'erreur
else :
return redirect(url_for('loginlogout.login'), code=401)
return redirect(BASE_URL, code=401)

View File

@ -43,7 +43,7 @@ def myimg(filename):
return send_from_directory(
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'images'), filename )
else :
return redirect(url_for('loginlogout.login'), code=401)
return redirect(BASE_URL, code=401)
@mygallery.route('/myfiles/images/thumbnails/<filename>')
def mythumbnails(filename):
@ -52,4 +52,4 @@ def mythumbnails(filename):
return send_from_directory(
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'images/thumbnails'), filename )
else :
return redirect(url_for('loginlogout.login'), code=401)
return redirect(BASE_URL, code=401)

View File

@ -18,6 +18,8 @@ DATABASE = app.config['DATABASE']
MAIL_SERVER = app.config['MAIL_SERVER']
XMMP_SERVER = app.config['XMPP_SERVER']
SETUID = app.config['SETUID']
BASE_URL = app.config['BASE_URL']
#################################################################################################
@ -103,17 +105,18 @@ def signin(token) :
conn.commit()
flash(u'Inscription réalisée avec succés !', 'succes')
resp = redirect(url_for('loginlogout.login', _external=True))
resp = redirect(url_for('loginlogout.login'))
else:
flash(u'Les mots de passe ne sont pas identiques !', 'error')
resp = render_template('inscription.html',
signin_enable=app.config['SIGNIN_ENABLE'],
hostname=hostname)
else :
url_inscription = BASE_URL+'invitation/'+token
resp = render_template('inscription.html',
signin_enable=app.config['SIGNIN_ENABLE'],
token=token, hostname=hostname, base_url=request.base_url)
token=token, hostname=hostname, url_inscription=url_inscription)
else:
resp = redirect(url_for('index', _external=True), code=401)
resp = redirect(BASE_URL, code=401)
return resp

View File

@ -26,6 +26,8 @@ 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']
##################################################################################################
@ -105,7 +107,7 @@ def profile() :
username=UTILISATEUR)
else :
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)
@profil.route('/profil/change-password/', methods=['GET','POST'] )
def change_passwd() :
@ -156,13 +158,13 @@ def change_passwd() :
conn.close()
return render_template('mailbox.html',
section="mailbox",
section="Profil",
address=mailbox['Mail'],
alias=mailbox['alias'],
username=UTILISATEUR)
else :
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)
@profil.route('/mymailbox/alias', methods=['GET', 'POST'] )
@ -223,7 +225,7 @@ def myalias():
username=UTILISATEUR )
else:
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)
@profil.route('/mymailbox/rmalias/<aliasrm>')
def remove_alias(aliasrm):
@ -261,7 +263,7 @@ def remove_alias(aliasrm):
return redirect(url_for('profil.myalias', _external=True))
else:
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)
@profil.route('/invitation/', methods=['GET'])
def invitation():
@ -271,19 +273,18 @@ def invitation():
cursor = conn.cursor() # Création de l'objet "curseur"
cursor.execute("""SELECT Token, invitations FROM users WHERE name=?""", (UTILISATEUR,))
tmp = cursor.fetchone()
print (tmp)
print (tmp[0])
token = tmp[0]
invitations_count = tmp[1]
conn.close()
base_url = request.base_url
base_url = base_url.replace("/invitation/", "inscription")
url_invitation = BASE_URL + 'inscription/' + token
return render_template('invitation.html',
section='Profil',
token=token,
nb_invitation=invitations_count,
base_url=base_url)
token=token,
url_invitation=url_invitation)
else:
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)
@profil.route('/gen_token/', methods=['GET'])
def generate_token():
@ -296,7 +297,6 @@ def generate_token():
(token, UTILISATEUR))
conn.commit()
conn.close()
return redirect(url_for('profil.invitation', _external=True))
return redirect(BASE_URL+'invitation/')
else:
return redirect(url_for('loginlogout.login', _external=True), code=401)
return redirect(BASE_URL, code=401)

View File

@ -1,5 +1,5 @@
from gevent.pywsgi import WSGIServer
from flask import Flask
from pywallter import create_app
app = create_app()