-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscraps.py
126 lines (100 loc) · 3.84 KB
/
scraps.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import os
import datetime
from app.controllers.user_controller import *
from app.controllers.crawl_controller import *
from app.controllers.admin_controller import *
from flask import Flask, request, redirect, url_for, render_template, session, g, flash, send_from_directory
from flask_wtf.csrf import CSRFProtect
app = Flask("scraps")
app.config["FLASK_APP"] = os.environ.get("FLASK_APP")
app.config["FLASK_ENV"] = os.environ.get("FLASK_ENV")
app.config["SECRET_KEY"] = os.environ.get("SECRET_KEY")
app.config["PERMANENT_SESSION_LIFETIME"] = datetime.timedelta(minutes=30)
csrf = CSRFProtect(app)
time = datetime.datetime.now()
current_year = time.year
@app.before_request
def check_csrf():
csrf.protect()
@app.before_request
def set_app_globals():
g.year = current_year
@app.route("/")
@csrf.exempt
def show_app_index():
if 'user' in session and 'is_logged_in' in session['user']:
return redirect(url_for('crawl'))
else:
return render_template("index.jinja.html")
@app.route("/users", methods=["GET", "POST"])
def register():
if request.method == "POST":
if request.form["user-email"] and request.form["user-password"]:
return user_register(request.form)
else:
flash("Invalid form submission - try again", 'danger')
return render_template("register.jinja.html")
else:
return render_template("register.jinja.html")
@app.route("/users/<int:id>", methods=["GET", "POST"])
def users(id):
if 'user' not in session:
return redirect(url_for('login'))
if request.method == "POST":
if request.form['action'] == "_update":
return render_template("user-update.jinja.html")
elif request.form['action'] == "_patch" and request.form['user-password']:
return user_update(session['user']['id'], request.form)
elif request.form['action'] == "_delete":
return user_delete(session['user']['id'])
else:
flash("invalid request", "danger")
return render_template("user.jinja.html")
else:
user_crawls = get_all_user_crawls(session['user']['id'])
return render_template("user.jinja.html", crawls=user_crawls)
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
if request.form["user-email"] and request.form["user-password"]:
return user_login(request.form)
else:
flash("Invalid login attempt", "danger")
return render_template("login.jinja.html")
else:
return render_template("login.jinja.html")
@app.route("/logout", methods=["GET"])
def logout():
return user_logout()
@app.route("/crawl", methods=["GET", "POST"])
def crawl():
if 'user' not in session:
return redirect(url_for('login'))
if request.method == "POST":
if request.is_json:
json = request.get_json(request)
return process_user_crawl_request(json)
else:
flash(
"that request wasn't quite what we were expecting. try using the form", "danger")
return render_template("crawl-form.jinja.html")
else:
return render_template("crawl-form.jinja.html")
@app.route('/public/<path:filename>', methods=["GET", "POST"])
def download(filename):
if 'user' not in session:
return {
"status": "failed",
"statusCode": 401,
"message": "not authorized"
}, 401
else:
return send_from_directory(directory="public/", filename=filename, as_attachment=True)
@app.route('/admin', methods=["GET", "POST"])
def admin():
if 'user' not in session or not session['user']['is_admin']:
flash(
"not authorized...", "danger")
return redirect(url_for('show_app_index'))
elif request.method == "GET":
return render_template("admin.jinja.html")