Arragement dans la gallerie

This commit is contained in:
kitoy 2022-07-05 01:18:52 +02:00
parent 318ab80dc8
commit eda47f57a6
17 changed files with 197 additions and 200 deletions

View File

@ -1,112 +0,0 @@
#!venv/bin/python
# -*- coding: utf-8 -*-
from flask import Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape
from werkzeug import secure_filename
from wand.image import Image
from wtforms import BooleanField, StringField, IntegerField, PasswordField, validators
import sqlite3
from flask_bcrypt import Bcrypt
from views.blog import blog
from views.filesupload import filesupload
from views.inscription import inscription
from views.profil import profil
from views.logs import logs
from views.loginlogout import loginlogout
from tools.databaseinit import init_db, init_dir
import glob, os, sys, time
app = Flask( 'pywallter' )
bcrypt = Bcrypt(app)
if init_db():
print ("La base de données a été créer")
exit()
if init_dir():
print ("Le repertoire des utilisateurs a été créer")
exit()
# Set the secret key. Keep this really secret
app.secret_key = 'klfkdlfkdslfkln234325;cx!' # Chiffre les cookies si j'ai bien capté. À générer aléatoirement impérativement avant de mettre en ligne.
#### Variables ####################################################################################
DOSSIER_PERSO='users/'
extensionimg = {'.jpg', '.JPG', '.png', '.PNG', '.gif', '.GIF', '.bmp', '.BMP', '.jpeg', '.JPEG' }
##################################################################################################
app.register_blueprint(inscription)
app.register_blueprint(blog)
app.register_blueprint(filesupload)
app.register_blueprint(profil)
app.register_blueprint(logs)
app.register_blueprint(loginlogout)
@app.route( '/gallery/')
def gallery():
if 'username' in session :
UTILISATEUR='%s' % escape(session['username'])
THUMBNAILS=DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/'
fichiers = [fich for fich in os.listdir(THUMBNAILS)]
return render_template('gallery.html', THUMBNAILS=THUMBNAILS, fichiers=fichiers)
else :
return redirect(url_for('login'))
@app.route( '/parametres/', methods=['GET','POST'] )
def parametres() :
if 'username' in session :
return render_template('parametres.html')
else:
return redirect(url_for('login'))
@app.route('/up/view/<nom>')
def download(nom):
if 'username' in session :
UTILISATEUR='%s' % escape(session['username'])
nom = secure_filename(nom)
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom): # si le fichier existe
return send_file(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom, as_attachment=True) # on l'envoie
else:
flash(u'Fichier {nom} inexistant.'.format(nom=nom), 'error')
return redirect(url_for('list')) # sinon on redirige vers la liste, avec un message d'erreur
else :
return redirect(url_for('login'))
@app.route('/remove/<nom>')
def remove(nom):
if 'username' in session :
UTILISATEUR='%s' % escape(session['username'])
nom = secure_filename(nom)
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom): # si le fichier existe
os.remove(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom) # on le supprime
return redirect(url_for('filesupload.list', _external=True))
else:
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom): # si le fichier existe
os.remove(DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom) # on le supprime
os.remove(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom) # on le supprime
return redirect(url_for('gallery'))
else:
flash(u'Fichier {nom} inexistant.'.format(nom=nom), 'error')
return redirect(url_for('filesupload.list', _external=True)) # sinon on redirige vers la liste, avec un message d'erreur
else :
return redirect(url_for('login'))
@app.route( '/' )
def index():
if 'username' in session :
return redirect(url_for('filesupload.upload'))
else :
return redirect(url_for('loginlogout.login', _external=True))
if __name__ == '__main__' :
app.run(host='127.0.0.1', port=8080, debug=True)

View File

