Create README; Set-Up Streamline

This commit is contained in:
2024-04-14 15:25:32 +02:00
parent 447800ad73
commit 1d30c07cdc
9 changed files with 68 additions and 34 deletions

33
README.md Normal file
View File

@ -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)

View File

@ -22,7 +22,7 @@ async def checkUser(email: str, password: str):
Erhält von Dualis den Token und Cookie für User. Erhält von Dualis den Token und Cookie für User.
:param email: :param email:
:param password: :param password:
:return (Token, Session): :return (Token, Cookie):
""" """
async with httpx.AsyncClient() as s: async with httpx.AsyncClient() as s:
fpw = urllib.parse.quote(password, safe='', encoding=None, errors=None) fpw = urllib.parse.quote(password, safe='', encoding=None, errors=None)
@ -53,7 +53,7 @@ async def getKurs(token: int, cookie: str):
try: try:
headers["Cookie"] = "cnsc=" + cookie headers["Cookie"] = "cnsc=" + cookie
token = str(token) 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,", response = await s.get(url=f"{url}?APPNAME=CampusNet&PRGNAME=COURSERESULTS&ARGUMENTS=-N{token},-N000307,",
headers=headers) headers=headers)
html = BeautifulSoup(response.text, 'lxml') html = BeautifulSoup(response.text, 'lxml')

View File

@ -1,4 +1,5 @@
import getpass import getpass
import sys
def get_mysql(): def get_mysql():
@ -6,6 +7,7 @@ def get_mysql():
Extrahiert die MySQL-Anmeldedaten aus ~/.my.cnf . \n Extrahiert die MySQL-Anmeldedaten aus ~/.my.cnf . \n
Funktioniert wahrscheinlich nur auf Linux, vor allem für den Server gedacht. Funktioniert wahrscheinlich nur auf Linux, vor allem für den Server gedacht.
""" """
if sys.platform == "linux":
u = getpass.getuser() u = getpass.getuser()
f = open("/home/"+u+"/.my.cnf", "r") f = open("/home/"+u+"/.my.cnf", "r")
i = f.read() i = f.read()
@ -15,3 +17,5 @@ def get_mysql():
ro = i.find("[clientreadonly]") ro = i.find("[clientreadonly]")
p = i[p+9:ro-2] p = i[p+9:ro-2]
return u, p return u, p
else:
return "paulmrtn", "LQAlnY9YNXSJHBG5:9Ls"

View File

@ -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));"

View File

@ -75,7 +75,7 @@ class Meals(db.Model):
""" """
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.Date) date = db.Column(db.Date)
name = db.Column(db.String(100)) name = db.Column(db.String(200))
vegetarian = db.Column(db.Boolean) vegetarian = db.Column(db.Boolean)
vegan = db.Column(db.Boolean) vegan = db.Column(db.Boolean)
schwein = db.Column(db.Boolean) schwein = db.Column(db.Boolean)
@ -83,6 +83,9 @@ class Meals(db.Model):
scheduler = APScheduler() scheduler = APScheduler()
app = create() app = create()
with app.app_context():
print("Creating Tables....")
db.create_all()
def_src = ["*.paulmartin.cloud", '\'self\''] def_src = ["*.paulmartin.cloud", '\'self\'']
Talisman(app, content_security_policy={"default-src": def_src, "script-src": def_src # + ["'unsafe-inline'"] Talisman(app, content_security_policy={"default-src": def_src, "script-src": def_src # + ["'unsafe-inline'"]
}) })

View File

@ -1,17 +1,20 @@
beautifulsoup4~=4.12.2 beautifulsoup4
Flask~=3.0.3 Flask
Flask_APScheduler Flask_APScheduler
Flask_Login Flask_Login
flask_sqlalchemy flask_sqlalchemy
icalendar~=5.0.11 icalendar
recurring_ical_events recurring_ical_events
Requests~=2.31.0
talisman talisman
Werkzeug~=3.0.0 Werkzeug
lxml lxml
bs4~=0.0.1 bs4
pytz~=2023.3.post1 pytz
flask_talisman
asyncio~=3.4.3 asyncio
httpx~=1.0.0b0 httpx
celery~=5.4.0rc2 celery
flask[async]
pymysql
APScheduler
cryptography

View File

@ -295,8 +295,7 @@ async def login_post():
name = email[pname:pname + ename].capitalize() name = email[pname:pname + ename].capitalize()
new_user = User(email=email, name=name, id=hashid) new_user = User(email=email, name=name, id=hashid)
db.session.add(new_user) db.session.add(new_user)
cookie = t[1]
cookie = requesthelpers.getCookie(t[1].cookies)
new_dualis = Dualis(uid=hashid, token=t[0], token_created=int(time.time())) new_dualis = Dualis(uid=hashid, token=t[0], token_created=int(time.time()))
db.session.add(new_dualis) db.session.add(new_dualis)

View File

@ -4,7 +4,6 @@
<title>DualHub</title> <title>DualHub</title>
<link rel="stylesheet" type="text/css" href={{ url_for("static", filename="style.css") }}> <link rel="stylesheet" type="text/css" href={{ url_for("static", filename="style.css") }}>
<meta http-equiv="refresh" content="510"> <meta http-equiv="refresh" content="510">
<script async src="https://analytics.paulmartin.cloud/script.js" data-website-id="459fa66e-e255-4393-8e89-ead8b1572d0d"></script>
{% block head %} {% block head %}
{% endblock %} {% endblock %}
</head> </head>

View File

@ -4,7 +4,6 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Vorlesungsplan</title> <title>Vorlesungsplan</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='cal.css') }}"> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='cal.css') }}">
<script async src="https://analytics.paulmartin.cloud/script.js" data-website-id="459fa66e-e255-4393-8e89-ead8b1572d0d"></script>
</head> </head>
<body> <body>
<nav> <nav>