You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
TacticalWatermarks/app/views.py

265 lines
8.2 KiB
Python

from app import app
import flask
from flask import Blueprint, render_template, request, redirect, url_for, flash
import datetime
import os
from werkzeug.utils import secure_filename
from werkzeug.datastructures import ImmutableOrderedMultiDict
import collections
from collections import OrderedDict
import dataset
import sys
import time
app.secret_key = 'PiracyIsCool'
now = datetime.datetime.now()
@app.route('/test', methods=['GET'])
def test():
index = url_for('index')
about = url_for('about')
links = f"<a href='{index}'>index</a><br/><a href='{about}'>about</a>"
return links
@app.route('/', methods=['GET'])
def index():
return render_template("public/index.html")
@app.route("/about")
def about():
return render_template("public/about.html")
# UPLOAD FILES
# THIS SHOULD BE IN CONFIG
app.config["BOOK_UPLOAD_DEWATERMARK"] = "/var/www/TacticalApp/app/static/dewatermark"
app.config["BOOK_UPLOAD_REPUBLISH"] = "/var/www/TacticalApp/app/static/republish"
app.config["BOOK_REQUEST"] = "/var/www/TacticalApp/app/static/request"
app.config["ALLOWED_BOOK_EXTENSIONS"] = ["PDF", "EPUB"]
#app.config["MAX_BOOK_FILESIZE"] = 4000 * 1024 * 1024
def allowed_book(filename):
if not "." in filename:
return False
ext = filename.rsplit(".", 1)[1]
if ext.upper() in app.config["ALLOWED_BOOK_EXTENSIONS"]:
return True
else:
return False
#def allowed_book_filesize(filesize):
# if int(filesize) <= app.config["MAX_BOOK_FILESIZE"]:
# return True
# else:
# return False
#Request a book
#REQUEST IN DEWATERMARK
# Link database
db = dataset.connect('sqlite:///file.db?check_same_thread=False')
# create table
table = db['requested']
@app.route('/request_form', methods=['GET'])
def request_form():
return render_template('public/request_form.html')
# from GET /bookrequest render request.html
@app.route('/uploadbook', methods=['GET'])
def bookrequest():
books = table.find(order_by='-id')
return render_template('public/upload_book.html', books=books)
# from POST /submit store data in the database and forward to the request
@app.route('/submit', methods=['POST'])
def submit():
book = dict(title=request.form['title'], author=request.form['author'], publisher=request.form['publisher'], year=request.form['year'], extention=request.form['extention'])
table.insert(book)
return redirect(url_for('index'))
#Request a book
#REQUEST IN REPUBLISH
# from GET /bookrequest render request.html
@app.route('/republish', methods=['GET'])
def bookrepublish():
books = table.find(order_by='-id')
return render_template('public/republish.html', books=books)
#Terms & Comment
# create table for comments
table_comment = db['commented']
@app.route('/write_comment', methods=['GET'])
def write_comment():
return render_template('public/write_comment.html')
# from GET /write_comment render terms.html
@app.route('/terms', methods=['GET'])
def terms():
comments = table_comment.find(order_by='-id')
return render_template('public/terms.html', comments=comments)
# from POST /submit store data in the database and forward to the terms
@app.route('/submitcomment', methods=['POST'])
def submitcomment():
comment = dict(name=request.form['name'], commenting=request.form['commenting'])
table_comment.insert(comment)
return redirect(url_for('terms'))
#Route to Upload, Dewatermark, and republish
@app.route("/uploadbook", methods=["GET", "POST"])
def uploadbook():
if request.method == "POST":
if request.files:
#request filesize
#if not allowed_book_filesize(request.cookies.get("filesize")):
# print("File exceeded maximum size")
# return redirect(request.url)
#demand checkbox
if not request.form.get('match-with-pairs'):
print("You should agree with the T&C")
return redirect(request.url)
book = request.files["book"]
# confirm book has a name
if book.filename == "":
print("Book must have a filename")
return redirect(request.url)
# confirm book is the desired format
if not allowed_book(book.filename):
print("That book extention is not allowed")
return redirect(request.url)
#create a new secure filename
else:
filename = secure_filename(book.filename)
basename, ext = os.path.splitext(filename)
folder = os.path.join(app.config["BOOK_UPLOAD_DEWATERMARK"], basename)
try:
os.makedirs(folder)
except FileExistsError:
pass
bookpath = os.path.join(folder, filename)
x=2
while os.path.exists(bookpath):
bookpath = os.path.join(folder, basename + "_" + str(x) + ext)
x+=1
if request.method == "POST":
req = request.form
name = req["name"]
scan = req["scan"]
time = req["time"]
source = req["source"]
anecdote = req["anecdote"]
fieldnames = [name, scan, time, source, anecdote]
print(fieldnames)
with open((os.path.join(folder, basename) + ".txt"), 'w') as f:
f.write(str(fieldnames))
book.save(bookpath)
print("Book saved")
# flash("Book saved")
return redirect(request.url)
return render_template("public/upload_book.html")
#Route to Upload and republish
@app.route("/republish", methods=["GET", "POST"])
def republish():
if request.method == "POST":
if request.files:
#request filesize
#if not allowed_book_filesize(request.cookies.get("filesize")):
# print("File exceeded maximum size")
# return redirect(request.url)
#demand checkbox
if not request.form.get('match-with-pairs'):
print("You should agree with the T&C")
return redirect(request.url)
file = request.files["book"]
# confirm file has a name
if file.filename == "":
print("Book must have a filename")
return redirect(request.url)
# confirm book is the desired format
if not allowed_book(file.filename):
print("That book extention is not allowed")
return redirect(request.url)
#create a new secure filename
else:
filename = secure_filename(file.filename)
basename, ext = os.path.splitext(filename)
folder = os.path.join(app.config["BOOK_UPLOAD_REPUBLISH"], basename)
try:
os.makedirs(folder)
except FileExistsError:
pass
filepath = os.path.join(folder, filename)
x=2
while os.path.exists(filepath):
filepath = os.path.join(folder, basename + "_" + str(x) + ext)
x+=1
if request.method == "POST":
req = request.form
name = req["name"]
scan = req["scan"]
time = req["time"]
source = req["source"]
anecdote = req["anecdote"]
fieldnames = [name, scan, time, source, anecdote]
print(fieldnames)
with open((os.path.join(folder, basename) + ".txt"), 'w') as f:
f.write(str(fieldnames))
file.save(filepath)
print("file saved")
# flash("file saved")
return redirect(request.url)
return render_template("public/republish.html")
@app.errorhandler(404)
def not_found(e):
return render_template("public/404.html")
@app.errorhandler(500)
def not_found(e):
return render_template("public/500.html")
# TOR BROWSER
@app.route("/covers")
def covers():
covers = os.listdir(os.path.join(app.static_folder, "covers"))
return render_template("public/covers.html", covers=covers)