# -*- 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 from shutil import move from tools.filesutils import getFileSizeMo filesupload = Blueprint('filesupload', __name__, template_folder='templates') app = Flask( 'pywallter' ) app.config.from_pyfile('config.py') #### Variables #################################################################################### DOSSIER_PERSO= app.config['DOSSIER_APP']+'/' DOSSIER_PUBLIC= app.config['DOSSIER_PUBLIC']+'/' 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 : user = '%s'% escape(session['username']) if request.method == 'POST' : files = request.files.getlist('fic') for f in files : nom = secure_filename(f.filename) if os.path.isfile(DOSSIER_PERSO + user + '/files/' + nom) or os.path.isfile(DOSSIER_PERSO + user + '/images/' + nom): flash(u'Un fichier avec le même nom existe déjà, 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 + user + '/images/' + nom) image = DOSSIER_PERSO + user + '/images/' + nom with Image.open(image) as img : img.thumbnail((300,300)) img.save( DOSSIER_PERSO + user + '/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, user, "log.txt") LOG=open(log_file, "a") LOG.write (TIME + ' - ' + IP + ' - ' + user + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n') LOG.close() flash(u'Image envoyée et traitée avec succés', 'succes') else: f.save(DOSSIER_PERSO + user + '/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 + ' - ' + user + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + nom + '\n') # Écrit dans log LOG.close() # Ferme log.txt flash(u'Fichier envoyé avec succés', 'succes') 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 : user = '%s'% escape(session['username']) files_public = os.listdir(DOSSIER_PUBLIC + user + '/files') files_private = os.listdir(DOSSIER_PERSO + user + '/files/') listFilesPublic = [] listFilesPrivate = [] nb_pv = 0 if files_private: for fich in files_private: nb_pv += 1 size = getFileSizeMo(DOSSIER_PERSO + user + '/files/' + fich) # size = taille des fichiers listFilesPrivate.append([nb_pv, fich, size]) # On implémente la listeFichiers avec le num le ficier et sa taille nb_pu = 0 if files_public: for fich in files_public: nb_pu += 1 size = getFileSizeMo(DOSSIER_PUBLIC + user + '/files/' + fich) # size = taille des fichiers listFilesPublic.append([nb_pu, fich, size]) return render_template('up_list.html', section="Files", size=size, username=user, nb_pv=nb_pv, nb_pu=nb_pu, listFilesPrivate=listFilesPrivate, listFilesPublic=listFilesPublic) else : return redirect(BASE_URL, code=401) @filesupload.route('/myfiles//') def myfiles(username, filename): if 'username' in session : user = '%s' % escape(session['username']) return send_from_directory( os.path.join(DOSSIER_PERSO, username, 'files'), filename ) else : return redirect(BASE_URL, code=401) @filesupload.route('/make_public/') def move_public(filename): if 'username' in session: user = '%s' % escape(session['username']) src = os.path.join(DOSSIER_PERSO, user, 'files', filename) dst = os.path.join(DOSSIER_PUBLIC, user, 'files/') move (src, dst) return redirect(url_for('filesupload.list', _external=True)) else: return redirect(BASE_URL, code=401) @filesupload.route('/make_private/') def move_private(filename): if 'username' in session: user = '%s' % escape(session['username']) src = os.path.join(DOSSIER_PUBLIC, user, 'files', filename) dst = os.path.join(DOSSIER_PERSO, user, 'files/') move (src, dst) return redirect(url_for('filesupload.list', _external=True)) else: return redirect(BASE_URL, code=401) @filesupload.route('/public//') def publicfiles(username, filename): return send_from_directory( os.path.join(DOSSIER_PUBLIC, username, 'files'), filename ) @filesupload.route('/remove_privateFile/') def remove_privateFile(filename): if 'username' in session : user = '%s' % escape(session['username']) filename = secure_filename(filename) try: os.remove(DOSSIER_PERSO + user + '/files/' + filename) # on le supprime except FileNotFoundError: flash(u'Fichier {filename} inexistant.'.format(filename=filename), 'error') return redirect(url_for('filesupload.list', _external=True)) else : return redirect(BASE_URL, code=401) @filesupload.route('/remove_privateImage/') def remove_privateImage(filename): if 'username' in session : user = '%s' % escape(session['username']) filename = secure_filename(filename) try: os.remove(DOSSIER_PERSO + user + '/images/thumbnails/' + filename) # on le supprime os.remove(DOSSIER_PERSO + user + '/images/' + filename) # on le supprime except FileNotFoundError: flash(u'Image {filename} inexistante.'.format(filename=filename), 'error') return redirect(url_for('gallery')) @filesupload.route('/remove_publicFile/') def remove_publicFile(filename): if 'username' in session : user = '%s' % escape(session['username']) filename = secure_filename(filename) try: os.remove(DOSSIER_PUBLIC + user + '/files/' + filename) # on le supprime except FileNotFoundError: flash(u'Fichier {filename} inexistant.'.format(filename=filename), 'error') return redirect(url_for('filesupload.list', _external=True)) else : return redirect(BASE_URL, code=401) @filesupload.route('/remove_publicImage/') def remove_publicImage(filename): if 'username' in session : user = '%s' % escape(session['username']) filename = secure_filename(filename) try: os.remove(DOSSIER_PUBLIC + user + '/images/thumbnails/' + filename) # on le supprime os.remove(DOSSIER_PUBLIC + user + '/images/' + filename) # on le supprime except FileNotFoundError: flash(u'Image {filename} inexistante.'.format(filename=filename), 'error') return redirect(url_for('gallery'))