Timeout-Check + MERGE-Prep

This commit is contained in:
2023-12-11 14:37:23 +01:00
parent 081cb4aaa7
commit 6c143b5817
12 changed files with 249 additions and 23 deletions

View File

@ -2,6 +2,8 @@ import requests
import urllib.parse
import time
from bs4 import BeautifulSoup
from flask import redirect, url_for
from init import Dualis
headers = {
'Cookie': 'cnsc=0',
@ -15,6 +17,12 @@ url = "https://dualis.dhbw.de/scripts/mgrqispi.dll"
def checkUser(email: str, password: str):
"""
Erhält von Dualis den Token und Cookie für User.
:param email:
:param password:
:return (Token, Session):
"""
s = requests.Session()
fpw = urllib.parse.quote(password, safe='', encoding=None, errors=None)
fmail = urllib.parse.quote(email, safe='', encoding=None, errors=None)
@ -33,6 +41,13 @@ def checkUser(email: str, password: str):
def getKurs(token: int, cookie: str):
"""
Bestimmt aus der ersten Prüfung den Kursbezeichner des Users.
TODO: Umstellen auf Bezeichner INKL. Standort
:param token:
:param cookie:
:return Kurs-Bezeichner:
"""
try:
headers["Cookie"] = "cnsc=" + cookie
token = str(token)
@ -47,18 +62,29 @@ def getKurs(token: int, cookie: str):
start = content.find(" ") + 4
end = start + (content[start:].find(" "))
kurs = content[start:end]
except:
except AttributeError:
kurs = 0
return kurs
def logOut(token: int, cookie: str):
"""
Invalidiert Token und Cookie bei Dualis.
:param token:
:param cookie:
"""
headers["Cookie"] = "cnsc=" + cookie
requests.request("GET", url + "?APPNAME=CampusNet&PRGNAME=LOGOUT&ARGUMENTS=-N" + str(token)
+ ", -N001", headers=headers, data={})
def getSem(token: int, cookie: str):
"""
Liefert die Liste aller auf Dualis verfügbaren Semester.
:param token:
:param cookie:
:return Liste [[Semester, Semester-ID], ...]:
"""
headers["Cookie"] = "cnsc=" + cookie
token = str(token)
response = requests.request("GET", url +
@ -76,6 +102,13 @@ def getSem(token: int, cookie: str):
def getResults(token, cookie: str, resl: str):
"""
Liefert die Liste aller Prüfungsergebnisse eines Semesters.
:param token:
:param cookie:
:param resl:
:return [[Name, Note, Credits], ...]:
"""
headers["Cookie"] = "cnsc=" + cookie
response = requests.request("GET", url + "?APPNAME=CampusNet&PRGNAME=COURSERESULTS&ARGUMENTS=-N" + token +
",-N000307," + ",-N" + resl, headers=headers, data={})
@ -95,6 +128,12 @@ def getResults(token, cookie: str, resl: str):
def getPruefung(url):
"""
Ermittelt Noten "geschachtelter" Prüfungen, die nicht auf der Hauptseite angezeigt werden.
TODO: Namen der spezifischen Prüfungen auch zurückgeben, um Zusammensetzung zu spezifizieren.
:param url:
:return:
"""
response = requests.request("GET", "https://dualis.dhbw.de" + url, headers=headers, data={})
html = BeautifulSoup(response.content.decode("utf-8"), 'lxml')
table = html.find('table')
@ -111,7 +150,30 @@ def getPruefung(url):
def checkLifetime(timecode: float):
"""
Dualis-Token laufen nach 30 Minuten ab.
True, wenn Token noch gültig ist.
False wenn ungültig.
:param timecode:
:return:
"""
if time.time() - timecode > 1800:
return False
else:
return True
def timeOut(dualis: Dualis, cookie: str, origin: str):
"""
Checkt, ob Token und Cookie noch valide/vorhanden sind.
False, falls alles richtig ist.
Weiterleitung zum Login, falls nicht.
:param dualis:
:param cookie:
:param origin:
:return:
"""
if not checkLifetime(dualis.token_created) or not cookie:
return redirect(url_for("login", next=url_for(origin), code=10))
else:
return False