@ -61,14 +61,14 @@ def gallery():
fichiers = [fich for fich in os.listdir(THUMBNAILS)] fichiers = [fich for fich in os.listdir(THUMBNAILS)]
return render_template('gallery.html', THUMBNAILS=THUMBNAILS, fichiers=fichiers) return render_template('gallery.html', THUMBNAILS=THUMBNAILS, fichiers=fichiers)
else : else :
return redirect(url_for('login')) return redirect(url_for('loginlogout.login'))
@app.route( '/parametres/', methods=['GET','POST'] ) @app.route( '/parametres/', methods=['GET','POST'] )
def parametres() : def parametres() :
if 'username' in session : if 'username' in session :
return render_template('parametres.html') return render_template('parametres.html')
else: else:
return redirect(url_for('login')) return redirect(url_for('loginlogout.login'))
@app.route('/up/view/<nom>') @app.route('/up/view/<nom>')
def download(nom): def download(nom):
@ -81,7 +81,7 @@ def download(nom):
flash(u'Fichier {nom} inexistant.'.format(nom=nom), 'error') flash(u'Fichier {nom} inexistant.'.format(nom=nom), 'error')
return redirect(url_for('list')) # sinon on redirige vers la liste, avec un message d'erreur return redirect(url_for('list')) # sinon on redirige vers la liste, avec un message d'erreur
else : else :
return redirect(url_for('login')) return redirect(url_for('loginlogout.login'))
@app.route('/remove/<nom>') @app.route('/remove/<nom>')
def remove(nom): def remove(nom):
@ -101,7 +101,7 @@ def remove(nom):
return redirect(url_for('filesupload.list', _external=True)) # sinon on redirige vers la liste, avec un message d'erreur return redirect(url_for('filesupload.list', _external=True)) # sinon on redirige vers la liste, avec un message d'erreur
else : else :
return redirect(url_for('login')) return redirect(url_for('loginlogout.login'))
@app.route('/myfiles/<filename>') @app.route('/myfiles/<filename>')
@ -111,7 +111,7 @@ def myfiles(filename):
return send_from_directory( return send_from_directory(
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'files'), filename ) os.path.join(DOSSIER_PERSO, UTILISATEUR, 'files'), filename )
else : else :
return 403 return redirect(url_for('loginlogout.login'))
@app.route('/myfiles/images/<filename>') @app.route('/myfiles/images/<filename>')
@ -121,7 +121,7 @@ def myimg(filename):
return send_from_directory( return send_from_directory(
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'images'), filename ) os.path.join(DOSSIER_PERSO, UTILISATEUR, 'images'), filename )
else : else :
return 403 return redirect(url_for('loginlogout.login'))
@app.route('/myfiles/images/thumbnails/<filename>') @app.route('/myfiles/images/thumbnails/<filename>')
def mythumbnails(filename): def mythumbnails(filename):
@ -130,7 +130,7 @@ def mythumbnails(filename):
return send_from_directory( return send_from_directory(
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'images/thumbnails'), filename ) os.path.join(DOSSIER_PERSO, UTILISATEUR, 'images/thumbnails'), filename )
else : else :
return 403 return redirect(url_for('loginlogout.login'))
@app.route( '/' ) @app.route( '/' )
def index(): def index():

View File

@ -11,3 +11,52 @@ function animation() {
window.setTimeout(divhider, 2200); window.setTimeout(divhider, 2200);
window.setTimeout(animation, 2000); window.setTimeout(animation, 2000);
let darkBoxVisible = false;
window.addEventListener('load', (event) => {
let images = document.querySelectorAll("img");
if(images !== null && images !== undefined && images.length > 0) {
images.forEach(function(img) {
img.addEventListener('click', (evt) => {
showDarkbox(img.src);
});
});
}
});
function showDarkbox(url) {
if(!darkBoxVisible) {
let x = (window.innerWidth - 1280) / 2;
let y = window.scrollY + 50;
// Create the darkBox
var div = document.createElement("div");
div.id = "darkbox";
var tmp = url;
tmp = tmp.replace("thumbnails/", "");
tmp= tmp.trim();
div.innerHTML = '<img class="darkboximg" src="'+tmp+'" />';
document.body.appendChild(div);
let box = document.getElementById("darkbox");
box.style.left = x.toString()+"px";
box.style.top = y.toString()+"px";
box.style.height = 'auto';
box.addEventListener('click', (event) => {
// Remove it
let element = document.getElementById("darkbox");
element.parentNode.removeChild(element);
darkBoxVisible = false;
})
darkBoxVisible = true;
} else {
// Remove it
let element = document.getElementById("darkbox");
element.parentNode.removeChild(element);
darkBoxVisible = false;
}
}

View File

@ -1,4 +1,3 @@
#tada { #tada {
text-align: center; text-align: center;
text-decoration: none; text-decoration: none;
@ -150,3 +149,66 @@
/* ######### Animations ######### */ /* ######### Animations ######### */
#darkbox { width:1280px;
height:720px;
position:absolute;
top:0;
left:0;
background-color:#333;
overflow: hidden;
text-align:center;
margin-top: 7%;
}
.darkboximg { padding:0; max-width: 1216px; max-height: 684px;}
#gallery {
line-height:0;
-webkit-column-count:5;
-webkit-column-gap:5px;
-moz-column-count:5;
-moz-column-gap:5px;
column-count:5;
column-gap:5px;
margin-top:2rem;
}
#gallery img {
width: 100% !important;
height: auto !important;
margin-bottom:5px;
filter: grayscale(100%);
transition: filter 1s;
}
#gallery img:hover {
filter:none;
}
@media (max-width: 1200px) {
#gallery {
-moz-column-count: 4;
-webkit-column-count: 4;
column-count: 4;
}
}
@media (max-width: 1000px) {
#gallery {
-moz-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
}
}
@media (max-width: 800px) {
#gallery {
-moz-column-count: 2;
-webkit-column-count: 2;
column-count: 2;
}
}
@media (max-width: 400px) {
#gallery {
-moz-column-count: 1;
-webkit-column-count: 1;
column-count: 1;
}
}

