-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
161 lines (119 loc) · 4.48 KB
/
app.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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import os
from flask import Flask, flash, redirect, render_template, request, session, jsonify
from flask_session import Session
from werkzeug.security import check_password_hash, generate_password_hash
from datetime import datetime
from helpers import apology, login_required, loginCheck, registerNewUser, save_new_task, validate_task, get_user_tasks, delete_task, update_task_status
app = Flask(__name__)
# Ensure templates are auto-reloaded
app.config["TEMPLATES_AUTO_RELOAD"] = True
app.config["SECRET_KEY"] = "\xc8\x9cCr\x951\x8f\x8f\xe7\xe8\xbc\x8b"
# flask-session config
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
TASK_CATEGORIES = [
"Task",
"Appointment",
"Event",
"Note"
]
@app.route("/")
@login_required
def homepage():
"""Show the users current lists and tasks"""
tasks = get_user_tasks(session["user_id"][0])
return render_template("homepage.html", tasks=tasks)
@app.route("/login", methods=["GET", "POST"])
def login():
# forget any user_id
session.clear()
if request.method == "POST":
# user submitted the name and password
username = request.form.get("username").lower()
password = request.form.get("password")
# ensure the form inputs are not blank
if not username:
return apology(message="username entry is blank")
elif not password:
return apology(message="password entry is blank")
# ensure password and user are correct
checkedUser = loginCheck(username, password)
# if ok, log the session
if checkedUser != None:
# log the session
session["user_id"] = checkedUser
return redirect("/")
else:
return apology(message="username or password is incorrect")
else:
return render_template("login.html")
@app.route("/register", methods=["GET", "POST"])
def register():
if request.method == "POST":
# validate input name not empty
username = request.form.get("username").lower()
if not username:
return apology(message="user name is blank")
# validate password and confirmation are the same or not blank
password = request.form.get("password")
confirmation = request.form.get("confirmation")
if not password or not confirmation:
return apology(message="password fields are blank")
if password != confirmation:
return apology(message="passwords don't match")
# encrypt user password
passwordStore = generate_password_hash(password)
if registerNewUser(username, passwordStore):
return redirect("/")
return apology(message="user register failed")
return render_template("register.html")
@app.route("/logout")
def logout():
"""Log user out"""
# Forget any user_id
session.clear()
# Redirect user to login form
return redirect("/")
@app.route("/pomodoroTimer")
@login_required
def pomodoroTimer():
return render_template("pomodoroTimer.html")
@app.route("/newTask", methods=["GET", "POST"])
@login_required
def newTask():
# if POST add new task to db and return to /
if request.method == "POST":
task = {}
task['name'] = request.form.get("taskSubject")
task['date'] = request.form.get("taskDate")
task['time'] = request.form.get("taskTime")
task['location'] = request.form.get("taskLocation")
task['notes'] = request.form.get("taskNotes")
task['category'] = request.form.get("taskCategory")
if validate_task(task):
if save_new_task(task):
return redirect("/")
# return to home
return apology("Failed to save")
return apology(message="task not valid, try again")
# if GET render the form for creating a new task
return render_template("newTask.html", task_categories=TASK_CATEGORIES)
@app.route("/task_handler", methods=["DELETE", "PUT"])
@login_required
def task_handler():
if request.method == "DELETE":
req = request.get_json()
id_delete = req["task_id"]
if delete_task(id_delete):
return "OK"
else:
return "delete: failed"
elif request.method == "PUT":
req = request.get_json()
id_done_task = req["task_id"]
if update_task_status(id_done_task):
return "OK"
else:
return "update: failed"
return "route only for delete or put requests"