-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
97 lines (79 loc) · 3.18 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# | ================================================================================ |
# | Published under the GNU GENERAL PUBLIC LICENSE. Copyright © 2021 Mattia Metzler. |
# | ================================================================================ |
import json
import api_utils
import os
from uuid import uuid4
def main():
"""
Diese Funktion stellt den Server hinter der Web-App dar. Dafür wird durch die Datei api_utils.py ein Webserver gestartet.\n
Der Webserver nimmt requests (GET, POST, DELETE) vom Client entgegen und antwortet mit responses. Diese responses können anschliessend auf dem Client verwendet werden.\n
"""
api = api_utils.API()
# Dateien für Nachrichten und Benutzer
filename = "data.json"
filenameUsers = "users.json"
# Dateien vorbereiten falls sie noch nicht existieren
if not os.path.exists(filename):
with open(filename, "w") as f:
json.dump([], f)
if not os.path.exists(filenameUsers):
with open(filenameUsers, "w") as f:
json.dump({
"?": "Alle"
}, f, indent=4)
# Alle Nachrichten abrufen
@api.GET("/api/")
def get(request):
with open(filename) as f:
dataList = json.load(f)
return dataList
# Eine neue Nachricht hinzufügen
@api.POST("/api/")
def post(request, content, fromUser:str, toUser:str, type:str):
# aktuelle Nachrichtenliste aufrufen
with open(filename) as f:
entryList = json.load(f)
# Headers zur neuen Nachricht hinzufügen
entryList.append({
"type": type,
"from": fromUser,
"to": toUser,
"content": content
})
# Liste aktualisieren
with open("data.json", "w") as f:
json.dump(entryList, f, indent=4)
# Debug Nachricht für Client
return f'Server: Nachricht "{content}" mit Sender "{getUsers(None)[fromUser]}" und Empfänger "{getUsers(None)[toUser]}" wurde zu den Nachrichten Hinzugefügt.'
# Liste der Benutzer an Clients schicken
@api.GET("/api/users/")
def getUsers(request):
with open(filenameUsers) as f:
userList = json.load(f)
return userList
# Neue Benutzer abspeichern
@api.POST("/api/users/")
def saveUsers(request, name:str):
newUuid = str(uuid4()) # uuid (Universal Unique IDentifier) erstellen
with open(filenameUsers) as f:
userList = json.load(f)
# Benutzername wird unter dem uuid abgespeichert
userList[newUuid] = name
with open(filenameUsers, "w") as f:
json.dump(userList, f, indent=4)
# uuid wird an den Benutzer übergeben
return newUuid
# Alle Nachrichten löschen
@api.DELETE("/api/")
def delete(request):
with open(filename, "w") as f:
json.dump([], f)
return f"Server: Alle Nachrichten wurden gelöscht."
api_utils.run(api)
# Sicherstellen, dass der Server nicht durch importieren der Datei gestartet wird.
if __name__ == "__main__":
main()
else:
print("Dieses Skript muss ausgeführt werden, nicht importiert.")