View File

@ -33,9 +33,9 @@
<div class="masthead clearfix"> <div class="masthead clearfix">
<div class="inner"> <div class="inner">
<h3 class="masthead-brand">MapagePerso</h3> <h3 class="masthead-brand">Pywallter</h3>
<ul class="nav masthead-nav"> <ul class="nav masthead-nav">
<li class="active"><a href="/upload/"></a></li> <li class="active"><a href="/filesupload/"></a></li>
<li><a href="#">Inscription</a></li> <li><a href="#">Inscription</a></li>
<li><a href="#">Contact</a></li> <li><a href="#">Contact</a></li>
</ul> </ul>
@ -44,7 +44,8 @@
<div class="inner cover"> <div class="inner cover">
<h1 class="cover-heading">Restez libres</h1> <h1 class="cover-heading">Restez libres</h1>
<p class="lead">Bienvenue sur Olala, hébergeur de fichier libre basé sur Flask et hébergé sur une simple Orange Pi. Bientôt disponible, gallerie d'images, blog et d'autres. Site en construction permanente.</p> <p class="lead">Bienvenue sur Olala, hébergeur de fichier libre basé sur Flask et hébergé sur une simple petit ordinateur.
Bientôt disponible, gallerie d'images, blog et d'autres. Site en construction permanente.</p>
<br> <br>
<p class="lead"> <p class="lead">
<form method="POST" action="{{ url_for('loginlogout.login') }}"> <form method="POST" action="{{ url_for('loginlogout.login') }}">

View File

@ -16,7 +16,7 @@
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="active"><a href="/blog/"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li> <li class="active"><a href="/blog/"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li> <li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li> <li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li> <li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li> <li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>

View File

@ -16,7 +16,7 @@
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li> <li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li> <li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li> <li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
<li class="active"><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li> <li class="active"><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li> <li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
@ -52,11 +52,10 @@
{% if fichiers %} {% if fichiers %}
<div id="images"> <div id="gallery">
{% for fich in fichiers %} {% for image in fichiers %}
<a href="#"><img src="/static/thumbnails/{{ fich }}" class="img-rounded" alt=""/></a> <img src="/myfiles/images/thumbnails/{{ image }}" class="img-rounded" alt=""/>
<!--<a href="{{ url_for('remove', nom=fich) }}"><button type="button" class="btn btn-sm btn-danger">Delete</button></a>-->
{% endfor %} {% endfor %}

View File

@ -12,7 +12,7 @@
<div class="inner"> <div class="inner">
<h3 class="masthead-brand">OpenBlogStock</h3> <h3 class="masthead-brand">OpenBlogStock</h3>
<ul class="nav masthead-nav"> <ul class="nav masthead-nav">
<li><a href="/upload/">Login</a></li> <li><a href="/filesupload/">Login</a></li>
<li class="active"><a href="/inscription/">Inscription</a></li> <li class="active"><a href="/inscription/">Inscription</a></li>
<li><a href="#">Contact</a></li> <li><a href="#">Contact</a></li>
</ul> </ul>

View File

