Timeout-Check + MERGE-Prep
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user