Dont store cookies + iCal refresh
This commit is contained in:
109
app.py
109
app.py
@ -1,59 +1,21 @@
|
||||
#!/usr/bin/env python3.6
|
||||
from flask import Flask
|
||||
from flask import Flask, make_response
|
||||
from flask import render_template, url_for, send_from_directory, redirect, request, send_file
|
||||
from flask_login import login_user, login_required, current_user, LoginManager, UserMixin, logout_user
|
||||
from flask_login import login_user, login_required, current_user, LoginManager, UserMixin, logout_user, login_manager
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from talisman import Talisman
|
||||
import hashlib
|
||||
import datetime
|
||||
import time
|
||||
|
||||
import dualisauth
|
||||
import fetchRAPLA
|
||||
import requesthelpers
|
||||
from fetchRAPLA import *
|
||||
from get_mysql import get_mysql
|
||||
from parseICAL import getWeek
|
||||
|
||||
|
||||
def create():
|
||||
app = Flask(__name__)
|
||||
dbpw = get_mysql()[1]
|
||||
dbun = get_mysql()[0]
|
||||
|
||||
app.config['SECRET_KEY'] = 'SECRET_KEY_GOES_HERE'
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://' + dbun + ':' + dbpw + '@localhost/paulmrtn_DUALHUB'
|
||||
db.init_app(app)
|
||||
|
||||
login_manager = LoginManager()
|
||||
login_manager.init_app(app)
|
||||
login_manager.login_view = "login"
|
||||
|
||||
@login_manager.user_loader
|
||||
def load_user(uid: int):
|
||||
return User.query.filter_by(id=uid).first()
|
||||
|
||||
return app
|
||||
|
||||
|
||||
db = SQLAlchemy()
|
||||
app = create()
|
||||
Talisman(app)
|
||||
|
||||
|
||||
class User(UserMixin, db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
email = db.Column(db.String(255), unique=True)
|
||||
password = db.Column(db.String(255))
|
||||
name = db.Column(db.String(255))
|
||||
kurs = db.Column(db.String(15))
|
||||
|
||||
|
||||
class Dualis(db.Model):
|
||||
token = db.Column(db.String(255), unique=True)
|
||||
uid = db.Column(db.Integer, primary_key=True)
|
||||
token_created = db.Column(db.Integer)
|
||||
result_lists = db.Column(db.String(255))
|
||||
cookie = db.Column(db.String(255))
|
||||
from calendar_generation import getWeek
|
||||
from init import *
|
||||
|
||||
|
||||
@app.route("/")
|
||||
@ -77,7 +39,8 @@ def getKurs():
|
||||
if d:
|
||||
e = False
|
||||
if not current_user.kurs:
|
||||
kurs = dualisauth.getKurs(d.token, d.cookie)
|
||||
cookie = request.cookies.get("cnsc")
|
||||
kurs = dualisauth.getKurs(d.token, cookie)
|
||||
if kurs != 0:
|
||||
current_user.kurs = kurs
|
||||
db.session.commit()
|
||||
@ -136,13 +99,40 @@ def getRapla():
|
||||
@login_required
|
||||
@app.route("/backendpoc/plan", methods=["GET"])
|
||||
def displayRapla():
|
||||
week = request.args.get("week")
|
||||
if week:
|
||||
week = datetime.datetime.strptime(week, "%Y-%m-%d")
|
||||
else:
|
||||
week = "today"
|
||||
samstag = request.args.get("samstag")
|
||||
if not samstag:
|
||||
samstag = False
|
||||
events = getWeek("today", "rapla"+current_user.kurs+".ical", samstag)
|
||||
events = getWeek(week, fetchRAPLA.getIcal(current_user.kurs), samstag)
|
||||
return render_template("plan.html", events=events[0], eventdays=events[1])
|
||||
|
||||
|
||||
@app.route("/backendpoc/plan/<string:kurs>")
|
||||
def displayPlan(kurs):
|
||||
week = request.args.get("week")
|
||||
if week:
|
||||
week = datetime.datetime.strptime(week, "%Y-%m-%d")
|
||||
else:
|
||||
week = "today"
|
||||
try:
|
||||
if current_user.kurs == kurs.upper():
|
||||
return redirect(url_for("displayRapla"))
|
||||
except AttributeError:
|
||||
pass
|
||||
plan = fetchRAPLA.getIcal(kurs.upper())
|
||||
if plan:
|
||||
samstag = request.args.get("samstag")
|
||||
if not samstag:
|
||||
samstag = False
|
||||
events = getWeek(week, plan, samstag)
|
||||
return render_template("plan-anon.html", events=events[0], eventdays=events[1])
|
||||
else:
|
||||
return redirect(url_for("login"))
|
||||
|
||||
@app.route("/backendpoc/log-in")
|
||||
def login(code: int = None):
|
||||
if code:
|
||||
@ -156,19 +146,19 @@ def login_post():
|
||||
password = request.form.get("password")
|
||||
n = request.args.get("next")
|
||||
if n:
|
||||
success = redirect(n)
|
||||
success = make_response(redirect(n))
|
||||
else:
|
||||
success = redirect(url_for("getKurs"))
|
||||
success = make_response(redirect(url_for("getKurs")))
|
||||
|
||||
user = User.query.filter_by(email=email).first()
|
||||
|
||||
newcookie = ""
|
||||
if user:
|
||||
dualis = Dualis.query.filter_by(uid=user.id).first()
|
||||
if check_password_hash(user.password, password):
|
||||
if not dualis.token or not dualisauth.checkLifetime(dualis.token_created):
|
||||
new_token = dualisauth.checkUser(email, password)
|
||||
dualis.token = new_token[0]
|
||||
dualis.cookie = requesthelpers.getCookie(new_token[1].cookies)
|
||||
newcookie = requesthelpers.getCookie(new_token[1].cookies)
|
||||
dualis.token_created = time.time()
|
||||
db.session.commit()
|
||||
else:
|
||||
@ -178,12 +168,13 @@ def login_post():
|
||||
else:
|
||||
user.password = generate_password_hash(password, method="pbkdf2:sha256")
|
||||
dualis.token = t[0]
|
||||
dualis.cookie = requesthelpers.getCookie(t[1].cookies)
|
||||
newcookie = requesthelpers.getCookie(t[1].cookies)
|
||||
dualis.token_created = time.time()
|
||||
db.session.commit()
|
||||
login_user(user)
|
||||
if user.kurs:
|
||||
success = redirect(url_for("welcome"))
|
||||
success = make_response(redirect(url_for("welcome")))
|
||||
success.set_cookie("cnsc", newcookie)
|
||||
return success
|
||||
|
||||
t = dualisauth.checkUser(email, password)
|
||||
@ -201,23 +192,27 @@ def login_post():
|
||||
|
||||
cookie = requesthelpers.getCookie(t[1].cookies)
|
||||
|
||||
new_dualis = Dualis(uid=hashid, token=t[0], token_created=int(time.time()), cookie=cookie)
|
||||
|
||||
new_dualis = Dualis(uid=hashid, token=t[0], token_created=int(time.time()))
|
||||
db.session.add(new_dualis)
|
||||
db.session.commit()
|
||||
login_user(new_user)
|
||||
newcookie = cookie
|
||||
success.set_cookie("cnsc", newcookie)
|
||||
return success
|
||||
|
||||
|
||||
@app.route("/backendpoc/log-out")
|
||||
def logout():
|
||||
cookie = request.cookies.get("cnsc")
|
||||
dualis = Dualis.query.filter_by(uid=current_user.id).first()
|
||||
dualisauth.logOut(dualis.token, dualis.cookie)
|
||||
dualis.cookie = None
|
||||
dualisauth.logOut(dualis.token, cookie)
|
||||
dualis.token = None
|
||||
db.session.commit()
|
||||
logout_user()
|
||||
return redirect(url_for("login", code=1))
|
||||
red = make_response(redirect(url_for("login", code=1)))
|
||||
red.set_cookie("cnsc", "Logged out! Your temporary token "
|
||||
"on our server and the cookie on your device have been deleted.")
|
||||
return red
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user