@ -12,7 +12,7 @@
<div class="inner"> <div class="inner">
<h3 class="masthead-brand">OpenBlogSotck</h3> <h3 class="masthead-brand">OpenBlogSotck</h3>
<ul class="nav masthead-nav"> <ul class="nav masthead-nav">
<li class="active"><a href="/upload/">Login</a></li> <li class="active"><a href="/uploadfiles/">Login</a></li>
<li><a href="/inscription/">Inscription</a></li> <li><a href="/inscription/">Inscription</a></li>
<li><a href="#">Contact</a></li> <li><a href="#">Contact</a></li>
</ul> </ul>

View File

@ -16,7 +16,7 @@
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li> <li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li> <li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li> <li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li> <li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
<li class="active"><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li> <li class="active"><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>

View File

@ -16,7 +16,7 @@
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li> <li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li> <li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li> <li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li> <li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li> <li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>

View File

@ -16,7 +16,7 @@
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li> <li><a href="/blog"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
<li><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li> <li><a href="/filesupload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
<li class="active"><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li> <li class="active"><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li> <li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li> <li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
@ -50,23 +50,23 @@
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
<th>Fichier(s) <span class="badge">{{ i }}</span></th> <th>Fichier(s) <span class="badge">{{ i }}</span></th>
<th>Taille (en octets)</th> <th>Taille (en octets)</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% if listeFichiers %} {% if listeFichiers %}
{% for fich in listeFichiers %} {% for fichier in listeFichiers %}
<tr> <tr>
<td>{{ fich[0] }}</td> <td>{{ fichier[0] }}</td>
<td><a href="{{ url_for('download', nom=fich[1]) }}">{{fich[1]}}</a></td> <td><a href="/myfiles/{{ fichier[1] }}">{{ fichier[1] }}</a></td>
<td>{{ fich[2] }}</td> <td>{{ fichier[2] }}</td>
<td><a href="{{ url_for('remove', nom=fich[1]) }}"><button type="button" class="btn btn-sm btn-danger">Supprimer</button></a></td> <td><a href="{{ url_for('remove', nom=fichier[1]) }}"><button type="button" class="btn btn-sm btn-danger">Supprimer</button></a></td>
</tr> </tr>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
</tbody> </tbody>
</table> </table>
</div> </div>

View File

@ -16,7 +16,7 @@
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li><a href="/blog/"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li> <li><a href="/blog/"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Blog</a></li>
<li class="active"><a href="/upload/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li> <li class="active"><a href="/uploadfiles/"><span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span> Upload</a></li>
<li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li> <li><a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a></li>
<li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li> <li><a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a></li>
<li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li> <li><a href="/logs/"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> Logs</a></li>
@ -60,19 +60,18 @@
<div class="col-sm-3"></div> <div class="col-sm-3"></div>
<div class="col-sm-6"> <div class="col-sm-6">
<br /> <br />
<div class="well">Vous pouvez "uploader" ici des fichiers afin de les sauvegarder ou de les rendre accessibles à quelqu'un d'autre. Ils seront par la suite disponibles en téléchargement dans notre rubrique <a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a>. Les images envoyées, quand à elles se retrouveront directement dans la <a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a>.<br>Ayez bien conscience que ce site est une expérience est qu'il est indispensable d'avoir une sauvegarde de tous vos fichiers. Nous ne pourrons, en aucun cas, être tenu responsable de la perte de vos données. Merci de votre compréhension.</div> <div class="well">Ici, vous pouvez envoyer des fichiers afin de les sauvegarder ou de les rendre accessibles à quelqu'un d'autre. Ils seront par la suite disponibles en téléchargement dans notre rubrique <a href="/view/"><span class="glyphicon glyphicon-cloud-download" aria-hidden="true"></span> Fichiers</a>. Les images envoyées, quand à elles se retrouveront directement dans la <a href="/gallery/"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Gallerie</a>.<br>Ayez bien conscience que ce site est une expérience est qu'il est indispensable d'avoir une sauvegarde de tous vos fichiers. Nous ne pourrons, en aucun cas, être tenu responsable de la perte de vos données. Merci de votre compréhension.</div>
<br /> <br />
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Choisissez un ou plusieurs fichiers à uploader</h3> <h3 class="panel-title">Choisissez un ou plusieurs fichiers à uploader</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<!--<div class="form-group">-->
<!--<div class="form-group">-->
<form action="" method="post" enctype="multipart/form-data"> <form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fic"id="fic" multiple> <input type="file" name="fic"id="fic" multiple>
<br> <br>
<button type="submit" id="tada" class="btn btn btn-success">Upload !</button> <button type="submit" id="tada" class="btn btn btn-success">Upload !</button>
</form> </form>
<!--</div>--> <!--</div>-->

