From 1d30c07cdcdac887386c52a8bfc81dfda4353590 Mon Sep 17 00:00:00 2001 From: Paul Martin Date: Sun, 14 Apr 2024 15:25:32 +0200 Subject: [PATCH] Create README; Set-Up Streamline --- README.md | 33 +++++++++++++++++++++++++++++++++ fetchDUALIS.py | 4 ++-- get_mysql.py | 22 +++++++++++++--------- init-sql.sh | 6 ------ init.py | 7 +++++-- requirements.txt | 25 ++++++++++++++----------- routing.py | 3 +-- templates/index.html | 1 - templates/plan-general.html | 1 - 9 files changed, 68 insertions(+), 34 deletions(-) create mode 100644 README.md delete mode 100755 init-sql.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..ebd9cf7 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# DualHub +### Der duale Studienplaner! +... + +## INSTALLATION +### Voraussetzungen +Natürlich: Eine IDE und Python 3.x +### 1. Dieses Repo klonen +``` +git clone https://git.paulmartin.cloud/SoftwareEngineering/DualHub.git +``` +(oder per Version Control deiner IDE klonen) + +### 2. Die nötigen Pakete installieren +``` +pip install -r requirements.txt +pip install "flask[async]" +``` +Achtung: Falls deine IDE ein VENV erstellt, zuerst: +``` +venv\Scripts\activate +``` + +### 3. Datenbank erstellen +#### 3.1. [MySQL installieren](https://dev.mysql.com/doc/mysql-installation-excerpt/8.0/en/) +Benutzername und Passwort für DualHub können frei gewählt werden +#### 3.2. Datenbank erstellen +``` mysql +CREATE DATABASE paulmrtn_DUALHUB; +``` +Achtung: Sicherstellen, dass der DualHub-User Schreib- und Leseberechtigungen hat! +#### 3.3. Zugangsdaten in get_mysql.py eintragen (nur Windows) + diff --git a/fetchDUALIS.py b/fetchDUALIS.py index e386949..dac1e01 100644 --- a/fetchDUALIS.py +++ b/fetchDUALIS.py @@ -22,7 +22,7 @@ async def checkUser(email: str, password: str): Erhält von Dualis den Token und Cookie für User. :param email: :param password: - :return (Token, Session): + :return (Token, Cookie): """ async with httpx.AsyncClient() as s: fpw = urllib.parse.quote(password, safe='', encoding=None, errors=None) @@ -53,7 +53,7 @@ async def getKurs(token: int, cookie: str): try: headers["Cookie"] = "cnsc=" + cookie token = str(token) - async with httpx.AsyncClient as s: + async with httpx.AsyncClient() as s: response = await s.get(url=f"{url}?APPNAME=CampusNet&PRGNAME=COURSERESULTS&ARGUMENTS=-N{token},-N000307,", headers=headers) html = BeautifulSoup(response.text, 'lxml') diff --git a/get_mysql.py b/get_mysql.py index a760737..963e68d 100644 --- a/get_mysql.py +++ b/get_mysql.py @@ -1,4 +1,5 @@ import getpass +import sys def get_mysql(): @@ -6,12 +7,15 @@ def get_mysql(): Extrahiert die MySQL-Anmeldedaten aus ~/.my.cnf . \n Funktioniert wahrscheinlich nur auf Linux, vor allem für den Server gedacht. """ - u = getpass.getuser() - f = open("/home/"+u+"/.my.cnf", "r") - i = f.read() - u = i.find("user=") - p = i.find("password=") - u = i[u+5:p-1] - ro = i.find("[clientreadonly]") - p = i[p+9:ro-2] - return u, p + if sys.platform == "linux": + u = getpass.getuser() + f = open("/home/"+u+"/.my.cnf", "r") + i = f.read() + u = i.find("user=") + p = i.find("password=") + u = i[u+5:p-1] + ro = i.find("[clientreadonly]") + p = i[p+9:ro-2] + return u, p + else: + return "paulmrtn", "LQAlnY9YNXSJHBG5:9Ls" diff --git a/init-sql.sh b/init-sql.sh deleted file mode 100755 index 5eee76c..0000000 --- a/init-sql.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -#Erstellt alle benötigten MySQL-Tabellen. - -mysql -e "USE paulmrtn_DUALHUB; CREATE TABLE user ( id int NOT NULL, email VARCHAR(255), name VARCHAR(255), kurs VARCHAR (15), PRIMARY KEY (ID), UNIQUE (ID, EMAIL) );" -mysql -e "USE paulmrtn_DUALHUB; CREATE TABLE dualis ( uid int NOT NULL, token VARCHAR(255), result_list VARCHAR(15), token_created INT, PRIMARY KEY (uid));" -mysql -e "USE paulmrtn_DUALHUB; CREATE TABLE meals ( id int NOT NULL, date date, name VARCHAR(200), vegetarian tinyint(1), vegan tinyint(1), schwein tinyint(1), PRIMARY KEY (id));" diff --git a/init.py b/init.py index ba08199..c9e09e8 100644 --- a/init.py +++ b/init.py @@ -75,14 +75,17 @@ class Meals(db.Model): """ id = db.Column(db.Integer, primary_key=True) date = db.Column(db.Date) - name = db.Column(db.String(100)) + name = db.Column(db.String(200)) vegetarian = db.Column(db.Boolean) vegan = db.Column(db.Boolean) schwein = db.Column(db.Boolean) -scheduler = APScheduler () +scheduler = APScheduler() app = create() +with app.app_context(): + print("Creating Tables....") + db.create_all() def_src = ["*.paulmartin.cloud", '\'self\''] Talisman(app, content_security_policy={"default-src": def_src, "script-src": def_src # + ["'unsafe-inline'"] }) diff --git a/requirements.txt b/requirements.txt index 8d80570..5b7d78c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,17 +1,20 @@ -beautifulsoup4~=4.12.2 -Flask~=3.0.3 +beautifulsoup4 +Flask Flask_APScheduler Flask_Login flask_sqlalchemy -icalendar~=5.0.11 +icalendar recurring_ical_events -Requests~=2.31.0 talisman -Werkzeug~=3.0.0 +Werkzeug lxml -bs4~=0.0.1 -pytz~=2023.3.post1 - -asyncio~=3.4.3 -httpx~=1.0.0b0 -celery~=5.4.0rc2 \ No newline at end of file +bs4 +pytz +flask_talisman +asyncio +httpx +celery +flask[async] +pymysql +APScheduler +cryptography \ No newline at end of file diff --git a/routing.py b/routing.py index 9658c8d..a67aca2 100644 --- a/routing.py +++ b/routing.py @@ -295,8 +295,7 @@ async def login_post(): name = email[pname:pname + ename].capitalize() new_user = User(email=email, name=name, id=hashid) db.session.add(new_user) - - cookie = requesthelpers.getCookie(t[1].cookies) + cookie = t[1] new_dualis = Dualis(uid=hashid, token=t[0], token_created=int(time.time())) db.session.add(new_dualis) diff --git a/templates/index.html b/templates/index.html index 5e41350..6b5532d 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,7 +4,6 @@ DualHub - {% block head %} {% endblock %} diff --git a/templates/plan-general.html b/templates/plan-general.html index 373d35b..c93b7ea 100644 --- a/templates/plan-general.html +++ b/templates/plan-general.html @@ -4,7 +4,6 @@ Vorlesungsplan -