-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
183 lines (163 loc) · 6.14 KB
/
Copy pathmain.py
File metadata and controls
183 lines (163 loc) · 6.14 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
from flask import Flask, render_template, request, send_from_directory, redirect, url_for, session, flash
import os
import platform
import psutil
from datetime import datetime
app = Flask(__name__)
app.secret_key = "supersecretkey" # Zorg ervoor dat je deze aanpast voor productie
UPLOAD_FOLDER = "uploads"
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
CREDENTIALS_FILE = "credentials.txt"
# Laden van opgeslagen gebruikersgegevens
USER_CREDENTIALS = {}
def load_credentials():
if os.path.exists(CREDENTIALS_FILE):
with open(CREDENTIALS_FILE, "r") as file:
for line in file:
username, password = line.strip().split(",")
USER_CREDENTIALS[username] = password
def save_credentials(username, password):
with open(CREDENTIALS_FILE, "a") as file:
file.write(f"{username},{password}\n")
load_credentials()
# Serve index.html op de rootpagina
@app.route("/")
def serve_index():
index_path = os.path.join(UPLOAD_FOLDER, "index.html")
if os.path.exists(index_path):
return send_from_directory(UPLOAD_FOLDER, "index.html")
else:
return "No index.html found in uploads directory."
# Bestanden uploaden
@app.route("/upload", methods=["GET", "POST"])
def upload_file():
if request.method == "POST":
if "file" not in request.files:
return "No file part", 400
file = request.files["file"]
if file.filename == "":
return "No selected file", 400
file.save(os.path.join(UPLOAD_FOLDER, file.filename))
flash(f"File {file.filename} uploaded successfully!", "success")
return redirect(url_for("dashboard"))
return '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload File</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">Upload</button>
</form>
</body>
</html>
'''
# Dashboardpagina met loginvereiste
@app.route("/dashboard", methods=["GET", "POST"])
def dashboard():
if "user" not in session:
return redirect(url_for("login"))
# Krijg alle bestanden in de uploads map
uploaded_files = os.listdir(UPLOAD_FOLDER)
# Verwijderen van een bestand
if request.method == "POST":
filename_to_delete = request.form.get("file_to_delete")
if filename_to_delete and filename_to_delete in uploaded_files:
file_path = os.path.join(UPLOAD_FOLDER, filename_to_delete)
os.remove(file_path)
flash(f"File {filename_to_delete} deleted successfully!", "danger")
return redirect(url_for("dashboard"))
host_info = {
"system_name": platform.system(),
"node_name": platform.node(),
"release": platform.release(),
"version": platform.version(),
"machine": platform.machine(),
"processor": platform.processor(),
"uptime": str(datetime.now() - datetime.fromtimestamp(psutil.boot_time())).split('.')[0],
"cpu_usage": psutil.cpu_percent(interval=1),
"memory": psutil.virtual_memory().percent,
"disk": psutil.disk_usage('/').percent,
}
return render_template("dashboard.html", host_info=host_info, uploaded_files=uploaded_files)
# Setup voor eerste login
@app.route("/setup", methods=["GET", "POST"])
def setup():
if USER_CREDENTIALS:
return redirect(url_for("login")) # Als de gebruiker al bestaat, ga naar login
if request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")
if not username or not password:
return "Username and password cannot be empty!", 400
USER_CREDENTIALS[username] = password
save_credentials(username, password)
return redirect(url_for("login"))
return '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Setup Account</title>
</head>
<body>
<h1>Setup Account</h1>
<form method="post">
<label for="username">Set Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Set Password:</label>
<input type="password" id="password" name="password" required><br><br>
<button type="submit">Set Account</button>
</form>
</body>
</html>
'''
# Loginpagina
@app.route("/login", methods=["GET", "POST"])
def login():
if not USER_CREDENTIALS:
return redirect(url_for("setup")) # Als er geen gebruiker is, ga naar setup
if request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")
if username in USER_CREDENTIALS and USER_CREDENTIALS[username] == password:
session["user"] = username
return redirect(url_for("dashboard"))
else:
return "Invalid credentials. Please try again.", 401
return '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<button type="submit">Login</button>
</form>
</body>
</html>
'''
# Logoutpagina
@app.route("/logout")
def logout():
session.pop("user", None)
return redirect(url_for("login"))
# Bestanden serveren vanuit uploads
@app.route("/<path:filename>")
def serve_file(filename):
return send_from_directory(UPLOAD_FOLDER, filename)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=4545) # Zorg ervoor dat Flask luistert op poort 4545