141 lines
7.1 KiB
Python
141 lines
7.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, flash, abort, send_file, send_from_directory
|
|
from werkzeug.utils import secure_filename
|
|
from markupsafe import escape
|
|
from PIL import Image
|
|
import time
|
|
import sqlite3
|
|
import os
|
|
|
|
|
|
filesupload = Blueprint('filesupload', __name__, template_folder='templates')
|
|
|
|
app = Flask( 'pywallter' )
|
|
app.config.from_pyfile('config.py')
|
|
|
|
|
|
#### Variables ####################################################################################
|
|
|
|
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'])
|
|
def uploadfiles():
|
|
if 'username' in session :
|
|
UTILISATEUR='%s'% escape(session['username'])
|
|
if request.method == 'POST' :
|
|
files = request.files.getlist('fic')
|
|
for f in files :
|
|
if f: # On vérifie qu'un fichier a bien été envoyé
|
|
nom = secure_filename(f.filename)
|
|
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom):
|
|
flash(u'Fichier déjà existant, merci de spécifier un autre nom de fichier', 'error')
|
|
else:
|
|
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')
|
|
else:
|
|
file, ext = os.path.splitext(nom)
|
|
if ext in extensionimg :
|
|
f.save(DOSSIER_PERSO + UTILISATEUR + '/images/' + nom)
|
|
image=DOSSIER_PERSO + UTILISATEUR + '/images/' + nom
|
|
with Image.open(image) as img :
|
|
img.thumbnail((300,300))
|
|
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/thumbnails/' + nom):
|
|
TIME=time.strftime("%A %d %B %Y %H:%M:%S")
|
|
IP=request.environ['REMOTE_ADDR']
|
|
CLIENT_PLATFORM=request.headers.get('User-Agent')
|
|
log_file=os.path.join(DOSSIER_PERSO, UTILISATEUR, "log.txt")
|
|
LOG=open(log_file, "a")
|
|
LOG.write (TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n')
|
|
LOG.close()
|
|
flash(u'Image envoyée et traitée avec succés', 'succes')
|
|
else:
|
|
flash(u'Échec lors du traitement de l\'image', 'error')
|
|
return redirect(url_for('filesupload.uploadfiles'))
|
|
else:
|
|
flash(u'Éches lors de l\'envoi de l\'image', 'error')
|
|
return redirect(url_for('filesupload.uploadfiles'))
|
|
else:
|
|
f.save(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom)
|
|
if os.path.isfile(DOSSIER_PERSO + UTILISATEUR + '/files/' + nom) :
|
|
TIME=time.strftime("%A %d %B %Y %H:%M:%S")
|
|
IP=request.environ['REMOTE_ADDR']
|
|
CLIENT_PLATFORM=request.headers.get('User-Agent')
|
|
LOG=open("log.txt", "a") # Ouvre fichier log.txt
|
|
LOG.write (TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n') # Écrit dans log
|
|
LOG.close() # Ferme log.txt
|
|
flash(u'Fichier envoyé avec succés', 'succes')
|
|
#return redirect(url_for('filesupload.upload'))
|
|
else:
|
|
return redirect(url_for('filesupload.uploadfiles'))
|
|
else:
|
|
flash(u'Error : Vous avez oublié le fichier !', 'error')
|
|
return redirect(url_for('filesupload.uploadfiles'))
|
|
resp = make_response(render_template('up_up.html', section="Upload"))
|
|
resp.set_cookie('username', session['username'])
|
|
return resp
|
|
else :
|
|
return redirect(BASE_URL, code=401)
|
|
|
|
|
|
@filesupload.route('/view/')
|
|
def list():
|
|
if 'username' in session :
|
|
UTILISATEUR='%s'% escape(session['username'])
|
|
i = 0
|
|
fichiers = os.listdir(DOSSIER_PERSO + UTILISATEUR + '/files/')
|
|
listeFichiers = []
|
|
if fichiers:
|
|
for fich in fichiers:
|
|
i += 1
|
|
size = os.path.getsize(DOSSIER_PERSO + UTILISATEUR + '/files/' + fich) # size = taille des fichiers
|
|
listeFichiers.append([i, fich, size]) # On implémente la listeFichiers avec le num le ficier et sa taille
|
|
return render_template('up_list.html',
|
|
section="Files",
|
|
size=size,
|
|
i=i,
|
|
listeFichiers=listeFichiers)
|
|
else :
|
|
flash(u'Aucun fichier uploadé ! Redirection vers Upload', 'error')
|
|
return redirect(url_for('filesupload.uploadfiles'))
|
|
else :
|
|
return redirect(BASE_URL, code=401)
|
|
|
|
@filesupload.route('/myfiles/<filename>')
|
|
def myfiles(filename):
|
|
if 'username' in session :
|
|
UTILISATEUR='%s' % escape(session['username'])
|
|
return send_from_directory(
|
|
os.path.join(DOSSIER_PERSO, UTILISATEUR, 'files'), filename )
|
|
else :
|
|
return redirect(BASE_URL, code=401)
|
|
|
|
@filesupload.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(BASE_URL, code=401)
|