View File

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape, flash, abort from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape, flash, abort
from werkzeug import secure_filename from werkzeug.utils import secure_filename
from wand.image import Image from PIL import Image
import time import time
import sqlite3 import sqlite3
import os import os
@ -15,8 +15,8 @@ filesupload = Blueprint('filesupload', __name__, template_folder='templates')
DOSSIER_PERSO='users/' DOSSIER_PERSO='users/'
extensionimg = {'.jpg', '.JPG', '.png', '.PNG', '.gif', '.GIF', '.bmp', '.BMP', '.jpeg', '.JPEG' } extensionimg = {'.jpg', '.JPG', '.png', '.PNG', '.gif', '.GIF', '.bmp', '.BMP', '.jpeg', '.JPEG' }
@filesupload.route( '/upload/', methods=['GET', 'POST']) @filesupload.route( '/filesupload/', methods=['GET', 'POST'])
def upload(): def uploadfiles():
if 'username' in session : if 'username' in session :
UTILISATEUR='%s'% escape(session['username']) UTILISATEUR='%s'% escape(session['username'])
if request.method == 'POST' : if request.method == 'POST' :
@ -28,33 +28,33 @@ def upload():
flash(u'Fichier déjà existant, merci de spécifier un autre nom de fichier', 'error') flash(u'Fichier déjà existant, merci de spécifier un autre nom de fichier', 'error')
else: else:
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom): if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom):
flash(u'Image déjà existante, merci de spécifier un autre nom de fichier', 'error') flash(u'Image déjà existante, merci de spécifier un autre nom de fichier', 'error')
else: else:
file, ext = os.path.splitext(nom) file, ext = os.path.splitext(nom)
if ext in extensionimg : if ext in extensionimg :
f.save(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom) f.save(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom)
image=DOSSIER_PERSO + UTILISATEUR + '/images/' + nom image=DOSSIER_PERSO + UTILISATEUR + '/images/' + nom
with Image(filename=image) as img : with Image.open(image) as img :
img.transform(resize='x100') img.thumbnail((300,300))
img.save(filename=DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom) img.save( DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom )
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom) : if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom) :
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom): if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/images/thumbnails/' + nom):
TIME=time.strftime("%A %d %B %Y %H:%M:%S") TIME=time.strftime("%A %d %B %Y %H:%M:%S")
IP=request.environ['REMOTE_ADDR'] IP=request.environ['REMOTE_ADDR']
CLIENT_PLATFORM=request.headers.get('User-Agent') CLIENT_PLATFORM=request.headers.get('User-Agent')
LOG=open("log.txt", "a") LOG=open("log.txt", "a")
LOG.write (TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n') LOG.write (TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n')
LOG.close() LOG.close()
flash(u'Image envoyée et traitée avec succés', 'succes') flash(u'Image envoyée et traitée avec succés', 'succes')
else: else:
flash(u'Échec lors du traitement de l\'image', 'error') flash(u'Échec lors du traitement de l\'image', 'error')
return redirect(url_for('filesupload.upload')) return redirect(url_for('filesupload.uploadfiles'))
else: else:
flash(u'Éches lors de l\'envoi de l\'image', 'error') flash(u'Éches lors de l\'envoi de l\'image', 'error')
return redirect(url_for('filesupload.upload')) return redirect(url_for('filesupload.uploadfiles'))
else: else:
f.save(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom) f.save(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom)
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom) : if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom) :
TIME=time.strftime("%A %d %B %Y %H:%M:%S") TIME=time.strftime("%A %d %B %Y %H:%M:%S")
IP=request.environ['REMOTE_ADDR'] IP=request.environ['REMOTE_ADDR']
CLIENT_PLATFORM=request.headers.get('User-Agent') CLIENT_PLATFORM=request.headers.get('User-Agent')
@ -63,17 +63,18 @@ def upload():
LOG.close() # Ferme log.txt LOG.close() # Ferme log.txt
flash(u'Fichier envoyé avec succés', 'succes') flash(u'Fichier envoyé avec succés', 'succes')
#return redirect(url_for('filesupload.upload')) #return redirect(url_for('filesupload.upload'))
else: else:
return redirect(url_for('filesupload.upload')) return redirect(url_for('filesupload.uploadfiles'))
else: else:
flash(u'Error : Vous avez oublié le fichier !', 'error') flash(u'Error : Vous avez oublié le fichier !', 'error')
return redirect(url_for('filesupload.upload')) return redirect(url_for('filesupload.uploadfiles'))
resp = make_response(render_template('up_up.html')) resp = make_response(render_template('up_up.html'))
resp.set_cookie('username', session['username']) resp.set_cookie('username', session['username'])
return resp return resp
else : else :
return redirect(url_for('loginlogout.login', _external=True)) return redirect(url_for('loginlogout.login', _external=True))
@filesupload.route('/view/') @filesupload.route('/view/')
def list(): def list():
if 'username' in session : if 'username' in session :
@ -89,6 +90,6 @@ def list():
return render_template('up_list.html',size=size, i=i, listeFichiers=listeFichiers) return render_template('up_list.html',size=size, i=i, listeFichiers=listeFichiers)
else : else :
flash(u'Aucun fichier uploadé ! Redirection vers Upload', 'error') flash(u'Aucun fichier uploadé ! Redirection vers Upload', 'error')
return redirect(url_for('filesupload.upload', external=True)) return redirect(url_for('filesupload.uploadfiles', external=True))
else : else :
return redirect(url_for('loginlogout.login', _external=True)) return redirect(url_for('loginlogout.login', _external=True))

