86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
import tempfile
|
|
import os
|
|
from flask import (
|
|
Blueprint, flash, g, redirect, render_template, request, session, url_for
|
|
)
|
|
from werkzeug.utils import secure_filename
|
|
from auth import login_required
|
|
|
|
from config import CONFIG
|
|
from create_db import User, Card, get_session, get_engine
|
|
|
|
import nextcloud_client
|
|
import magic
|
|
|
|
bp = Blueprint('upload', __name__, url_prefix='/upload')
|
|
|
|
|
|
nc = nextcloud_client.Client('https://obzorje.kompot.si')
|
|
nc.login(CONFIG['NC_USER'],CONFIG['NC_PASSWORD'])
|
|
|
|
|
|
@bp.route("/", methods=["GET", "POST"])
|
|
def index():
|
|
username = session["username"]
|
|
return render_template("upload.html", username=username)
|
|
|
|
|
|
@bp.route('/uploader', methods = ('GET', 'POST'))
|
|
def upload_file():
|
|
|
|
user_id = session["user_id"]
|
|
username = session["username"]
|
|
|
|
if request.method == 'POST':
|
|
#@TODO ta forloop bi lahko flashal postopoma
|
|
for upload in request.files.getlist("file"):
|
|
filename = secure_filename(upload.filename)
|
|
# Is there really a file?
|
|
if not filename:
|
|
flash('There is no file. Try again?')
|
|
return render_template("upload.html", username=username)
|
|
|
|
#prevent duplicate filenames
|
|
Session = get_session()
|
|
with Session() as dbsession:
|
|
filename_exists = dbsession.query(Card).filter(Card.title == filename).first() != None
|
|
dbsession.close()
|
|
get_engine().dispose()
|
|
|
|
if filename_exists:
|
|
flash("Filename already in database, please rename if you want to upload: " + filename, 'error')
|
|
continue
|
|
|
|
script_path = os.path.dirname(os.path.abspath(__file__)) #where are we
|
|
temp_path = os.path.join(script_path, "temp") #where is the temp file
|
|
|
|
# a lot of stuff can wrong here and nobody may know
|
|
with tempfile.NamedTemporaryFile(dir=temp_path, delete=False) as fp:
|
|
fp.write(upload.stream.read())
|
|
path = fp.name
|
|
fp.close()
|
|
if magic.from_file(path, mime=True) == "application/pdf":
|
|
nc.put_file("/GIA CLOUD/" + filename, path)
|
|
#get public link
|
|
public_link = nc.share_file_with_link("/GIA CLOUD/" + filename).get_link()+"/download/"+filename
|
|
|
|
#add card
|
|
card = Card(title=filename, interest_rate=-1.0, owner_id=user_id, item_location=public_link, last_review=None, share_id=0)
|
|
flash(f"{filename} uploaded successfully")
|
|
|
|
Session = get_session()
|
|
with Session() as dbsession:
|
|
dbsession.add(card)
|
|
dbsession.commit()
|
|
dbsession.close()
|
|
get_engine().dispose()
|
|
|
|
else:
|
|
flash("Please insert a PDF file, support for other formats comming soon...")
|
|
#return render_template("upload.html", user_id=user_id, username=username)
|
|
|
|
os.remove(path)
|
|
|
|
|
|
return render_template("upload.html", user_id=user_id, username=username)
|