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.
: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')

View File

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

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,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'"]
})

View File

@ -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
bs4
pytz
flask_talisman
asyncio
httpx
celery
flask[async]
pymysql
APScheduler
cryptography

View File

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

View File

@ -4,7 +4,6 @@
<title>DualHub</title>
<link rel="stylesheet" type="text/css" href={{ url_for("static", filename="style.css") }}>
<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 %}
{% endblock %}
</head>

View File

@ -4,7 +4,6 @@
<meta charset="UTF-8">
<title>Vorlesungsplan</title>
<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>
<body>
<nav>