View File

@ -1,4 +1,3 @@
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape
from flask_bcrypt import Bcrypt from flask_bcrypt import Bcrypt
import sqlite3 import sqlite3
@ -15,7 +14,7 @@ inscription = Blueprint('inscription', __name__, template_folder='templates')
@inscription.route( '/inscription/', methods=['GET','POST'] ) @inscription.route( '/inscription/', methods=['GET','POST'] )
def signin() : def signin() :
if 'username' in session : if 'username' in session :
return redirect(url_for('upload')) return redirect(url_for('filesupload'))
else : else :
if request.method == 'POST' : if request.method == 'POST' :
conn = sqlite3.connect('base.db') # Connexion à la base de donnée conn = sqlite3.connect('base.db') # Connexion à la base de donnée

View File

@ -10,7 +10,7 @@ loginlogout = Blueprint('loginlogout', __name__, template_folder='templates')
@loginlogout.route( '/login/', methods=['GET','POST'] ) @loginlogout.route( '/login/', methods=['GET','POST'] )
def login() : def login() :
if 'username' in session : if 'username' in session :
return redirect(url_for('filesupload.upload', _external=True)) return redirect(url_for('filesupload.uploadfiles', _external=True))
else : else :
if request.method == 'POST' : if request.method == 'POST' :
conn = sqlite3.connect('base.db') # Connexion à la base de donnée conn = sqlite3.connect('base.db') # Connexion à la base de donnée
@ -22,7 +22,7 @@ def login() :
for i in users: for i in users:
if i[0] == request.form['user'] and bcrypt.check_password_hash(i[1], password) is True: if i[0] == request.form['user'] and bcrypt.check_password_hash(i[1], password) is True:
session['username'] = request.form['user'] session['username'] = request.form['user']
return redirect(url_for('filesupload.upload', _external=True)) return redirect(url_for('filesupload.uploadfiles', _external=True))
return redirect(url_for('loginlogout.login', _external=True)) return redirect(url_for('loginlogout.login', _external=True))
else: else:
return render_template('login.html') return render_template('login.html')
@ -31,4 +31,3 @@ def login() :
def logout(): def logout():
session.pop('username', None) # Supprimer username de la session s'il s'y trouve session.pop('username', None) # Supprimer username de la session s'il s'y trouve
return redirect(url_for('index')) return redirect(url_for('index'))

View File

@ -1,5 +1,5 @@
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape, flash, abort from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, escape, flash, abort
from werkzeug import secure_filename from werkzeug.utils import secure_filename
from wand.image import Image from wand.image import Image
import time import time
import sqlite3 import sqlite3